Coverage for gws-app/gws/plugin/model_validator/date_range/__init__.py: 0%
30 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-17 01:37 +0200
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-17 01:37 +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. (added in 8.1)"""
14 min: Optional[gws.ext.config.modelValue]
15 max: Optional[gws.ext.config.modelValue]
18class Object(gws.base.model.validator.Object):
19 minVal: Optional[gws.ModelValue]
20 maxVal: Optional[gws.ModelValue]
22 def configure(self):
23 self.minVal = self.create_child_if_configured(gws.ext.object.modelValue, self.cfg('min'))
24 self.maxVal = self.create_child_if_configured(gws.ext.object.modelValue, self.cfg('max'))
26 def validate(self, field, feature, mc):
27 val = feature.attributes.get(field.name)
28 if not dt.is_date(val):
29 return False
31 d = dt.to_iso_date_string(val)
33 if self.minVal:
34 v = self.minVal.compute(field, feature, mc)
35 s = v if isinstance(v, str) else dt.to_iso_date_string(v)
36 if d < s:
37 return False
39 if self.maxVal:
40 v = self.maxVal.compute(field, feature, mc)
41 s = v if isinstance(v, str) else dt.to_iso_date_string(v)
42 if d > s:
43 return False
45 return True