示例#1
0
    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
示例#2
0
    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
示例#3
0
 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"))
示例#4
0
    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)
示例#5
0
    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
示例#6
0
 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
示例#7
0
    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"))