From 45d4f4401bcc9cc69b851287cf982a36bc191209 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Thu, 28 Nov 2019 17:00:40 +0100 Subject: [PATCH] moved auto sync all projects directly to storer subprocess --- .../ftrack/events/event_sync_all_auto_sync.py | 58 --------------- pype/ftrack/ftrack_server/sub_event_storer.py | 71 +++++++++++++++++++ 2 files changed, 71 insertions(+), 58 deletions(-) delete mode 100644 pype/ftrack/events/event_sync_all_auto_sync.py diff --git a/pype/ftrack/events/event_sync_all_auto_sync.py b/pype/ftrack/events/event_sync_all_auto_sync.py deleted file mode 100644 index 28cdd66af5..0000000000 --- a/pype/ftrack/events/event_sync_all_auto_sync.py +++ /dev/null @@ -1,58 +0,0 @@ -from pype.ftrack import BaseEvent - - -class SyncAllAutoSyncProjects(BaseEvent): - """Trigger sychronization of each project where auto sync is set.""" - - def register(self): - """Registers the event, subscribing the discover and launch topics.""" - self.session.event_hub.subscribe( - "topic=pype.storer.started", - self.launch - ) - - def launch(self, event): - session = self.session - projects = session.query("Project").all() - if not projects: - return False - - selections = [] - for project in projects: - if project["status"] != "active": - continue - - auto_sync = project["custom_attributes"].get("avalon_auto_sync") - if not auto_sync: - continue - - selections.append({ - "entityId": project["id"], - "entityType": "show" - }) - - if not selections: - return - - user = session.query( - "User where username is \"{}\"".format(session.api_user) - ).one() - user_data = { - "username": user["username"], - "id": user["id"] - } - action_name = "sync.to.avalon.server" - - for selection in selections: - self.trigger_action( - action_name, - selection=[selection], - user_data=user_data - ) - - return True - - -def register(session, plugins_presets={}): - """Register plugin. Called when used as an plugin.""" - SyncAllAutoSyncProjects(session, plugins_presets).register() diff --git a/pype/ftrack/ftrack_server/sub_event_storer.py b/pype/ftrack/ftrack_server/sub_event_storer.py index c98f687ab2..4828b10bfa 100644 --- a/pype/ftrack/ftrack_server/sub_event_storer.py +++ b/pype/ftrack/ftrack_server/sub_event_storer.py @@ -5,6 +5,7 @@ import signal import socket import pymongo +import ftrack_api from ftrack_server import FtrackServer from pype.ftrack.ftrack_server.lib import get_ftrack_event_mongo_info from pype.ftrack.lib.custom_db_connector import DbConnector @@ -15,6 +16,13 @@ log = Logger().get_logger("Event storer") url, database, table_name = get_ftrack_event_mongo_info() + +class SessionClass: + def __init__(self): + self.session = None + + +session_obj = SessionClass() dbcon = DbConnector( mongo_url=url, database_name=database, @@ -24,6 +32,7 @@ dbcon = DbConnector( # ignore_topics = ["ftrack.meta.connected"] ignore_topics = [] + def install_db(): try: dbcon.install() @@ -65,10 +74,71 @@ def launch(event): ) +def trigger_sync(event): + session = session_obj.session + if session is None: + log.warning("Session is not set. Can't trigger Sync to avalon action.") + return True + + projects = session.query("Project").all() + if not projects: + return True + + query = { + "pype_data.is_processed": False, + "topic": "ftrack.action.launch", + "data.actionIdentifier": "sync.to.avalon.server" + } + set_dict = { + "$set": {"pype_data.is_processed": True} + } + dbcon.update_many(query, set_dict) + + selections = [] + for project in projects: + if project["status"] != "active": + continue + + auto_sync = project["custom_attributes"].get("avalon_auto_sync") + if not auto_sync: + continue + + selections.append({ + "entityId": project["id"], + "entityType": "show" + }) + + if not selections: + return + + user = session.query( + "User where username is \"{}\"".format(session.api_user) + ).one() + user_data = { + "username": user["username"], + "id": user["id"] + } + + for selection in selections: + event_data = { + "actionIdentifier": "sync.to.avalon.server", + "selection": [selection] + } + session.event_hub.publish( + ftrack_api.event.base.Event( + topic="ftrack.action.launch", + data=event_data, + source=dict(user=user_data) + ), + on_error="ignore" + ) + + def register(session): '''Registers the event, subscribing the discover and launch topics.''' install_db() session.event_hub.subscribe("topic=*", launch) + session.event_hub.subscribe("topic=pype.storer.started", trigger_sync) def main(args): @@ -85,6 +155,7 @@ def main(args): try: session = StorerSession(auto_connect_event_hub=True, sock=sock) + session_obj.session = session register(session) server = FtrackServer("event") log.debug("Launched Ftrack Event storer")