source: orange/Orange/OrangeWidgets/Prototypes/OWTranslateDomain.py @ 10864:efb31abdf0b0

Revision 10864:efb31abdf0b0, 2.4 KB checked in by Ales Erjavec <ales.erjavec@…>, 2 years ago (diff)

Print stack trace if domain translation raises an exception.

Line 
1"""
2<name>Translate Domain</name>
3<description>Translate input data into a target domain</description>
4<contact>ales.erjavec(@ at @)fri.uni-lj.si</contact>
5<icons>icons/TranslateDomain.png</icons>
6<tags>translate,transformation</tags>
7
8"""
9
10from OWWidget import *
11
12import OWGUI
13import Orange
14
15
16class OWTranslateDomain(OWWidget):
17    def __init__(self, parent=None, signalManager=None,
18                 title="Translate Domain"):
19        OWWidget.__init__(self, parent, signalManager, title,
20                          wantMainArea=False)
21
22        self.inputs = [("Target Domain", Orange.data.Table, self.set_target),
23                       ("Input Data", Orange.data.Table, self.set_input)]
24
25        self.outputs = [("Translated Data", Orange.data.Table)]
26
27        box = OWGUI.widgetBox(self.controlArea, "Info")
28        self.info = OWGUI.widgetLabel(box, "No target domain\nNo input data")
29
30        OWGUI.rubber(self.controlArea)
31
32        self.target = None
33        self.input_data = None
34
35    def set_target(self, target=None):
36        self.target = target
37
38    def set_input(self, input_data=None):
39        self.input_data = input_data
40
41    def handleNewSignals(self):
42        self.update_info()
43        self.error(0)
44        self.commit()
45
46    def update_info(self):
47        target_lines = ["No target domain"]
48        input_lines = ["No input data"]
49        if self.target is not None:
50            class_var = self.target.domain.class_var
51            if class_var:
52                class_str = type(class_var).__name__.lower()
53            else:
54                class_str = "no"
55            num_features = len(self.target.domain.features)
56            target_lines = ["Target domain with %i features and %s class." % \
57                            (num_features, class_str)]
58        if self.input_data is not None:
59            input_lines = ["Input data with %i instances" % \
60                           len(self.input_data)]
61        self.info.setText("\n".join(target_lines + input_lines))
62
63    def commit(self):
64        self.error(0)
65        translated = None
66        if self.target is not None and self.input_data is not None:
67            try:
68                translated = self.input_data.translate(self.target.domain)
69            except Exception, ex:
70                import traceback
71                traceback.print_exc(limit=8, file=sys.stdout)
72                self.error("Failed to convert the domain (%r)." % ex)
73        self.send("Translated Data", translated)
Note: See TracBrowser for help on using the repository browser.