def rename(self, new_name, rename_data_dir_message): """ 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 rename_data_dir_message (str): Message to show when renaming item's data directory Returns: bool: True if item was renamed successfully, False otherwise """ new_data_dir = os.path.join(self._toolbox.project().items_dir, shorten(new_name)) if not rename_dir(self.data_dir, new_data_dir, self._toolbox, rename_data_dir_message): return False self.set_name(new_name) self.data_dir = new_data_dir if self._active: self.update_name_label() self._project._toolbox.override_logs_and_consoles() self.get_icon().update_name_item(new_name) return True
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_item(self): project = self.toolbox.project() source_name = "source" destination_name = "destination" add_view(project, source_name) add_view(project, destination_name) source_item = project.get_item("source") project.add_connection( Connection(source_name, "left", destination_name, "right")) while project.is_busy(): # Make sure we process all pending signals related to changes in DAG. # Otherwise me may rename the item while the old name is still in use. QApplication.processEvents() project.rename_item("source", "renamed source", "") self.assertTrue(bool(project.get_item("renamed source"))) self.assertEqual(source_item.name, "renamed source") self.assertEqual( project.connections, [Connection("renamed source", "left", destination_name, "right")]) dags = project.dag_handler.dags() self.assertEqual(len(dags), 1) self.assertEqual(project.dag_handler.node_successors(dags[0]), { "destination": [], "renamed source": ["destination"] }) self.assertEqual(source_item.get_icon().name(), "renamed source") self.assertEqual( os.path.split(source_item.data_dir)[1], shorten("renamed source"))
def set_name(self, name): """Set object name and short name. Note: Check conflicts (e.g. name already exists) before calling this method. Args: name (str): New (long) name for this object """ self.name = name self.short_name = shorten(name)
def __init__(self, name, description): """Class for an object which has a name, type, and some description. Args: name (str): Object name description (str): Object description """ super().__init__() self.name = name self.short_name = shorten(name) self.description = description
def __init__(self, name, description=None, item_type="", item_category=""): """ Args: name (str): specification name description (str): description item_type (str): Project item type item_category (str): Project item category """ self.name = name self.short_name = shorten(name) self.description = description self.item_type = item_type self.item_category = item_category self.definition_file_path = "" self.plugin = None
def rename_item(self, previous_name, new_name, rename_data_dir_message): """Renames a project item Args: previous_name (str): item's current name new_name (str): item's new name rename_data_dir_message (str): message to show when renaming item's data directory Returns: bool: True if item was renamed successfully, False otherwise """ if not new_name.strip() or new_name == previous_name: return False if any(x in INVALID_CHARS for x in new_name): msg = f"<b>{new_name}</b> contains invalid characters." self._logger.error_box.emit("Invalid characters", msg) return False if self._project_item_model.find_item(new_name): msg = f"Project item <b>{new_name}</b> already exists" self._logger.error_box.emit("Invalid name", msg) return False new_short_name = shorten(new_name) if self._toolbox.project_item_model.short_name_reserved( new_short_name): msg = f"Project item using directory <b>{new_short_name}</b> already exists" self._logger.error_box("Invalid name", msg) return False item_index = self._project_item_model.find_item(previous_name) item = self._project_item_model.item(item_index).project_item if not item.rename(new_name, rename_data_dir_message): return False self._project_item_model.set_leaf_item_name(item_index, new_name) self.dag_handler.rename_node(previous_name, new_name) for connection in self._connections: if connection.source == previous_name: connection.source = new_name if connection.destination == previous_name: connection.destination = new_name self._logger.msg_success.emit( f"Project item <b>{previous_name}</b> renamed to <b>{new_name}</b>." ) return True
def test_rename_item(self): project = self.toolbox.project() source_name = "source" destination_name = "destination" add_view(project, source_name) add_view(project, destination_name) source_item = project.get_item("source") project.add_connection( Connection(source_name, "left", destination_name, "right")) project.rename_item("source", "renamed source", "") self.assertTrue(bool(project.get_item("renamed source"))) self.assertEqual(source_item.name, "renamed source") self.assertEqual( project.connections, [Connection("renamed source", "left", destination_name, "right")]) dags = project.dag_handler.dags() self.assertEqual(len(dags), 1) self.assertEqual(project.dag_handler.node_successors(dags[0]), { "destination": [], "renamed source": ["destination"] }) self.assertEqual(source_item.get_icon().name(), "renamed source") self.assertEqual( os.path.split(source_item.data_dir)[1], shorten("renamed source"))