Пример #1
0
    def report_view(self):
        """
        Return a OWReport instance used by the workflow.

        If a report window has not been set then the `report_view_requested`
        signal is emitted to allow the framework to setup the report window.
        If the report window is still not set after the signal is emitted, a
        new default OWReport instance is constructed and returned.

        Returns
        -------
        report : OWReport
        """
        from Orange.canvas.report.owreport import OWReport
        if self.__report_view is None:
            self.report_view_requested.emit()

        if self.__report_view is None:
            parent = self.parent()
            if isinstance(parent, QWidget):
                window = parent.window()  # type: QWidget
            else:
                window = None

            self.__report_view = OWReport()
            if window is not None:
                self.__report_view.setParent(window, Qt.Window)
        return self.__report_view
Пример #2
0
 def test_report_widgets_all(self):
     rep = OWReport.get_instance()
     widgets = self.clas_widgets + self.data_widgets + self.eval_widgets + \
               self.regr_widgets + self.unsu_widgets + self.dist_widgets + \
               self.visu_widgets + self.spec_widgets
     self.assertEqual(len(widgets), 52)
     self._create_report(widgets, rep, None)
Пример #3
0
 def test_report_widgets_visualize(self):
     app = QApplication(sys.argv)
     rep = OWReport.get_instance()
     data = Table("zoo")
     widgets = self.visu_widgets
     self.assertEqual(len(widgets), 10)
     self._create_report(widgets, rep, data, app)
Пример #4
0
 def test_report_widgets_all(self):
     rep = OWReport.get_instance()
     widgets = self.clas_widgets + self.data_widgets + self.eval_widgets + \
               self.regr_widgets + self.unsu_widgets + self.dist_widgets + \
               self.visu_widgets + self.spec_widgets
     self.assertEqual(len(widgets), 52)
     self._create_report(widgets, rep, None)
Пример #5
0
 def test_report_widgets_visualize(self):
     app = QApplication(sys.argv)
     rep = OWReport.get_instance()
     data = Table("zoo")
     widgets = self.visu_widgets
     self.assertEqual(len(widgets), 10)
     self._create_report(widgets, rep, data, app)
Пример #6
0
    def report_view(self):
        """
        Return a OWReport instance used by the workflow.

        If a report window has not been set then the `report_view_requested`
        signal is emitted to allow the framework to setup the report window.
        If the report window is still not set after the signal is emitted, a
        new default OWReport instance is constructed and returned.

        Returns
        -------
        report : OWReport
        """
        from Orange.canvas.report.owreport import OWReport
        if self.__report_view is None:
            self.report_view_requested.emit()

        if self.__report_view is None:
            parent = self.parent()
            if isinstance(parent, QWidget):
                window = parent.window()  # type: QWidget
            else:
                window = None

            self.__report_view = OWReport()
            if window is not None:
                self.__report_view.setParent(window, Qt.Window)
        return self.__report_view
Пример #7
0
 def test_report_widgets_unsupervised_dist(self):
     rep = OWReport.get_instance()
     data = Table("zoo")
     dist = Euclidean(data)
     widgets = self.dist_widgets
     self.assertEqual(len(widgets), 2)
     self._create_report(widgets, rep, dist)
Пример #8
0
 def test_report_widgets_unsupervised_dist(self):
     rep = OWReport.get_instance()
     data = Table("zoo")
     dist = Euclidean(data)
     widgets = self.dist_widgets
     self.assertEqual(len(widgets), 2)
     self._create_report(widgets, rep, dist)
Пример #9
0
 def test_report_widgets_all(self):
     app = QApplication(sys.argv)
     rep = OWReport.get_instance()
     widgets = self.clas_widgets + self.data_widgets + self.eval_widgets + \
               self.regr_widgets + self.unsu_widgets + self.dist_widgets + \
               self.visu_widgets + self.spec_widgets
     self.assertEqual(len(widgets), 51)
     self._create_report(widgets, rep, None, app)
