예제 #1
0
 def setUp(self):
     app_settings = MagicMock()
     self._temp_dir = TemporaryDirectory()
     url = "sqlite:///" + os.path.join(self._temp_dir.name, "db.sqlite")
     db_map = DiffDatabaseMapping(url, create=True)
     import_object_classes(db_map, ("class1",))
     import_object_parameters(db_map, (("class1", "parameter1"), ("class1", "parameter2")))
     import_objects(db_map, (("class1", "object1"), ("class1", "object2")))
     import_object_parameter_values(
         db_map,
         (
             ("class1", "object1", "parameter1", Map(["A", "B"], [1.1, 2.1])),
             ("class1", "object2", "parameter1", Map(["C", "D"], [1.2, 2.2])),
             ("class1", "object1", "parameter2", Map(["C", "D"], [-1.1, -2.1])),
             ("class1", "object2", "parameter2", Map(["A", "B"], [-1.2, -2.2])),
         ),
     )
     db_map.commit_session("Add test data.")
     db_map.connection.close()
     with patch("spinetoolbox.spine_db_manager.SpineDBManager.thread", new_callable=PropertyMock) as mock_thread:
         mock_thread.return_value = QApplication.instance().thread()
         self._db_mngr = SpineDBManager(app_settings, None)
         with patch.object(SpineDBEditor, "restore_ui"):
             self._editor = SpineDBEditor(self._db_mngr, {url: db_map.codename})
     object_class_index = self._editor.object_tree_model.index(0, 0)
     self._editor.object_tree_model.fetchMore(object_class_index)
     index = self._editor.object_tree_model.index(0, 0, object_class_index)
     for action in self._editor.pivot_action_group.actions():
         if action.text() == self._editor._INDEX_EXPANSION:
             action.trigger()
             break
     self._editor.reload_pivot_table(index)
     self._model = self._editor.pivot_table_model
     self._model.start_fetching()
예제 #2
0
 def test_data_nested_maps_BackgroundRole(self):
     nested_map = Map(["a", "b"], [1.1, 2.2])
     map_value = Map(["A", "B"], [-1.1, nested_map])
     model = MapModel(map_value)
     self.assertEqual(model.index(0, 0).data(Qt.BackgroundRole), None)
     self.assertEqual(model.index(1, 0).data(Qt.BackgroundRole), None)
     self.assertEqual(model.index(2, 0).data(Qt.BackgroundRole), None)
     self.assertEqual(
         model.index(3, 0).data(Qt.BackgroundRole), QColor(245, 245, 245))
     self.assertEqual(model.index(0, 1).data(Qt.BackgroundRole), None)
     self.assertEqual(model.index(1, 1).data(Qt.BackgroundRole), None)
     self.assertEqual(model.index(2, 1).data(Qt.BackgroundRole), None)
     self.assertEqual(
         model.index(3, 1).data(Qt.BackgroundRole), QColor(245, 245, 245))
     self.assertEqual(
         model.index(0, 2).data(Qt.BackgroundRole), QColor(255, 240, 240))
     self.assertEqual(model.index(1, 2).data(Qt.BackgroundRole), None)
     self.assertEqual(model.index(2, 2).data(Qt.BackgroundRole), None)
     self.assertEqual(
         model.index(3, 2).data(Qt.BackgroundRole), QColor(245, 245, 245))
     self.assertEqual(
         model.index(0, 3).data(Qt.BackgroundRole), QColor(245, 245, 245))
     self.assertEqual(
         model.index(1, 3).data(Qt.BackgroundRole), QColor(245, 245, 245))
     self.assertEqual(
         model.index(2, 3).data(Qt.BackgroundRole), QColor(245, 245, 245))
     self.assertEqual(
         model.index(3, 3).data(Qt.BackgroundRole), QColor(245, 245, 245))
예제 #3
0
 def test_headerData(self):
     nested_map = Map(["a", "b"], [1.1, 2.2])
     map_value = Map(["A"], [nested_map])
     model = MapModel(map_value)
     self.assertEqual(model.headerData(0, Qt.Horizontal), "Index")
     self.assertEqual(model.headerData(1, Qt.Horizontal), "Index or value")
     self.assertEqual(model.headerData(2, Qt.Horizontal), "Value")
     self.assertEqual(model.headerData(0, Qt.Vertical), 1)
