From 67e90896383a16396c8ec9054dccc208031d129a Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 15 Nov 2019 14:19:00 +0100 Subject: [PATCH 1/3] added while loop so more than one status may be tried and rollback is called on session if change failed --- pype/ftrack/lib/ftrack_app_handler.py | 35 +++++++++++++++++++++------ 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/pype/ftrack/lib/ftrack_app_handler.py b/pype/ftrack/lib/ftrack_app_handler.py index dbb38a3247..9dc735987d 100644 --- a/pype/ftrack/lib/ftrack_app_handler.py +++ b/pype/ftrack/lib/ftrack_app_handler.py @@ -345,25 +345,44 @@ class AppAction(BaseHandler): statuses = presets['status_update'] actual_status = entity['status']['name'].lower() - next_status_name = None - for key, value in statuses.items(): - if actual_status in value or '_any_' in value: - if key != '_ignore_': - next_status_name = key + already_tested = [] + ent_path = "/".join( + [ent["name"] for ent in entity['link']] + ) + while True: + next_status_name = None + for key, value in statuses.items(): + if key in already_tested: + continue + if actual_status in value or '_any_' in value: + if key != '_ignore_': + next_status_name = key + already_tested.append(key) + break + already_tested.append(key) + + if next_status_name is None: break - if next_status_name is not None: try: query = 'Status where name is "{}"'.format( next_status_name ) status = session.query(query).one() + entity['status'] = status session.commit() + self.log.debug("Changing status to \"{}\" <{}>".format( + next_status_name, ent_path + )) + break + except Exception: + session.rollback() msg = ( - 'Status "{}" in presets wasn\'t found on Ftrack' - ).format(next_status_name) + 'Status "{}" in presets wasn\'t found' + ' on Ftrack entity type "{}"' + ).format(next_status_name, entity.entity_type) self.log.warning(msg) # Set origin avalon environments From e66a3e1b382715b976e51b7260390dd44b938615 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 15 Nov 2019 14:25:13 +0100 Subject: [PATCH 2/3] added more necessary rollbacks --- pype/ftrack/events/event_thumbnail_updates.py | 5 ++++- pype/ftrack/events/event_version_to_task_statuses.py | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/pype/ftrack/events/event_thumbnail_updates.py b/pype/ftrack/events/event_thumbnail_updates.py index a74aad6bd9..15aa57152d 100644 --- a/pype/ftrack/events/event_thumbnail_updates.py +++ b/pype/ftrack/events/event_thumbnail_updates.py @@ -49,7 +49,10 @@ class ThumbnailEvents(BaseEvent): self.log.info(msg) - session.commit() + try: + session.commit() + except Exception: + session.rollback() def register(session, plugins_presets): diff --git a/pype/ftrack/events/event_version_to_task_statuses.py b/pype/ftrack/events/event_version_to_task_statuses.py index 66a55c0cf7..d3e90d22de 100644 --- a/pype/ftrack/events/event_version_to_task_statuses.py +++ b/pype/ftrack/events/event_version_to_task_statuses.py @@ -64,6 +64,7 @@ class VersionToTaskStatus(BaseEvent): except Exception as e: self.log.warning('!!! [ {} ] status couldnt be set:\ [ {} ]'.format(path, e)) + session.rollback() else: self.log.info('>>> [ {} ] updated to [ {} ]'.format( path, task_status['name'])) From 38198124e4b54ca574bcd9e6edc9650891073cf9 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 15 Nov 2019 14:36:37 +0100 Subject: [PATCH 3/3] removed unnecesary commit --- pype/ftrack/events/event_version_to_task_statuses.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pype/ftrack/events/event_version_to_task_statuses.py b/pype/ftrack/events/event_version_to_task_statuses.py index d3e90d22de..a31342250f 100644 --- a/pype/ftrack/events/event_version_to_task_statuses.py +++ b/pype/ftrack/events/event_version_to_task_statuses.py @@ -6,7 +6,6 @@ class VersionToTaskStatus(BaseEvent): def launch(self, session, event): '''Propagates status from version to task when changed''' - session.commit() # start of event procedure ---------------------------------- for entity in event['data'].get('entities', []):