Пример #10
0
 def test_report(self):
     count = 5
     for i in range(count):
         rep = OWReport.get_instance()
         file = self.create_widget(OWFile)
         file.create_report_html()
         rep.make_report(file)
     self.assertEqual(rep.table_model.rowCount(), count)
Пример #11
0
 def test_report(self):
     count = 5
     for i in range(count):
         rep = OWReport.get_instance()
         file = self.create_widget(OWFile)
         file.create_report_html()
         rep.make_report(file)
     self.assertEqual(rep.table_model.rowCount(), count)
Пример #12
0
 def test_report(self):
     count = 5
     app = QApplication(sys.argv)
     for i in range(count):
         rep = OWReport.get_instance()
         file = OWFile()
         file.create_report_html()
         rep.make_report(file)
     self.assertEqual(rep.table_model.rowCount(), count)
Пример #13
0
 def test_report(self):
     count = 5
     app = QApplication(sys.argv)
     for i in range(count):
         rep = OWReport.get_instance()
         file = OWFile()
         file.create_report_html()
         rep.make_report(file)
     self.assertEqual(rep.table_model.rowCount(), count)
Пример #14
0
    def test_report_table(self):
        rep = OWReport().get_instance()
        model = PyTableModel([['x', 1, 2], ['y', 2, 2]])
        model.setHorizontalHeaderLabels(['a', 'b', 'c'])

        model.setData(model.index(0, 0), Qt.AlignHCenter | Qt.AlignTop,
                      Qt.TextAlignmentRole)
        model.setData(model.index(1, 0), QFont('', -1, QFont.Bold),
                      Qt.FontRole)
        model.setData(model.index(1, 2), QBrush(Qt.red), Qt.BackgroundRole)

        view = gui.TableView()
        view.show()
        view.setModel(model)
        rep.report_table('Name', view)
        self.maxDiff = None
        self.assertEqual(
            rep.report_html, '<h2>Name</h2><table>\n'
            '<tr>'
            '<th style="color:black;border:0;background:transparent;'
            'font-weight:normal;text-align:left;vertical-align:middle;">a</th>'
            '<th style="color:black;border:0;background:transparent;'
            'font-weight:normal;text-align:left;vertical-align:middle;">b</th>'
            '<th style="color:black;border:0;background:transparent;'
            'font-weight:normal;text-align:left;vertical-align:middle;">c</th>'
            '</tr>'
            '<tr>'
            '<td style="color:black;border:0;background:transparent;'
            'font-weight:normal;text-align:center;vertical-align:top;">x</td>'
            '<td style="color:black;border:0;background:transparent;'
            'font-weight:normal;text-align:right;vertical-align:middle;">1</td>'
            '<td style="color:black;border:0;background:transparent;'
            'font-weight:normal;text-align:right;vertical-align:middle;">2</td>'
            '</tr>'
            '<tr>'
            '<td style="color:black;border:0;background:transparent;'
            'font-weight:bold;text-align:left;vertical-align:middle;">y</td>'
            '<td style="color:black;border:0;background:transparent;'
            'font-weight:normal;text-align:right;vertical-align:middle;">2</td>'
            '<td style="color:black;border:0;background:#ff0000;'
            'font-weight:normal;text-align:right;vertical-align:middle;">2</td>'
            '</tr></table>')