예제 #4
0
 def test_value_single_row_nested_map(self):
     nested_map = Map(["a"], [1.1])
     map_value = Map(["A", "B"], [-1.1, nested_map])
     model = MapModel(map_value)
     value_from_model = model.value()
     self.assertEqual(value_from_model.indexes, ["A", "B"])
     self.assertEqual(value_from_model.values[0], -1.1)
     self.assertEqual(value_from_model.values[1].indexes, ["a"])
     self.assertEqual(value_from_model.values[1].values, [1.1])
예제 #5
0
 def test_value_shortening_rows(self):
     original = Map(
         ["a", "b", "c"],
         [0.0,
          Map(["bb"], [Map(["bbb"], [Array([-1.0])])]),
          Array([-2.0])])
     model = MapModel(original)
     map_ = model.value()
     self.assertEqual(map_, original)
예제 #6
0
 def test_data_DisplayRole_repeated_indexes_do_not_show(self):
     leaf_map = Map(["a", "b"], [1.1, 2.2])
     nested_map = Map(["A"], [leaf_map])
     root_map = Map(["root"], [nested_map])
     model = MapModel(root_map)
     expected_data = [["root", "A", "a", 1.1], ["root", "A", "b", 2.2]]
     for row in range(2):
         for column in range(4):
             index = model.index(row, column)
             self.assertEqual(index.data(), expected_data[row][column])
예제 #7
0
 def test_paste_to_empty_table(self):
     model = MapModel(Map([], [], str))
     table_view = MapTableView()
     table_view.setModel(model)
     table_view.selectionModel().select(model.index(0, 0),
                                        QItemSelectionModel.Select)
     self._write_to_clipboard([["A", 2.3]])
     self.assertTrue(table_view.paste())
     self.assertEqual(model.rowCount(), 2)
     self.assertEqual(model.columnCount(), 3)
     self.assertEqual(model.value(), Map(["A"], [2.3]))
예제 #8
0
 def test_removeRows_middle_row_in_nested_map(self):
     nested_map = Map(["a", "b", "c"], [1.1, 2.2, 3.3])
     map_value = Map(["A"], [nested_map])
     model = MapModel(map_value)
     self.assertTrue(model.removeRows(1, 1))
     self.assertEqual(model.rowCount(), 3)
     expected_table = [["A", "a", 1.1, ""], ["A", "c", 3.3, ""],
                       ["", "", "", ""]]
     for y, row in enumerate(expected_table):
         for x, expected in enumerate(row):
             self.assertEqual(model.index(y, x).data(), expected)
예제 #9
0
 def test_paste_to_single_cell_pastes_everything(self):
     model = MapModel(Map(["A"], [2.3]))
     table_view = MapTableView()
     table_view.setModel(model)
     table_view.selectionModel().select(model.index(0, 0),
                                        QItemSelectionModel.Select)
     self._write_to_clipboard([["V", -5.5], ["W", -6.6]])
     self.assertTrue(table_view.paste())
     self.assertEqual(model.rowCount(), 3)
     self.assertEqual(model.columnCount(), 3)
     self.assertEqual(model.value(), Map(["V", "W"], [-5.5, -6.6]))
예제 #10
0
 def test_data_nested_maps_FontRole(self):
     nested_map = Map(["a", "b"], [1.1, 2.2])
     map_value = Map(["A", "B"], [-1.1, nested_map])
     model = MapModel(map_value)
     self.assertEqual(model.index(0, 0).data(Qt.FontRole), None)
     self.assertEqual(model.index(1, 0).data(Qt.FontRole), None)
     self.assertEqual(model.index(2, 0).data(Qt.FontRole), None)
     self.assertTrue(model.index(0, 1).data(Qt.FontRole).bold())
     self.assertEqual(model.index(1, 1).data(Qt.FontRole), None)
     self.assertEqual(model.index(2, 1).data(Qt.FontRole), None)
     self.assertEqual(model.index(0, 2).data(Qt.FontRole), None)
     self.assertTrue(model.index(1, 2).data(Qt.FontRole).bold())
     self.assertTrue(model.index(2, 2).data(Qt.FontRole).bold())
