From 3ab08562c5e72d794207e98d1a093f85addde14a Mon Sep 17 00:00:00 2001 From: Cyprien CAILLOT Date: Wed, 11 Sep 2024 15:00:52 +0200 Subject: [PATCH 1/2] Enhancement: Add ftrack user action to deactivate invalid projects --- .../action_desactivate_obsolete_projects.py | 79 +++++++++++++++++++ .../ftrack/action_icons/HideProjects.svg | 1 + 2 files changed, 80 insertions(+) create mode 100644 openpype/modules/ftrack/event_handlers_user/action_desactivate_obsolete_projects.py create mode 100644 openpype/resources/ftrack/action_icons/HideProjects.svg diff --git a/openpype/modules/ftrack/event_handlers_user/action_desactivate_obsolete_projects.py b/openpype/modules/ftrack/event_handlers_user/action_desactivate_obsolete_projects.py new file mode 100644 index 00000000000..3f3ab3155eb --- /dev/null +++ b/openpype/modules/ftrack/event_handlers_user/action_desactivate_obsolete_projects.py @@ -0,0 +1,79 @@ +from pymongo import UpdateOne + +from openpype.client import get_projects +from openpype.pipeline import AvalonMongoDB +from openpype_modules.ftrack.lib import BaseAction, statics_icon + + +class DeactivateObsoleteProjects(BaseAction): + """Deactivate projects on OP that no longer exist on Ftrack + or that doesn't have an FtrackId + """ + + identifier = "deactivate.obsolete.projects" + show_identifier = "deactivate.obsolete.projects" + label = "OpenPype Admin" + variant = "- Deactivate Obsolete Projects" + description = "Deactivate projects on OP that no longer exist on Ftrack or have an invalid FtrackId." + icon = statics_icon("ftrack", "action_icons", "HideProjects.svg") + + def __init__(self, session): + self.dbcon = AvalonMongoDB() + super().__init__(session) + + def _discover(self, _event): + return { + "items": [{ + "label": self.label, + "variant": self.variant, + "description": self.description, + "actionIdentifier": self.discover_identifier, + "icon": self.icon, + }] + } + + def _launch(self, event): + self.trigger_action(self.show_identifier, event) + + def register(self): + # Register default action callbacks + super(DeactivateObsoleteProjects, self).register() + + # # Add show identifier + show_subscription = ( + "topic=ftrack.action.launch" + " and data.actionIdentifier={}" + " and source.user.username={}" + ).format( + self.show_identifier, + self.session.api_user + ) + self.session.event_hub.subscribe( + show_subscription, + self.deactivate_obsolete_projects + ) + + def deactivate_obsolete_projects(self, event): + ftrack_projects = self.session.query("Project").all() + ftrack_projects_ids = [project["id"] for project in ftrack_projects] + mongo_projects = get_projects() + + projects_to_deactivate = [] + for project in mongo_projects: + if "ftrackId" not in project["data"].keys(): + projects_to_deactivate.append(project) + elif project["data"]["ftrackId"] not in ftrack_projects_ids: + projects_to_deactivate.append(project) + + for project in projects_to_deactivate: + filter_dict = {"_id": project["_id"]} + change_data = {"$set": {"data.active": False}} + self.dbcon.Session["AVALON_PROJECT"] = project["name"] + self.dbcon.bulk_write([UpdateOne(filter_dict, change_data)]) + self.log.debug(f"No FtrackId for project {project['name']}" + " or project deleted from Ftrack." + " Project has been deactivated.") + + +def register(session): + DeactivateObsoleteProjects(session).register() diff --git a/openpype/resources/ftrack/action_icons/HideProjects.svg b/openpype/resources/ftrack/action_icons/HideProjects.svg new file mode 100644 index 00000000000..e5e14e625a7 --- /dev/null +++ b/openpype/resources/ftrack/action_icons/HideProjects.svg @@ -0,0 +1 @@ + From a4a5abe42fa856fea37817da2a68746180dc28f4 Mon Sep 17 00:00:00 2001 From: Cyprien CAILLOT Date: Wed, 11 Sep 2024 15:03:22 +0200 Subject: [PATCH 2/2] Enhancement: Add ftrack user action to deactivate invalid projects --- ...bsolete_projects.py => action_deactivate_obsolete_projects.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename openpype/modules/ftrack/event_handlers_user/{action_desactivate_obsolete_projects.py => action_deactivate_obsolete_projects.py} (100%) diff --git a/openpype/modules/ftrack/event_handlers_user/action_desactivate_obsolete_projects.py b/openpype/modules/ftrack/event_handlers_user/action_deactivate_obsolete_projects.py similarity index 100% rename from openpype/modules/ftrack/event_handlers_user/action_desactivate_obsolete_projects.py rename to openpype/modules/ftrack/event_handlers_user/action_deactivate_obsolete_projects.py