Пример #15
0
    def test_report_table(self):
        rep = OWReport().get_instance()
        model = PyTableModel([['x', 1, 2],
                              ['y', 2, 2]])
        model.setHorizontalHeaderLabels(['a', 'b', 'c'])

        model.setData(model.index(0, 0), Qt.AlignHCenter | Qt.AlignTop, Qt.TextAlignmentRole)
        model.setData(model.index(1, 0), QFont('', -1, QFont.Bold), Qt.FontRole)
        model.setData(model.index(1, 2), QBrush(Qt.red), Qt.BackgroundRole)

        view = gui.TableView()
        view.show()
        view.setModel(model)
        rep.report_table('Name', view)
        self.maxDiff = None
        self.assertEqual(
            rep.report_html,
            '<h2>Name</h2><table>\n'
            '<tr>'
            '<th style="color:black;border:0;background:transparent;'
            'font-weight:normal;text-align:left;vertical-align:middle;">a</th>'
            '<th style="color:black;border:0;background:transparent;'
            'font-weight:normal;text-align:left;vertical-align:middle;">b</th>'
            '<th style="color:black;border:0;background:transparent;'
            'font-weight:normal;text-align:left;vertical-align:middle;">c</th>'
            '</tr>'
            '<tr>'
            '<td style="color:black;border:0;background:transparent;'
            'font-weight:normal;text-align:center;vertical-align:top;">x</td>'
            '<td style="color:black;border:0;background:transparent;'
            'font-weight:normal;text-align:right;vertical-align:middle;">1</td>'
            '<td style="color:black;border:0;background:transparent;'
            'font-weight:normal;text-align:right;vertical-align:middle;">2</td>'
            '</tr>'
            '<tr>'
            '<td style="color:black;border:0;background:transparent;'
            'font-weight:bold;text-align:left;vertical-align:middle;">y</td>'
            '<td style="color:black;border:0;background:transparent;'
            'font-weight:normal;text-align:right;vertical-align:middle;">2</td>'
            '<td style="color:black;border:0;background:#ff0000;'
            'font-weight:normal;text-align:right;vertical-align:middle;">2</td>'
            '</tr></table>')
Пример #16
0
    def show_report(self):
        """
        Raise the report window.
        """
        from Orange.canvas.report.owreport import OWReport

        report = OWReport.get_instance()
        self.create_report_html()
        report.make_report(self)
        report.show()
        report.raise_()
Пример #17
0
    def show_report(self):
        """
        Raise the report window.
        """
        from Orange.canvas.report.owreport import OWReport

        report = OWReport.get_instance()
        self.create_report_html()
        report.make_report(self)
        report.show()
        report.raise_()
Пример #18
0
    def test_report_widgets_classify(self):
        rep = OWReport.get_instance()
        data = Table("titanic")
        widgets = self.clas_widgets

        w = self.create_widget(OWTreeGraph)
        clf = TreeLearner(max_depth=3)(data)
        clf.instances = data
        w.ctree(clf)
        w.create_report_html()
        rep.make_report(w)

        self._create_report(widgets, rep, data)
Пример #19
0
    def test_report_widgets_regression(self):
        rep = OWReport.get_instance()
        data = Table("housing")
        widgets = self.regr_widgets

        w = self.create_widget(OWTreeGraph)
        mod = RegressionTreeLearner(max_depth=3)(data)
        mod.instances = data
        w.ctree(mod)
        w.create_report_html()
        rep.make_report(w)

        self._create_report(widgets, rep, data)
Пример #20
0
    def test_report_widgets_regression(self):
        rep = OWReport.get_instance()
        data = Table("housing")
        widgets = self.regr_widgets

        w = self.create_widget(OWTreeGraph)
        mod = RegressionTreeLearner(max_depth=3)(data)
        mod.instances = data
        w.ctree(mod)
        w.create_report_html()
        rep.make_report(w)

        self._create_report(widgets, rep, data)
Пример #21
0
    def test_report_widgets_classify(self):
        rep = OWReport.get_instance()
        data = Table("titanic")
        widgets = self.clas_widgets

        w = self.create_widget(OWTreeGraph)
        clf = TreeLearner(max_depth=3)(data)
        clf.instances = data
        w.ctree(clf)
        w.create_report_html()
        rep.make_report(w)

        self._create_report(widgets, rep, data)
Пример #22
0
    def test_report_widgets_classify(self):
        rep = OWReport.get_instance()
        data = Table("zoo")
        widgets = self.clas_widgets

        w = OWClassificationTreeGraph()
        clf = TreeLearner(max_depth=3)(data)
        clf.instances = data
        w.ctree(clf)
        w.create_report_html()
        rep.make_report(w)

        self.assertEqual(len(widgets) + 1, 8)
        self._create_report(widgets, rep, data)
