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

1"""Validator for date ranges.""" 

2 

3from typing import Optional 

4 

5import gws 

6import gws.base.model.validator 

7import gws.lib.datetimex as dt 

8 

9gws.ext.new.modelValidator('dateRange') 

10 

11 

12class Config(gws.base.model.validator.Config): 

13 """Validator for date ranges.""" 

14 

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.""" 

19 

20 

21class Object(gws.base.model.validator.Object): 

22 minVal: Optional[gws.ModelValue] 

23 maxVal: Optional[gws.ModelValue] 

24 

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')) 

28 

29 def validate(self, field, feature, mc): 

30 val = feature.attributes.get(field.name) 

31 if not dt.is_date(val): 

32 return False 

33 

34 d = dt.to_iso_date_string(val) 

35 

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 

41 

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 

47 

48 return True