Coverage for gws-app/gws/plugin/model_field/date/__init__.py: 86%

21 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-05 13:35 +0200

1"""Date field. 

2 

3A scalar field for dates. Values from the client are parsed with 

4``gws.lib.datetimex.parse`` and stored as ``datetime.date`` objects. 

5They are always sent to the client as ISO date strings (``YYYY-MM-DD``); 

6locale-specific formatting is left to the client. Without a configured 

7widget, the field uses a ``date`` widget. 

8 

9Example:: 

10 

11 fields+ { name "start_date" type "date" title "Start date" } 

12""" 

13 

14import gws 

15import gws.base.model.scalar_field 

16import gws.lib.datetimex 

17 

18 

19@gws.ext.config.modelField('date') 

20class Config(gws.base.model.scalar_field.Config): 

21 """Field for date values.""" 

22 

23 pass 

24 

25 

26@gws.ext.props.modelField('date') 

27class Props(gws.base.model.scalar_field.Props): 

28 pass 

29 

30 

31@gws.ext.object.modelField('date') 

32class Object(gws.base.model.scalar_field.Object): 

33 """Date field object.""" 

34 

35 attributeType = gws.AttributeType.date 

36 

37 def configure_widget(self): 

38 if not super().configure_widget(): 

39 self.widget = self.root.create_shared(gws.ext.object.modelWidget, type='date') 

40 return True 

41 

42 def prop_to_python(self, feature, value, mc): 

43 d = gws.lib.datetimex.parse(value) 

44 return gws.lib.datetimex.dt.date(d.year, d.month, d.day) if d else gws.ErrorValue 

45 

46 def python_to_prop(self, feature, value, mc): 

47 return gws.lib.datetimex.to_iso_date_string(value)