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

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. (added in 8.1)""" 

14 min: Optional[gws.ext.config.modelValue] 

15 max: Optional[gws.ext.config.modelValue] 

16 

17 

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

19 minVal: Optional[gws.ModelValue] 

20 maxVal: Optional[gws.ModelValue] 

21 

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

25 

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

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

28 if not dt.is_date(val): 

29 return False 

30 

31 d = dt.to_iso_date_string(val) 

32 

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 

38 

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 

44 

45 return True