예제 #11
0
 def test_data_nested_maps_EditRole(self):
     nested_map = Map(["a", "b"], [1.1, 2.2])
     map_value = Map(["A", "B"], [-1.1, nested_map])
     model = MapModel(map_value)
     self.assertEqual(model.index(0, 0).data(Qt.EditRole), "A")
     self.assertEqual(model.index(1, 0).data(Qt.EditRole), "B")
     self.assertEqual(model.index(2, 0).data(Qt.EditRole), "B")
     self.assertEqual(model.index(0, 1).data(Qt.EditRole), -1.1)
     self.assertEqual(model.index(1, 1).data(Qt.EditRole), "a")
     self.assertEqual(model.index(2, 1).data(Qt.EditRole), "b")
     self.assertEqual(model.index(0, 2).data(Qt.EditRole), None)
     self.assertEqual(model.index(1, 2).data(Qt.EditRole), 1.1)
     self.assertEqual(model.index(2, 2).data(Qt.EditRole), 2.2)
예제 #12
0
 def test_paste_large_data_to_small_selection_cuts_data(self):
     model = MapModel(Map(["A", "B", "C"], [2.3, 3.2, 4.3]))
     table_view = MapTableView()
     table_view.setModel(model)
     for row in (0, 1):
         table_view.selectionModel().select(model.index(row, 0),
                                            QItemSelectionModel.Select)
     self._write_to_clipboard([["Q", -4.4], ["V", -5.5], ["W", -6.6]])
     self.assertTrue(table_view.paste())
     self.assertEqual(model.rowCount(), 4)
     self.assertEqual(model.columnCount(), 3)
     m = model.value()
     self.assertEqual(model.value(), Map(["Q", "V", "C"], [2.3, 3.2, 4.3]))
예제 #13
0
 def test_convert_leaf_maps(self):
     nested_map = Map(
         [DateTime("2020-07-03 12:00:00"),
          DateTime("2020-07-03 12:00:00")], [22.2, 23.3])
     map_ = Map([1.0], [nested_map])
     model = MapModel(map_)
     model.convert_leaf_maps()
     self.assertEqual(model.columnCount(), 3)
     self.assertEqual(model.rowCount(), 2)
     self.assertEqual(model.index(0, 0).data(), 1.0)
     self.assertEqual(model.index(0, 1).data(), "Time series")
     self.assertEqual(model.index(0, 2).data(), "")
     self.assertEqual(model.index(1, 0).data(), "")
     self.assertEqual(model.index(1, 1).data(), "")
     self.assertEqual(model.index(1, 2).data(), "")
예제 #14
0
 def test_data_EditRole(self):
     map_value = Map(["a", "b"], [1.1, 2.2])
     model = MapModel(map_value)
     self.assertEqual(model.index(0, 0).data(Qt.EditRole), "a")
     self.assertEqual(model.index(1, 0).data(Qt.EditRole), "b")
     self.assertEqual(model.index(0, 1).data(Qt.EditRole), 1.1)
     self.assertEqual(model.index(1, 1).data(Qt.EditRole), 2.2)
예제 #15
0
 def test_flags(self):
     map_value = Map(["a"], [1.1])
     model = MapModel(map_value)
     index = model.index(0, 0)
     self.assertEqual(
         model.flags(index),
         Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsEditable)
예제 #16
0
 def test_value_interleaved_rows_nested_maps_with_same_indexes(self):
     model = MapModel(Map(["a"], [0.0]))
     model.insertRows(1, 3)
     self.assertEqual(model.rowCount(), 5)
     model.append_column()
     self.assertEqual(model.columnCount(), 4)
     model.setData(model.index(0, 0), "key1")
     model.setData(model.index(0, 1), "kkey1")
     model.setData(model.index(0, 2), "value11")
     model.setData(model.index(1, 0), "key2")
     model.setData(model.index(1, 1), "kkey1")
     model.setData(model.index(1, 2), "value21")
     model.setData(model.index(2, 0), "key1")
     model.setData(model.index(2, 1), "kkey2")
     model.setData(model.index(2, 2), "value12")
     model.setData(model.index(3, 0), "key2")
     model.setData(model.index(3, 1), "kkey2")
     model.setData(model.index(3, 2), "value22")
     map_ = model.value()
     self.assertEqual(map_.indexes, ["key1", "key2"])
     self.assertIsInstance(map_.values[0], Map)
     self.assertEqual(map_.values[0].indexes, ["kkey1", "kkey2"])
     self.assertEqual(map_.values[0].values, ["value11", "value12"])
     self.assertIsInstance(map_.values[1], Map)
     self.assertEqual(map_.values[1].indexes, ["kkey1", "kkey2"])
     self.assertEqual(map_.values[1].values, ["value21", "value22"])
