From 315dfe79a4a27a53bba7c32e663755dea68c74ae Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Wed, 15 Jan 2020 15:36:54 +0100 Subject: [PATCH 1/7] set ftrackId and entityType on entity when integrate hierarchy ftrack creates one --- .../ftrack/publish/integrate_hierarchy_ftrack.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/pype/plugins/ftrack/publish/integrate_hierarchy_ftrack.py b/pype/plugins/ftrack/publish/integrate_hierarchy_ftrack.py index 1deff56d83..a33cf81c28 100644 --- a/pype/plugins/ftrack/publish/integrate_hierarchy_ftrack.py +++ b/pype/plugins/ftrack/publish/integrate_hierarchy_ftrack.py @@ -85,6 +85,18 @@ class IntegrateHierarchyToFtrack(pyblish.api.ContextPlugin): type=entity_type, parent=parent ) + + if entity.entity_type.lower() not in ["task", "project"]: + filter = { + "type": "asset", + "name": entity_name + } + update_data = { + "data.ftrackId": entity["id"], + "data.entityType": entity.entity_type + } + io.update_one(filter, update_data) + # self.log.info('entity: {}'.format(dict(entity))) # CUSTOM ATTRIBUTES custom_attributes = entity_data.get('custom_attributes', []) From 1f96a74bac663d487d6257df689ee222fb00aed9 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Thu, 16 Jan 2020 14:30:26 +0100 Subject: [PATCH 2/7] remove added code of previous commit --- .../ftrack/publish/integrate_hierarchy_ftrack.py | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/pype/plugins/ftrack/publish/integrate_hierarchy_ftrack.py b/pype/plugins/ftrack/publish/integrate_hierarchy_ftrack.py index a33cf81c28..1deff56d83 100644 --- a/pype/plugins/ftrack/publish/integrate_hierarchy_ftrack.py +++ b/pype/plugins/ftrack/publish/integrate_hierarchy_ftrack.py @@ -85,18 +85,6 @@ class IntegrateHierarchyToFtrack(pyblish.api.ContextPlugin): type=entity_type, parent=parent ) - - if entity.entity_type.lower() not in ["task", "project"]: - filter = { - "type": "asset", - "name": entity_name - } - update_data = { - "data.ftrackId": entity["id"], - "data.entityType": entity.entity_type - } - io.update_one(filter, update_data) - # self.log.info('entity: {}'.format(dict(entity))) # CUSTOM ATTRIBUTES custom_attributes = entity_data.get('custom_attributes', []) From 415ec47f9db4746ddb206b9c0d70ed4d95014ccc Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Thu, 16 Jan 2020 14:31:05 +0100 Subject: [PATCH 3/7] added aditional check in event sync to avalon for cases when avalon ent exists but don't have ftrackId --- pype/ftrack/events/event_sync_to_avalon.py | 46 +++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/pype/ftrack/events/event_sync_to_avalon.py b/pype/ftrack/events/event_sync_to_avalon.py index 8d75d932f8..6188458645 100644 --- a/pype/ftrack/events/event_sync_to_avalon.py +++ b/pype/ftrack/events/event_sync_to_avalon.py @@ -131,7 +131,9 @@ class SyncToAvalonEvent(BaseEvent): ftrack_id = proj["data"]["ftrackId"] self._avalon_ents_by_ftrack_id[ftrack_id] = proj for ent in ents: - ftrack_id = ent["data"]["ftrackId"] + ftrack_id = ent["data"].get("ftrackId") + if ftrack_id is None: + continue self._avalon_ents_by_ftrack_id[ftrack_id] = ent return self._avalon_ents_by_ftrack_id @@ -1427,6 +1429,48 @@ class SyncToAvalonEvent(BaseEvent): parent_id = ent_info["parentId"] new_tasks_by_parent[parent_id].append(ent_info) pop_out_ents.append(ftrack_id) + continue + + name = ( + ent_info + .get("changes", {}) + .get("name", {}) + .get("new") + ) + avalon_ent_by_name = self.avalon_ents_by_name.get(name) + avalon_ent_by_name_ftrack_id = ( + avalon_ent_by_name + .get("data", {}) + .get("ftrackId") + ) + if avalon_ent_by_name and avalon_ent_by_name_ftrack_id is None: + ftrack_ent = self.ftrack_ents_by_id.get(ftrack_id) + if not ftrack_ent: + ftrack_ent = self.process_session.query( + self.entities_query_by_id.format( + self.cur_project["id"], ftrack_id + ) + ).one() + self.ftrack_ents_by_id[ftrack_id] = ftrack_ent + + ent_path_items = [ent["name"] for ent in ftrack_ent["link"]] + parents = ent_path_items[1:len(ent_path_items)-1:] + + avalon_ent_parents = ( + avalon_ent_by_name.get("data", {}).get("parents") + ) + if parents == avalon_ent_parents: + self.dbcon.update_one({ + "_id": avalon_ent_by_name["_id"] + }, { + "data.ftrackId": ftrack_id, + "data.entityType": entity_type + }) + self._avalon_ents_by_ftrack_id[ftrack_id] = ( + avalon_ent_by_name + ) + pop_out_ents.append(ftrack_id) + continue configuration_id = entity_type_conf_ids.get(entity_type) if not configuration_id: From 83c501f26dd8d2a57cae5931e210885f95a780ea Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Thu, 16 Jan 2020 16:31:24 +0100 Subject: [PATCH 4/7] fixed update query --- pype/ftrack/events/event_sync_to_avalon.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pype/ftrack/events/event_sync_to_avalon.py b/pype/ftrack/events/event_sync_to_avalon.py index 6188458645..b268372bd6 100644 --- a/pype/ftrack/events/event_sync_to_avalon.py +++ b/pype/ftrack/events/event_sync_to_avalon.py @@ -1463,8 +1463,10 @@ class SyncToAvalonEvent(BaseEvent): self.dbcon.update_one({ "_id": avalon_ent_by_name["_id"] }, { - "data.ftrackId": ftrack_id, - "data.entityType": entity_type + "$set": { + "data.ftrackId": ftrack_id, + "data.entityType": entity_type + } }) self._avalon_ents_by_ftrack_id[ftrack_id] = ( avalon_ent_by_name From 846777bff00231031ef7ee86cbb5b3602c75e360 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 17 Jan 2020 12:40:35 +0100 Subject: [PATCH 5/7] update all avalon ent data if ftrack id was updated --- pype/ftrack/events/event_sync_to_avalon.py | 41 ++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/pype/ftrack/events/event_sync_to_avalon.py b/pype/ftrack/events/event_sync_to_avalon.py index b268372bd6..3f625da1ac 100644 --- a/pype/ftrack/events/event_sync_to_avalon.py +++ b/pype/ftrack/events/event_sync_to_avalon.py @@ -1468,9 +1468,50 @@ class SyncToAvalonEvent(BaseEvent): "data.entityType": entity_type } }) + + avalon_ent_by_name["data"]["ftrackId"] = ftrack_id + avalon_ent_by_name["data"]["entityType"] = entity_type + self._avalon_ents_by_ftrack_id[ftrack_id] = ( avalon_ent_by_name ) + if self._avalon_ents_by_parent_id: + found = None + for _parent_id_, _entities_ in ( + self._avalon_ents_by_parent_id.items() + ): + for _idx_, entity in enumerate(_entities_): + if entity["_id"] == avalon_ent_by_name["_id"]: + found = (_parent_id_, _idx_) + break + + if found: + break + + if found: + _parent_id_, _idx_ = found + self._avalon_ents_by_parent_id[_parent_id_][ + _idx_] = avalon_ent_by_name + + if self._avalon_ents_by_id: + self._avalon_ents_by_id[avalon_ent_by_name["_id"]] = ( + avalon_ent_by_name + ) + + if self._avalon_ents_by_name: + self._avalon_ents_by_name[name] = avalon_ent_by_name + + if self._avalon_ents: + found = None + for _idx_, _ent_ in enumerate(self._avalon_ents): + if _ent_["_id"] != avalon_ent_by_name["_id"]: + continue + found = _idx_ + break + + if found is not None: + self._avalon_ents[found] = avalon_ent_by_name + pop_out_ents.append(ftrack_id) continue From 7029588793f013d751cb3d3d8c5bbd40e106e002 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 17 Jan 2020 15:03:26 +0100 Subject: [PATCH 6/7] correct setting --- pype/ftrack/events/event_sync_to_avalon.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pype/ftrack/events/event_sync_to_avalon.py b/pype/ftrack/events/event_sync_to_avalon.py index 3f625da1ac..23284a2ae6 100644 --- a/pype/ftrack/events/event_sync_to_avalon.py +++ b/pype/ftrack/events/event_sync_to_avalon.py @@ -1503,14 +1503,16 @@ class SyncToAvalonEvent(BaseEvent): if self._avalon_ents: found = None - for _idx_, _ent_ in enumerate(self._avalon_ents): + project, entities = self._avalon_ents + for _idx_, _ent_ in enumerate(entities): if _ent_["_id"] != avalon_ent_by_name["_id"]: continue found = _idx_ break if found is not None: - self._avalon_ents[found] = avalon_ent_by_name + entities[found] = avalon_ent_by_name + self._avalon_ents = project, entities pop_out_ents.append(ftrack_id) continue From 40cae28e76154385b2543f5c02c7b84877e26e3d Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 17 Jan 2020 16:05:59 +0100 Subject: [PATCH 7/7] sync to avalon actions return information about not available avalon_mongo_id custom attribute(only for project) --- pype/ftrack/actions/action_sync_to_avalon.py | 5 ++++- pype/ftrack/events/action_sync_to_avalon.py | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/pype/ftrack/actions/action_sync_to_avalon.py b/pype/ftrack/actions/action_sync_to_avalon.py index 01d0b866bf..d2fcfb372f 100644 --- a/pype/ftrack/actions/action_sync_to_avalon.py +++ b/pype/ftrack/actions/action_sync_to_avalon.py @@ -70,7 +70,10 @@ class SyncToAvalonLocal(BaseAction): ft_project_name = in_entities[0]["project"]["full_name"] try: - self.entities_factory.launch_setup(ft_project_name) + output = self.entities_factory.launch_setup(ft_project_name) + if output is not None: + return output + time_1 = time.time() self.entities_factory.set_cutom_attributes() diff --git a/pype/ftrack/events/action_sync_to_avalon.py b/pype/ftrack/events/action_sync_to_avalon.py index 9f9deeab95..79ab1b5f7a 100644 --- a/pype/ftrack/events/action_sync_to_avalon.py +++ b/pype/ftrack/events/action_sync_to_avalon.py @@ -105,7 +105,10 @@ class SyncToAvalonServer(BaseAction): ft_project_name = in_entities[0]["project"]["full_name"] try: - self.entities_factory.launch_setup(ft_project_name) + output = self.entities_factory.launch_setup(ft_project_name) + if output is not None: + return output + time_1 = time.time() self.entities_factory.set_cutom_attributes()