From 1944cbdd72fbf1f5699ac7e7a0be9ed163a04765 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 28 Feb 2020 16:43:31 +0100 Subject: [PATCH 1/3] action set attribute `is_published` of deleted asset versions to False --- .../actions/action_delete_old_versions.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/pype/ftrack/actions/action_delete_old_versions.py b/pype/ftrack/actions/action_delete_old_versions.py index bec21dae96..23ceb124e5 100644 --- a/pype/ftrack/actions/action_delete_old_versions.py +++ b/pype/ftrack/actions/action_delete_old_versions.py @@ -361,6 +361,24 @@ class DeleteOldVersions(BaseAction): self.dbcon.uninstall() + for entity in entities: + entity["is_published"] = False + + try: + session.commit() + + except Exception: + msg = ( + "Could not set `is_published` attribute to `False`" + " for selected AssetVersions." + ) + self.log.warning(msg, exc_info=True) + + return { + "success": False, + "message": msg + } + return True def delete_whole_dir_paths(self, dir_paths): From 3fba3e17ad44a6394419aca019ce67781fc590c0 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 28 Feb 2020 16:45:15 +0100 Subject: [PATCH 2/3] just commenting because last commit won't work --- .../actions/action_delete_old_versions.py | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/pype/ftrack/actions/action_delete_old_versions.py b/pype/ftrack/actions/action_delete_old_versions.py index 23ceb124e5..7b8b7c5617 100644 --- a/pype/ftrack/actions/action_delete_old_versions.py +++ b/pype/ftrack/actions/action_delete_old_versions.py @@ -361,23 +361,23 @@ class DeleteOldVersions(BaseAction): self.dbcon.uninstall() - for entity in entities: - entity["is_published"] = False - - try: - session.commit() - - except Exception: - msg = ( - "Could not set `is_published` attribute to `False`" - " for selected AssetVersions." - ) - self.log.warning(msg, exc_info=True) - - return { - "success": False, - "message": msg - } + # for entity in entities: + # entity["is_published"] = False + # + # try: + # session.commit() + # + # except Exception: + # msg = ( + # "Could not set `is_published` attribute to `False`" + # " for selected AssetVersions." + # ) + # self.log.warning(msg, exc_info=True) + # + # return { + # "success": False, + # "message": msg + # } return True From f63ec18f4eb677d1e06a9a91b325dd4a811e0fde Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 28 Feb 2020 17:11:07 +0100 Subject: [PATCH 3/3] first attemp possible solution --- .../actions/action_delete_old_versions.py | 74 +++++++++++++------ 1 file changed, 53 insertions(+), 21 deletions(-) diff --git a/pype/ftrack/actions/action_delete_old_versions.py b/pype/ftrack/actions/action_delete_old_versions.py index 7b8b7c5617..f6a66318c9 100644 --- a/pype/ftrack/actions/action_delete_old_versions.py +++ b/pype/ftrack/actions/action_delete_old_versions.py @@ -167,8 +167,11 @@ class DeleteOldVersions(BaseAction): asset_versions_by_parent_id = collections.defaultdict(list) subset_names_by_asset_name = collections.defaultdict(list) + ftrack_assets_by_name = {} for entity in entities: - parent_ent = entity["asset"]["parent"] + ftrack_asset = entity["asset"] + + parent_ent = ftrack_asset["parent"] parent_ftrack_id = parent_ent["id"] parent_name = parent_ent["name"] @@ -183,9 +186,12 @@ class DeleteOldVersions(BaseAction): project = parent_ent["project"] # Collect subset names per asset - subset_name = entity["asset"]["name"] + subset_name = ftrack_asset["name"] subset_names_by_asset_name[parent_name].append(subset_name) + if subset_name not in ftrack_assets_by_name: + ftrack_assets_by_name[subset_name] = ftrack_asset + # Set Mongo collection project_name = project["full_name"] self.dbcon.Session["AVALON_PROJECT"] = project_name @@ -236,7 +242,6 @@ class DeleteOldVersions(BaseAction): def sort_func(ent): return int(ent["name"]) - last_versions_by_parent = collections.defaultdict(list) all_last_versions = [] for parent_id, _versions in versions_by_parent.items(): for idx, version in enumerate( @@ -244,7 +249,6 @@ class DeleteOldVersions(BaseAction): ): if idx >= versions_count: break - last_versions_by_parent[parent_id].append(version) all_last_versions.append(version) self.log.debug("Collected versions ({})".format(len(versions))) @@ -253,6 +257,11 @@ class DeleteOldVersions(BaseAction): for version in all_last_versions: versions.remove(version) + # Update versions_by_parent without filtered versions + versions_by_parent = collections.defaultdict(list) + for ent in versions: + versions_by_parent[ent["parent"]].append(ent) + # Filter already deleted versions versions_to_pop = [] for version in versions: @@ -361,23 +370,46 @@ class DeleteOldVersions(BaseAction): self.dbcon.uninstall() - # for entity in entities: - # entity["is_published"] = False - # - # try: - # session.commit() - # - # except Exception: - # msg = ( - # "Could not set `is_published` attribute to `False`" - # " for selected AssetVersions." - # ) - # self.log.warning(msg, exc_info=True) - # - # return { - # "success": False, - # "message": msg - # } + # Set attribute `is_published` to `False` on ftrack AssetVersions + for subset_id, _versions in versions_by_parent.items(): + subset_name = None + for subset in subsets: + if subset["_id"] == subset_id: + subset_name = subset["name"] + break + + if subset_name is None: + self.log.warning( + "Subset with ID `{}` was not found.".format(str(subset_id)) + ) + continue + + ftrack_asset = ftrack_assets_by_name.get(subset_name) + if not ftrack_asset: + self.log.warning(( + "Could not find Ftrack asset with name `{}`" + ).format(subset_name)) + continue + + version_numbers = [int(ver["name"]) for ver in _versions] + for version in ftrack_asset["versions"]: + if int(version["version"]) in version_numbers: + version["is_published"] = False + + try: + session.commit() + + except Exception: + msg = ( + "Could not set `is_published` attribute to `False`" + " for selected AssetVersions." + ) + self.log.warning(msg, exc_info=True) + + return { + "success": False, + "message": msg + } return True