예제 #17
0
 def test_add_dictionary_plot(self):
     plot_widget = PlotWidget()
     dictionary = Map(["key 1 ", "key 2"], [2.3, 5.5])
     add_map_plot(plot_widget, dictionary)
     lines = plot_widget.canvas.axes.get_lines()
     self.assertEqual(len(lines), 1)
     self.assertEqual(list(lines[0].get_ydata(orig=True)), [2.3, 5.5])
예제 #18
0
 def test_removeRows_single_row(self):
     map_value = Map(["a"], [1.1])
     model = MapModel(map_value)
     self.assertTrue(model.removeRows(0, 1))
     self.assertEqual(model.rowCount(), 1)
     self.assertEqual(model.columnCount(), 1)
     self.assertEqual(model.index(0, 0).data(), "")
예제 #19
0
 def test_append_column(self):
     nested_map = Map(["a", "b"], [1.1, 2.2])
     map_value = Map(["A", "B"], [-1.1, nested_map])
     model = MapModel(map_value)
     model.append_column()
     self.assertEqual(model.columnCount(), 5)
     expected_table = [
         ["A", -1.1, None, None, ""],
         ["B", "a", 1.1, None, ""],
         ["B", "b", 2.2, None, ""],
         ["", "", "", "", ""],
     ]
     for y, row in enumerate(expected_table):
         for x, expected in enumerate(row):
             index = model.index(y, x)
             self.assertEqual(index.data(), expected)
예제 #20
0
 def test_setData_does_not_clear_value_if_it_is_zero(self):
     model = MapModel(Map([], [], str))
     model.setData(model.index(0, 0), "idx")
     model.setData(model.index(0, 1), 0.0)
     self.assertEqual(model.rowCount(), 1 + 1)
     self.assertEqual(model.columnCount(), 2 + 1)
     self.assertEqual(model.index(0, 0).data(), "idx")
     self.assertEqual(model.index(0, 1).data(), 0.0)
예제 #21
0
 def test_data_FontRole(self):
     map_value = Map(["a"], [1.1])
     model = MapModel(map_value)
     self.assertEqual(model.index(0, 0).data(Qt.FontRole), None)
     self.assertEqual(model.index(1, 0).data(Qt.FontRole), None)
     self.assertTrue(model.index(0, 1).data(Qt.FontRole).bold())
     self.assertEqual(model.index(1, 1).data(Qt.FontRole), None)
     self.assertEqual(model.index(0, 2).data(Qt.FontRole), None)
     self.assertEqual(model.index(1, 2).data(Qt.FontRole), None)
예제 #22
0
 def test_data_BackgroundRole(self):
     map_value = Map(["a"], [1.1])
     model = MapModel(map_value)
     expected = QColor(245, 245, 245)
     self.assertEqual(model.index(0, 0).data(Qt.BackgroundRole), None)
     self.assertEqual(model.index(1, 0).data(Qt.BackgroundRole), expected)
     self.assertEqual(model.index(0, 1).data(Qt.BackgroundRole), None)
     self.assertEqual(model.index(1, 1).data(Qt.BackgroundRole), expected)
     self.assertEqual(model.index(0, 2).data(Qt.BackgroundRole), expected)
     self.assertEqual(model.index(1, 2).data(Qt.BackgroundRole), expected)
예제 #23
0
def _reconstruct_map(rows, first_row, last_row, column_index):
    if not rows:
        return Map([], [])
    block_start_row = first_row
    index = None
    indexes = list()
    values = list()
    for row_index in range(first_row, last_row + 1):
        row = rows[row_index][column_index:]
        if index is None:
            index = row[0]
            if index is None:
                raise ParameterValueFormatError(
                    f"Index missing on row {first_row + row_index} column {column_index}."
                )
        is_leaf = len(row) == 2 or row[2] is None
        if is_leaf:
            indexes.append(index)
            value = row[1]
            if value is None:
                raise ParameterValueFormatError(
                    f"Value missing on row {first_row + row_index} column {column_index}."
                )
            values.append(value)
            index = None
            block_start_row = row_index + 1
            continue
        if row_index < last_row:
            next_index = rows[row_index + 1][column_index]
            if next_index == index:
                continue
            value = _reconstruct_map(rows, block_start_row, row_index,
                                     column_index + 1)
            indexes.append(index)
            values.append(value)
            index = None
            block_start_row = row_index + 1
            continue
        value = _reconstruct_map(rows, block_start_row, row_index,
                                 column_index + 1)
        indexes.append(index)
        values.append(value)
    return Map(indexes, values)
