Coverage for gws-app/gws/plugin/model_validator/date_range/__init__.py: 0%
32 statements
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-16 23:09 +0200
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-16 23:09 +0200
1"""Validator for date ranges."""
3from typing import Optional
5import gws
6import gws.base.model.validator
7import gws.lib.datetimex as dt
9gws.ext.new.modelValidator('dateRange')
12class Config(gws.base.model.validator.Config):
13 """Validator for date ranges."""
15 min: Optional[gws.ext.config.modelValue]
16 """Minimum date for the range."""
17 max: Optional[gws.ext.config.modelValue]
18 """Maximum date for the range."""
21class Object(gws.base.model.validator.Object):
22 minVal: Optional[gws.ModelValue]
23 maxVal: Optional[gws.ModelValue]
25 def configure(self):
26 self.minVal = self.create_child_if_configured(gws.ext.object.modelValue, self.cfg('min'))
27 self.maxVal = self.create_child_if_configured(gws.ext.object.modelValue, self.cfg('max'))
29 def validate(self, field, feature, mc):
30 val = feature.attributes.get(field.name)
31 if not dt.is_date(val):
32 return False
34 d = dt.to_iso_date_string(val)
36 if self.minVal:
37 v = self.minVal.compute(field, feature, mc)
38 s = v if isinstance(v, str) else dt.to_iso_date_string(v)
39 if d < s:
40 return False
42 if self.maxVal:
43 v = self.maxVal.compute(field, feature, mc)
44 s = v if isinstance(v, str) else dt.to_iso_date_string(v)
45 if d > s:
46 return False
48 return True