Пример #23
0
    def test_report_widgets_classify(self):
        rep = OWReport.get_instance()
        data = Table("zoo")
        widgets = self.clas_widgets

        w = OWClassificationTreeGraph()
        clf = TreeLearner(max_depth=3)(data)
        clf.instances = data
        w.ctree(clf)
        w.create_report_html()
        rep.make_report(w)

        self.assertEqual(len(widgets) + 1, 8)
        self._create_report(widgets, rep, data)
Пример #24
0
    def test_report_widgets_regression(self):
        rep = OWReport.get_instance()
        data = Table("housing")
        widgets = self.regr_widgets

        w = OWRegressionTreeGraph()
        mod = TreeRegressionLearner(max_depth=3)(data)
        mod.instances = data
        w.ctree(mod)
        w.create_report_html()
        rep.make_report(w)

        self.assertEqual(len(widgets) + 1, 5)
        self._create_report(widgets, rep, data)
Пример #25
0
    def test_report_widgets_regression(self):
        rep = OWReport.get_instance()
        data = Table("housing")
        widgets = self.regr_widgets

        w = OWRegressionTreeGraph()
        mod = TreeRegressionLearner(max_depth=3)(data)
        mod.instances = data
        w.ctree(mod)
        w.create_report_html()
        rep.make_report(w)

        self.assertEqual(len(widgets) + 1, 5)
        self._create_report(widgets, rep, data)
Пример #26
0
    def setUpClass(cls):
        """Prepare environment for test execution

        Construct a dummy signal manager and monkey patch
        OWReport.get_instance to return a manually created instance.
        """
        super().setUpClass()

        cls.widgets = []

        cls.signal_manager = DummySignalManager()

        report = OWReport()
        cls.widgets.append(report)
        OWReport.get_instance = lambda: report
Пример #27
0
 def test_save_report_permission(self):
     """
     Permission Error may occur when trying to save report.
     GH-2147
     """
     rep = OWReport.get_instance()
     patch_target_1 = "Orange.canvas.report.owreport.open"
     patch_target_2 = "AnyQt.QtWidgets.QFileDialog.getSaveFileName"
     patch_target_3 = "AnyQt.QtWidgets.QMessageBox.exec_"
     filenames = ["f.report", "f.html"]
     for filename in filenames:
         with unittest.mock.patch(patch_target_1, create=True, side_effect=PermissionError),\
                 unittest.mock.patch(patch_target_2, return_value=(filename, 0)),\
                 unittest.mock.patch(patch_target_3, return_value=True):
             rep.save_report()
Пример #28
0
 def test_save_report(self):
     """
     Permission Error may occur when trying to save report.
     GH-2147
     """
     rep = OWReport.get_instance()
     patch_target_1 = "Orange.canvas.report.owreport.open"
     patch_target_2 = "AnyQt.QtWidgets.QFileDialog.getSaveFileName"
     patch_target_3 = "AnyQt.QtWidgets.QMessageBox.exec_"
     filenames = ["f.report", "f.html"]
     for filename in filenames:
         with unittest.patch(patch_target_1, create=True, side_effect=PermissionError),\
                 unittest.patch(patch_target_2, return_value=(filename, 0)),\
                 unittest.patch(patch_target_3, return_value=True):
             rep.save_report()
Пример #29
0
 def test_save_report(self):
     rep = OWReport.get_instance()
     file = self.create_widget(OWFile)
     file.create_report_html()
     rep.make_report(file)
     temp_dir = tempfile.mkdtemp()
     temp_name = os.path.join(temp_dir, "f.report")
     try:
         with mock.patch("AnyQt.QtWidgets.QFileDialog.getSaveFileName",
                         return_value=(temp_name, 0)), \
                 mock.patch("AnyQt.QtWidgets.QMessageBox.exec_",
                            return_value=True):
             rep.save_report()
     finally:
         os.remove(temp_name)
         os.rmdir(temp_dir)
