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])