def rename(self, new_name): """ Renames this item. If the project item needs any additional steps in renaming, override this method in subclass. See e.g. rename() method in DataStore class. Args: new_name(str): New name Returns: bool: True if renaming succeeded, False otherwise """ old_name = self.name new_short_name = shorten(new_name) # Rename project item data directory new_data_dir = os.path.join(self._project.items_dir, new_short_name) if not rename_dir(self.data_dir, new_data_dir, self._logger): return False # Rename project item self.set_name(new_name) # Update project item directory variable self.data_dir = new_data_dir # Update name label in tab if self._active: self.update_name_label() # Update name item of the QGraphicsItem self.get_icon().update_name_item(new_name) self._project.dag_handler.rename_node(old_name, new_name) return True
def test_rename_dir_fails_if_target_exists(self): with TemporaryDirectory() as temp_dir: old_dir = Path(temp_dir, "old directory") old_dir.mkdir() new_dir = Path(temp_dir, "new directory") new_dir.mkdir() logger = MagicMock() self.assertFalse(rename_dir(str(old_dir), str(new_dir), logger)) logger.information_box.emit.assert_called_once() self.assertTrue(old_dir.exists()) self.assertTrue(new_dir.exists())
def test_rename_dir(self): with TemporaryDirectory() as temp_dir: old_dir = Path(temp_dir, "old directory") old_dir.mkdir() file_in_dir = Path(old_dir, "file.fff") file_in_dir.touch() new_dir = Path(temp_dir, "new directory") logger = MagicMock() self.assertTrue(rename_dir(str(old_dir), str(new_dir), logger)) self.assertFalse(old_dir.exists()) self.assertTrue(new_dir.exists()) files_in_new_dir = [path for path in new_dir.iterdir()] self.assertEqual(files_in_new_dir, [Path(new_dir, "file.fff")])
def test_rename_dir_prompts_user_if_target_exists(self): with TemporaryDirectory() as temp_dir: old_dir = Path(temp_dir, "old directory") old_dir.mkdir() new_dir = Path(temp_dir, "new directory") new_dir.mkdir() logger = MagicMock() with unittest.mock.patch( "spinetoolbox.helpers.QMessageBox") as mock_msg_box: self.assertFalse( rename_dir(str(old_dir), str(new_dir), logger, "box_title")) mock_msg_box.assert_called_once() self.assertTrue(old_dir.exists()) self.assertTrue(new_dir.exists())