Пример #30
0
    def test_report_widgets_evaluate(self):
        rep = OWReport.get_instance()
        data = Table("zoo")
        widgets = self.eval_widgets
        results = CrossValidation(data, [LogisticRegressionLearner()], store_data=True)
        results.learner_names = ["LR l2"]

        w = OWTestLearners()
        set_learner = getattr(w, w.inputs[0].handler)
        set_train = getattr(w, w.inputs[1].handler)
        set_test = getattr(w, w.inputs[2].handler)
        set_learner(LogisticRegressionLearner(), 0)
        set_train(data)
        set_test(data)
        w.create_report_html()
        rep.make_report(w)

        self.assertEqual(len(widgets) + 1, 4)
        self._create_report(widgets, rep, results)
Пример #31
0
    def test_report_widgets_evaluate(self):
        rep = OWReport.get_instance()
        data = Table("zoo")
        widgets = self.eval_widgets
        results = CrossValidation(data, [LogisticRegressionLearner()],
                                  store_data=True)
        results.learner_names = ["LR l2"]

        w = self.create_widget(OWTestLearners)
        set_learner = getattr(w, w.inputs[0].handler)
        set_train = getattr(w, w.inputs[1].handler)
        set_test = getattr(w, w.inputs[2].handler)
        set_learner(LogisticRegressionLearner(), 0)
        set_train(data)
        set_test(data)
        w.create_report_html()
        rep.make_report(w)

        self._create_report(widgets, rep, results)
Пример #32
0
 def show_report_view(self):
     from Orange.canvas.report.owreport import OWReport
     inst = OWReport.get_instance()
     inst.show()
     inst.raise_()
Пример #33
0
class WidgetsScheme(Scheme):
    """
    A Scheme containing Orange Widgets managed with a `WidgetsSignalManager`
    instance.

    Extends the base `Scheme` class to handle the lifetime
    (creation/deletion, etc.) of `OWBaseWidget` instances corresponding to
    the nodes in the scheme. It also delegates the interwidget signal
    propagation to an instance of `WidgetsSignalManager`.
    """

    #: Emitted when a report_view is requested for the first time, before a
    #: default instance is created. Clients can connect to this signal to
    #: set a report view (`set_report_view`) to use instead.
    report_view_requested = Signal()

    def __init__(self, parent=None, title=None, description=None, env={}):
        Scheme.__init__(self, parent, title, description, env=env)

        self.signal_manager = WidgetsSignalManager(self)
        self.widget_manager = WidgetManager()

        def onchanged(state):
            # Update widget creation policy based on signal manager's state
            if state == SignalManager.Running:
                self.widget_manager.set_creation_policy(WidgetManager.Normal)
            else:
                self.widget_manager.set_creation_policy(WidgetManager.OnDemand)

        self.signal_manager.stateChanged.connect(onchanged)
        self.widget_manager.set_scheme(self)
        self.__report_view = None  # type: Optional[OWReport]

    def widget_for_node(self, node):
        """
        Return the OWWidget instance for a `node`.
        """
        return self.widget_manager.widget_for_node(node)

    def node_for_widget(self, widget):
        """
        Return the SchemeNode instance for the `widget`.
        """
        return self.widget_manager.node_for_widget(widget)

    def sync_node_properties(self):
        """
        Sync the widget settings/properties with the SchemeNode.properties.
        Return True if there were any changes in the properties (i.e. if the
        new node.properties differ from the old value) and False otherwise.

        """
        changed = False
        for node in self.nodes:
            settings = self.widget_manager.widget_properties(node)
            if settings != node.properties:
                node.properties = settings
                changed = True
        log.debug("Scheme node properties sync (changed: %s)", changed)
        return changed

    def show_report_view(self):
        inst = self.report_view()
        inst.show()
        inst.raise_()

    def has_report(self):
        """
        Does this workflow have an associated report

        Returns
        -------
        has_report: bool
        """
        return self.__report_view is not None

    def report_view(self):
        """
        Return a OWReport instance used by the workflow.

        If a report window has not been set then the `report_view_requested`
        signal is emitted to allow the framework to setup the report window.
        If the report window is still not set after the signal is emitted, a
        new default OWReport instance is constructed and returned.

        Returns
        -------
        report : OWReport
        """
        from Orange.canvas.report.owreport import OWReport
        if self.__report_view is None:
            self.report_view_requested.emit()

        if self.__report_view is None:
            parent = self.parent()
            if isinstance(parent, QWidget):
                window = parent.window()  # type: QWidget
            else:
                window = None

            self.__report_view = OWReport()
            if window is not None:
                self.__report_view.setParent(window, Qt.Window)
        return self.__report_view

    def set_report_view(self, view):
        """
        Set the designated OWReport view for this workflow.

        Parameters
        ----------
        view : Optional[OWReport]
        """
        self.__report_view = view

    def dump_settings(self, node: SchemeNode):
        from Orange.widgets.settings import SettingsPrinter
        widget = self.widget_for_node(node)

        pp = SettingsPrinter(indent=4)
        pp.pprint(widget.settingsHandler.pack_data(widget))

    def event(self, event):
        if event.type() == QEvent.Close and \
                self.__report_view is not None:
            self.__report_view.close()
        return super().event(event)

    def close(self):
        QCoreApplication.sendEvent(self, QEvent(QEvent.Close))
