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

21 statements  

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

1"""Time field. 

2 

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

4``gws.lib.datetimex.parse_time`` and stored as ``datetime.time`` objects. 

5They are always sent to the client as ISO strings; locale-specific 

6formatting is left to the client. Without a configured widget, the field 

7uses an ``input`` widget. 

8 

9Example:: 

10 

11 fields+ { name "opens_at" type "time" title "Opening time" } 

12""" 

13 

14import gws 

15import gws.base.model.scalar_field 

16import gws.lib.datetimex 

17 

18 

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

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

21 """Field for time values.""" 

22 

23 pass 

24 

25 

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

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

28 pass 

29 

30 

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

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

33 """Time field object.""" 

34 

35 attributeType = gws.AttributeType.datetime 

36 

37 def configure_widget(self): 

38 if not super().configure_widget(): 

39 # @TODO time widget 

40 self.widget = self.root.create_shared(gws.ext.object.modelWidget, type='input') 

41 return True 

42 

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

44 d = gws.lib.datetimex.parse_time(value) 

45 return d if d else gws.ErrorValue 

46 

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

48 return gws.lib.datetimex.time_to_iso_string(value)