Skip to content
This repository has been archived by the owner on Sep 20, 2024. It is now read-only.

Commit

Permalink
Merge pull request #1579 from pypeclub/bugfix/206-Ftrack_delete_actio…
Browse files Browse the repository at this point in the history
…n_cause_circular_error
  • Loading branch information
mkolar authored May 25, 2021
2 parents d609e79 + ca5405a commit fa768b3
Showing 1 changed file with 27 additions and 31 deletions.
58 changes: 27 additions & 31 deletions openpype/modules/ftrack/event_handlers_user/action_delete_asset.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,23 +11,28 @@
class DeleteAssetSubset(BaseAction):
'''Edit meta data action.'''

#: Action identifier.
# Action identifier.
identifier = "delete.asset.subset"
#: Action label.
# Action label.
label = "Delete Asset/Subsets"
#: Action description.
# Action description.
description = "Removes from Avalon with all childs and asset from Ftrack"
icon = statics_icon("ftrack", "action_icons", "DeleteAsset.svg")

settings_key = "delete_asset_subset"
#: Db connection
dbcon = AvalonMongoDB()
# Db connection
dbcon = None

splitter = {"type": "label", "value": "---"}
action_data_by_id = {}
asset_prefix = "asset:"
subset_prefix = "subset:"

def __init__(self, *args, **kwargs):
self.dbcon = AvalonMongoDB()

super(DeleteAssetSubset, self).__init__(*args, **kwargs)

def discover(self, session, entities, event):
""" Validation """
task_ids = []
Expand Down Expand Up @@ -446,7 +451,14 @@ def launch(self, session, entities, event):
if len(assets_to_delete) > 0:
map_av_ftrack_id = spec_data["without_ftrack_id"]
# Prepare data when deleting whole avalon asset
avalon_assets = self.dbcon.find({"type": "asset"})
avalon_assets = self.dbcon.find(
{"type": "asset"},
{
"_id": 1,
"data.visualParent": 1,
"data.ftrackId": 1
}
)
avalon_assets_by_parent = collections.defaultdict(list)
for asset in avalon_assets:
asset_id = asset["_id"]
Expand Down Expand Up @@ -537,11 +549,13 @@ def launch(self, session, entities, event):
ftrack_proc_txt, ", ".join(ftrack_ids_to_delete)
))

ftrack_ents_to_delete = (
entities_by_link_len = (
self._filter_entities_to_delete(ftrack_ids_to_delete, session)
)
for entity in ftrack_ents_to_delete:
session.delete(entity)
for link_len in sorted(entities_by_link_len.keys(), reverse=True):
for entity in entities_by_link_len[link_len]:
session.delete(entity)

try:
session.commit()
except Exception:
Expand Down Expand Up @@ -600,29 +614,11 @@ def _filter_entities_to_delete(self, ftrack_ids_to_delete, session):
joined_ids_to_delete
)
).all()
filtered = to_delete_entities[:]
while True:
changed = False
_filtered = filtered[:]
for entity in filtered:
entity_id = entity["id"]

for _entity in tuple(_filtered):
if entity_id == _entity["id"]:
continue

for _link in _entity["link"]:
if entity_id == _link["id"] and _entity in _filtered:
_filtered.remove(_entity)
changed = True
break

filtered = _filtered

if not changed:
break
entities_by_link_len = collections.defaultdict(list)
for entity in to_delete_entities:
entities_by_link_len[len(entity["link"])].append(entity)

return filtered
return entities_by_link_len

def report_handle(self, report_messages, project_name, event):
if not report_messages:
Expand Down

0 comments on commit fa768b3

Please sign in to comment.