Merge pull request #5853 from ynput/enhancement/OP-7277_Ftrack-Concurrent-event-server-for-OP-and-Ayon

Ftrack: Events are not processed if project is not available in OpenPype
This commit is contained in:
Jakub Trllo 2023-11-07 10:37:35 +01:00 committed by GitHub
commit ecc65d13ad
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 70 additions and 10 deletions

View file

@ -1,3 +1,6 @@
import collections
from openpype.client import get_project
from openpype_modules.ftrack.lib import BaseEvent
@ -73,8 +76,21 @@ class FirstVersionStatus(BaseEvent):
if not self.task_status_map:
return
entities_info = self.filter_event_ents(event)
if not entities_info:
filtered_entities_info = self.filter_entities_info(event)
if not filtered_entities_info:
return
for project_id, entities_info in filtered_entities_info.items():
self.process_by_project(session, event, project_id, entities_info)
def process_by_project(self, session, event, project_id, entities_info):
project_name = self.get_project_name_from_event(
session, event, project_id
)
if get_project(project_name) is None:
self.log.debug(
f"Project '{project_name}' not found in OpenPype. Skipping"
)
return
entity_ids = []
@ -154,18 +170,18 @@ class FirstVersionStatus(BaseEvent):
exc_info=True
)
def filter_event_ents(self, event):
filtered_ents = []
for entity in event["data"].get("entities", []):
def filter_entities_info(self, event):
filtered_entities_info = collections.defaultdict(list)
for entity_info in event["data"].get("entities", []):
# Care only about add actions
if entity.get("action") != "add":
if entity_info.get("action") != "add":
continue
# Filter AssetVersions
if entity["entityType"] != "assetversion":
if entity_info["entityType"] != "assetversion":
continue
entity_changes = entity.get("changes") or {}
entity_changes = entity_info.get("changes") or {}
# Check if version of Asset Version is `1`
version_num = entity_changes.get("version", {}).get("new")
@ -177,9 +193,18 @@ class FirstVersionStatus(BaseEvent):
if not task_id:
continue
filtered_ents.append(entity)
project_id = None
for parent_item in reversed(entity_info["parents"]):
if parent_item["entityType"] == "show":
project_id = parent_item["entityId"]
break
return filtered_ents
if project_id is None:
continue
filtered_entities_info[project_id].append(entity_info)
return filtered_entities_info
def register(session):

View file

@ -1,4 +1,6 @@
import collections
from openpype.client import get_project
from openpype_modules.ftrack.lib import BaseEvent
@ -99,6 +101,10 @@ class NextTaskUpdate(BaseEvent):
project_name = self.get_project_name_from_event(
session, event, project_id
)
if get_project(project_name) is None:
self.log.debug("Project not found in OpenPype. Skipping")
return
# Load settings
project_settings = self.get_project_settings_from_event(
event, project_name

View file

@ -3,6 +3,8 @@ import copy
from typing import Any
import ftrack_api
from openpype.client import get_project
from openpype_modules.ftrack.lib import (
BaseEvent,
query_custom_attributes,
@ -139,6 +141,10 @@ class PushHierValuesToNonHierEvent(BaseEvent):
project_name: str = self.get_project_name_from_event(
session, event, project_id
)
if get_project(project_name) is None:
self.log.debug("Project not found in OpenPype. Skipping")
return set(), set()
# Load settings
project_settings: dict[str, Any] = (
self.get_project_settings_from_event(event, project_name)

View file

@ -1,4 +1,6 @@
import collections
from openpype.client import get_project
from openpype_modules.ftrack.lib import BaseEvent
@ -60,6 +62,10 @@ class TaskStatusToParent(BaseEvent):
project_name = self.get_project_name_from_event(
session, event, project_id
)
if get_project(project_name) is None:
self.log.debug("Project not found in OpenPype. Skipping")
return
# Load settings
project_settings = self.get_project_settings_from_event(
event, project_name

View file

@ -1,4 +1,6 @@
import collections
from openpype.client import get_project
from openpype_modules.ftrack.lib import BaseEvent
@ -102,6 +104,10 @@ class TaskToVersionStatus(BaseEvent):
project_name = self.get_project_name_from_event(
session, event, project_id
)
if get_project(project_name) is None:
self.log.debug("Project not found in OpenPype. Skipping")
return
# Load settings
project_settings = self.get_project_settings_from_event(
event, project_name

View file

@ -1,4 +1,6 @@
import collections
from openpype.client import get_project
from openpype_modules.ftrack.lib import BaseEvent
@ -22,6 +24,10 @@ class ThumbnailEvents(BaseEvent):
project_name = self.get_project_name_from_event(
session, event, project_id
)
if get_project(project_name) is None:
self.log.debug("Project not found in OpenPype. Skipping")
return
# Load settings
project_settings = self.get_project_settings_from_event(
event, project_name

View file

@ -1,3 +1,4 @@
from openpype.client import get_project
from openpype_modules.ftrack.lib import BaseEvent
@ -50,6 +51,10 @@ class VersionToTaskStatus(BaseEvent):
project_name = self.get_project_name_from_event(
session, event, project_id
)
if get_project(project_name) is None:
self.log.debug("Project not found in OpenPype. Skipping")
return
# Load settings
project_settings = self.get_project_settings_from_event(
event, project_name