Source code for cgl.plugins.otio.tools.shotgrid_shot_metadata
import sys
from pprint import pprint
import opentimelineio as otio
from cgl.plugins.otio.tools.aaf import aaf_extract_publish_shots
from cgl.plugins.otio.tools import edit_info
from cgl.plugins.shotgrid.tracking_internal.shotgun_specific import ShotgunQuery as sg
[docs]
def shotgrid_shot_metadata_update(timeline_path, task='amc'):
timeline = aaf_extract_publish_shots.simplify_timeline(timeline_path)
project_name = None
shot_dict = {}
for track in timeline.tracks:
for i, clip in enumerate(track):
if not isinstance(clip, otio.schema.Clip):
continue
po = aaf_extract_publish_shots.get_path_object_from_metadata(clip)
if not po:
pass
if po.task != task:
continue
if po.entity_type != 'shots':
continue
project_name = po.project
shot_name = f"{po.sequence}_{po.shot}"
d = edit_info.get_shotgrid_edit_data_from_clip(clip)
d['sg_cut_order'] = i
shot_dict[shot_name] = d
any_filter = []
for key, _ in shot_dict.items():
f = ['code', 'is', key]
any_filter.append(f)
filters = [
['project.Project.name', 'is', project_name],
{
"filter_operator": "any",
"filters": any_filter
}
]
fields = ['code', 'project']
sg_shots = sg.find("Shot", filters, fields)
batch_data = []
for shot_data in sg_shots:
shot_name = shot_data['code']
shot_id = shot_data['id']
item_data = shot_dict[shot_name]
batch_data.append({"request_type" : "update",
"entity_type": "Shot",
"entity_id" : shot_id,
"data" : item_data })
result = sg.batch(batch_data)
pprint(result)
if __name__ == "__main__":
shotgrid_shot_metadata_update(sys.argv[1])