Skip to content

Commit 9f99cb4

Browse files
committed
Feature Constructor: Add DateTime variable
1 parent 24b4a18 commit 9f99cb4

1 file changed

Lines changed: 26 additions & 0 deletions

File tree

Orange/widgets/data/owfeatureconstructor.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@
4444
ContinuousDescriptor = \
4545
namedtuple("ContinuousDescriptor",
4646
["name", "expression", "number_of_decimals"])
47+
DateTimeDescriptor = \
48+
namedtuple("DateTimeDescriptor",
49+
["name", "expression"])
4750
DiscreteDescriptor = \
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+
236252
class 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

Comments
 (0)