예제 #24
0
 def test_removeRows_last_row(self):
     map_value = Map(["a", "b"], [1.1, 2.2])
     model = MapModel(map_value)
     self.assertTrue(model.removeRows(0, 1))
     self.assertEqual(model.rowCount(), 2)
     self.assertEqual(model.index(0, 0).data(), "b")
     self.assertEqual(model.index(0, 1).data(), 2.2)
     self.assertEqual(model.index(0, 2).data(), "")
     self.assertEqual(model.index(1, 0).data(), "")
     self.assertEqual(model.index(1, 1).data(), "")
     self.assertEqual(model.index(1, 2).data(), "")
예제 #25
0
 def test_insertRows_to_end(self):
     map_value = Map(["a"], [1.1])
     model = MapModel(map_value)
     self.assertTrue(model.insertRows(1, 1))
     self.assertEqual(model.rowCount(), 3)
     self.assertEqual(model.index(0, 0).data(), "a")
     self.assertEqual(model.index(0, 1).data(), 1.1)
     self.assertEqual(model.index(0, 2).data(), "")
     self.assertEqual(model.index(1, 0).data(), "a")
     self.assertEqual(model.index(1, 1).data(), 1.1)
     self.assertEqual(model.index(1, 2).data(), "")
예제 #26
0
 def test_copy_selection(self):
     model = MapModel(Map(["A"], [2.3]))
     table_view = MapTableView()
     table_view.setModel(model)
     for column in (0, 1):
         table_view.selectionModel().select(model.index(0, column),
                                            QItemSelectionModel.Select)
     self.assertTrue(table_view.copy())
     clip = StringIO(QApplication.clipboard().text())
     table = [row for row in csv.reader(clip, delimiter="\t")]
     self.assertEqual(table, [["A", "2.3"]])
예제 #27
0
    def __init__(self, parent=None):
        from ..ui.map_editor import Ui_MapEditor  # pylint: disable=import-outside-toplevel

        super().__init__(parent)
        self._model = MapModel(Map(["key_1"], [0.0]))
        self._ui = Ui_MapEditor()
        self._ui.setupUi(self)
        self._ui.map_table_view.setModel(self._model)
        self._ui.map_table_view.setContextMenuPolicy(Qt.CustomContextMenu)
        self._ui.map_table_view.customContextMenuRequested.connect(
            self._show_table_context_menu)
예제 #28
0
 def test_insertRows_to_empty_model(self):
     map_value = Map([], [], str)
     model = MapModel(map_value)
     self.assertEqual(model.rowCount(), 1)
     self.assertTrue(model.insertRows(0, 1))
     self.assertEqual(model.rowCount(), 2)
     self.assertEqual(model.index(0, 0).data(), None)
     self.assertEqual(model.index(0, 1).data(), None)
     self.assertEqual(model.index(0, 2).data(), "")
     self.assertEqual(model.index(1, 0).data(), "")
     self.assertEqual(model.index(1, 1).data(), "")
     self.assertEqual(model.index(1, 2).data(), "")
예제 #29
0
 def test_show_value_editor(self):
     editor = MapEditor()
     editor.set_value(Map(["a"], [-1.0]))
     table_view = editor._ui.map_table_view
     model = table_view.model()
     rect = table_view.visualRect(model.index(0, 0))
     editor.open_value_editor = MagicMock()
     menu = MapTableContextMenu(editor, table_view, rect.center())
     open_action = _find_action(menu, "Open value editor...")
     self.assertIsNotNone(open_action)
     open_action.trigger()
     editor.open_value_editor.assert_called_once_with(model.index(0, 0))
예제 #30
0
 def test_data_DisplayRole(self):
     map_value = Map(["a", "b"], [1.1, 2.2])
     model = MapModel(map_value)
     self.assertEqual(model.index(0, 0).data(), "a")
     self.assertEqual(model.index(1, 0).data(), "b")
     self.assertEqual(model.index(2, 0).data(), "")
     self.assertEqual(model.index(0, 1).data(), 1.1)
     self.assertEqual(model.index(1, 1).data(), 2.2)
     self.assertEqual(model.index(2, 1).data(), "")
     self.assertEqual(model.index(0, 2).data(), "")
     self.assertEqual(model.index(1, 2).data(), "")
     self.assertEqual(model.index(2, 2).data(), "")