Пример #34
0
 def test_report_pickle(self):
     app = QApplication(sys.argv)
     rep = OWReport().get_instance()
     p = pickle.dumps(rep)
     rep2 = pickle.loads(p)
     self.assertEqual(type(rep), type(rep2))
Пример #35
0
 def test_report_widgets_all(self):
     rep = OWReport.get_instance()
     widgets = self.model_widgets + self.data_widgets + self.eval_widgets + \
               self.unsu_widgets + self.dist_widgets + self.visu_widgets + \
               self.spec_widgets
     self._create_report(widgets, rep, None)
Пример #36
0
 def test_report_widgets_data(self):
     rep = OWReport.get_instance()
     data = Table("zoo")
     widgets = self.data_widgets
     self.assertEqual(len(widgets), 19)
     self._create_report(widgets, rep, data)
Пример #37
0
 def test_report_pickle(self):
     rep = OWReport().get_instance()
     p = pickle.dumps(rep)
     rep2 = pickle.loads(p)
     self.assertEqual(type(rep), type(rep2))
Пример #38
0
 def show_report_view(self):
     from Orange.canvas.report.owreport import OWReport
     inst = OWReport.get_instance()
     inst.show()
     inst.raise_()
Пример #39
0
 def test_report_widgets_unsupervised(self):
     rep = OWReport.get_instance()
     data = Table("zoo")
     widgets = self.unsu_widgets
     self._create_report(widgets, rep, data)
Пример #40
0
 def test_report_widgets_visualize(self):
     rep = OWReport.get_instance()
     data = Table("zoo")
     widgets = self.visu_widgets
     self._create_report(widgets, rep, data)
Пример #41
0
 def test_report_widgets_visualize(self):
     rep = OWReport.get_instance()
     data = Table("zoo")
     widgets = self.visu_widgets
     self._create_report(widgets, rep, data)
Пример #42
0
 def test_report_widgets_unsupervised(self):
     rep = OWReport.get_instance()
     data = Table("zoo")
     widgets = self.unsu_widgets
     self._create_report(widgets, rep, data)
Пример #43
0
 def test_report_widgets_all(self):
     rep = OWReport.get_instance()
     widgets = self.model_widgets + self.data_widgets + self.eval_widgets + \
               self.unsu_widgets + self.dist_widgets + self.visu_widgets + \
               self.spec_widgets
     self._create_report(widgets, rep, None)
