4444ContinuousDescriptor = \
4545 namedtuple ("ContinuousDescriptor" ,
4646 ["name" , "expression" , "number_of_decimals" ])
47+ DateTimeDescriptor = \
48+ namedtuple ("DateTimeDescriptor" ,
49+ ["name" , "expression" ])
4750DiscreteDescriptor = \
4851 namedtuple ("DiscreteDescriptor" ,
4952 ["name" , "expression" , "values" , "ordered" ])
@@ -57,6 +60,10 @@ def make_variable(descriptor, compute_value):
5760 descriptor .name ,
5861 descriptor .number_of_decimals ,
5962 compute_value )
63+ if isinstance (descriptor , DateTimeDescriptor ):
64+ return Orange .data .TimeVariable (
65+ descriptor .name ,
66+ compute_value = compute_value , have_date = True , have_time = True )
6067 elif isinstance (descriptor , DiscreteDescriptor ):
6168 return Orange .data .DiscreteVariable (
6269 descriptor .name ,
@@ -233,6 +240,15 @@ def editorData(self):
233240 )
234241
235242
243+ class DateTimeFeatureEditor (FeatureEditor ):
244+
245+ def editorData (self ):
246+ return DateTimeDescriptor (
247+ name = self .nameedit .text (),
248+ expression = self .expressionedit .text ()
249+ )
250+
251+
236252class DiscreteFeatureEditor (FeatureEditor ):
237253 def __init__ (self , * args , ** kwargs ):
238254 super ().__init__ (* args , ** kwargs )
@@ -277,6 +293,7 @@ def editorData(self):
277293_VarMap = {
278294 DiscreteDescriptor : vartype (Orange .data .DiscreteVariable ()),
279295 ContinuousDescriptor : vartype (Orange .data .ContinuousVariable ()),
296+ DateTimeDescriptor : vartype (Orange .data .TimeVariable ()),
280297 StringDescriptor : vartype (Orange .data .StringVariable ())
281298}
282299
@@ -354,6 +371,7 @@ class Outputs:
354371
355372 EDITORS = [
356373 (ContinuousDescriptor , ContinuousFeatureEditor ),
374+ (DateTimeDescriptor , DateTimeFeatureEditor ),
357375 (DiscreteDescriptor , DiscreteFeatureEditor ),
358376 (StringDescriptor , StringFeatureEditor )
359377 ]
@@ -426,6 +444,12 @@ def generate_newname(fmt):
426444 lambda : self .addFeature (
427445 StringDescriptor (generate_newname ("S{}" ), "" ))
428446 )
447+ datetime = menu .addAction ("Date/Time" )
448+ datetime .triggered .connect (
449+ lambda : self .addFeature (
450+ DateTimeDescriptor (generate_newname ("T{}" ), "" ))
451+ )
452+
429453 menu .addSeparator ()
430454 self .duplicateaction = menu .addAction ("Duplicate Selected Variable" )
431455 self .duplicateaction .triggered .connect (self .duplicateFeature )
@@ -650,6 +674,8 @@ def send_report(self):
650674 "; ordered" * feature .ordered )
651675 elif isinstance (feature , ContinuousDescriptor ):
652676 items [feature .name ] = "{} (numeric)" .format (feature .expression )
677+ elif isinstance (feature , DateTimeDescriptor ):
678+ items [feature .name ] = "{} (date/time)" .format (feature .expression )
653679 else :
654680 items [feature .name ] = "{} (text)" .format (feature .expression )
655681 self .report_items (
0 commit comments