Пример #44
0
class WidgetsScheme(Scheme):
    """
    A Scheme containing Orange Widgets managed with a `WidgetsSignalManager`
    instance.

    Extends the base `Scheme` class to handle the lifetime
    (creation/deletion, etc.) of `OWBaseWidget` instances corresponding to
    the nodes in the scheme. It also delegates the interwidget signal
    propagation to an instance of `WidgetsSignalManager`.
    """

    #: Emitted when a report_view is requested for the first time, before a
    #: default instance is created. Clients can connect to this signal to
    #: set a report view (`set_report_view`) to use instead.
    report_view_requested = Signal()

    def __init__(self, parent=None, title=None, description=None, env={}):
        Scheme.__init__(self, parent, title, description, env=env)

        self.signal_manager = WidgetsSignalManager(self)
        self.widget_manager = WidgetManager()

        def onchanged(state):
            # Update widget creation policy based on signal manager's state
            if state == SignalManager.Running:
                self.widget_manager.set_creation_policy(WidgetManager.Normal)
            else:
                self.widget_manager.set_creation_policy(WidgetManager.OnDemand)

        self.signal_manager.stateChanged.connect(onchanged)
        self.widget_manager.set_scheme(self)
        self.__report_view = None  # type: Optional[OWReport]

    def widget_for_node(self, node):
        """
        Return the OWWidget instance for a `node`.
        """
        return self.widget_manager.widget_for_node(node)

    def node_for_widget(self, widget):
        """
        Return the SchemeNode instance for the `widget`.
        """
        return self.widget_manager.node_for_widget(widget)

    def save_widget_geometry_for_node(self, node):
        # type: (SchemeNode) -> bytes
        """
        Save and return the current geometry and state for node

        Parameters
        ----------
        node : Scheme
        """
        w = self.widget_for_node(node)  # type: OWWidget
        return bytes(w.saveGeometryAndLayoutState())

    def restore_widget_geometry_for_node(self, node, state):
        # type: (SchemeNode, bytes) -> bool
        w = self.widget_for_node(node)
        if w is not None:
            return w.restoreGeometryAndLayoutState(QByteArray(state))
        else:
            return False

    def sync_node_properties(self):
        """
        Sync the widget settings/properties with the SchemeNode.properties.
        Return True if there were any changes in the properties (i.e. if the
        new node.properties differ from the old value) and False otherwise.

        """
        changed = False
        for node in self.nodes:
            settings = self.widget_manager.widget_properties(node)
            if settings != node.properties:
                node.properties = settings
                changed = True
        log.debug("Scheme node properties sync (changed: %s)", changed)
        return changed

    def show_report_view(self):
        inst = self.report_view()
        inst.show()
        inst.raise_()

    def has_report(self):
        """
        Does this workflow have an associated report

        Returns
        -------
        has_report: bool
        """
        return self.__report_view is not None

    def report_view(self):
        """
        Return a OWReport instance used by the workflow.

        If a report window has not been set then the `report_view_requested`
        signal is emitted to allow the framework to setup the report window.
        If the report window is still not set after the signal is emitted, a
        new default OWReport instance is constructed and returned.

        Returns
        -------
        report : OWReport
        """
        from Orange.canvas.report.owreport import OWReport
        if self.__report_view is None:
            self.report_view_requested.emit()

        if self.__report_view is None:
            parent = self.parent()
            if isinstance(parent, QWidget):
                window = parent.window()  # type: QWidget
            else:
                window = None

            self.__report_view = OWReport()
            if window is not None:
                self.__report_view.setParent(window, Qt.Window)
        return self.__report_view

    def set_report_view(self, view):
        """
        Set the designated OWReport view for this workflow.

        Parameters
        ----------
        view : Optional[OWReport]
        """
        self.__report_view = view

    def dump_settings(self, node: SchemeNode):
        from Orange.widgets.settings import SettingsPrinter
        widget = self.widget_for_node(node)

        pp = SettingsPrinter(indent=4)
        pp.pprint(widget.settingsHandler.pack_data(widget))

    def event(self, event):
        if event.type() == QEvent.Close and \
                self.__report_view is not None:
            self.__report_view.close()
        return super().event(event)

    def close(self):
        QCoreApplication.sendEvent(self, QEvent(QEvent.Close))
Пример #45
0
 def test_report_widgets_data(self):
     rep = OWReport.get_instance()
     data = Table("zoo")
     widgets = self.data_widgets
     self.assertEqual(len(widgets), 19)
     self._create_report(widgets, rep, data)