Added docstring and changed doc to dict in var-names

This commit is contained in:
Jacob Danell 2023-02-28 23:08:40 +01:00 committed by Milan Kolar
parent 3fc2180e51
commit f9137bdb04

View file

@ -65,30 +65,32 @@ def set_op_project(dbcon: AvalonMongoDB, project_id: str):
def update_op_assets(
dbcon: AvalonMongoDB,
gazu_project: dict,
project_doc: dict,
project_dict: dict,
entities_list: List[dict],
asset_doc_ids: Dict[str, dict],
asset_dict_ids: Dict[str, dict],
) -> List[Dict[str, dict]]:
"""Update OpenPype assets.
Set 'data' and 'parent' fields.
Args:
dbcon (AvalonMongoDB): Connection to DB
gazu_project dict): Dict of gazu,
project_dict dict): Dict of project,
entities_list (List[dict]): List of zou entities to update
asset_doc_ids (Dict[str, dict]): Dicts of [{zou_id: asset_doc}, ...]
asset_dict_ids (Dict[str, dict]): Dicts of [{zou_id: asset_doc}, ...]
Returns:
List[Dict[str, dict]]: List of (doc_id, update_dict) tuples
"""
if not project_doc:
if not project_dict:
return
project_name = project_doc["name"]
project_name = project_dict["name"]
assets_with_update = []
for item in entities_list:
# Check asset exists
item_doc = asset_doc_ids.get(item["id"])
item_doc = asset_dict_ids.get(item["id"])
if not item_doc: # Create asset
op_asset = create_op_asset(item)
insert_result = dbcon.insert_one(op_asset)
@ -105,7 +107,7 @@ def update_op_assets(
try:
frame_in = int(
item_data.pop(
"frame_in", project_doc["data"].get("frameStart")
"frame_in", project_dict["data"].get("frameStart")
)
)
except (TypeError, ValueError):
@ -124,14 +126,14 @@ def update_op_assets(
if frames_duration:
frame_out = frame_in + frames_duration - 1
else:
frame_out = project_doc["data"].get("frameEnd", frame_in)
frame_out = project_dict["data"].get("frameEnd", frame_in)
item_data["frameEnd"] = frame_out
# Fps, fallback to project's value or default value (25.0)
try:
fps = float(item_data.get("fps"))
except (TypeError, ValueError):
fps = float(gazu_project.get(
"fps", project_doc["data"].get("fps", 25)))
"fps", project_dict["data"].get("fps", 25)))
item_data["fps"] = fps
# Resolution, fall back to project default
match_res = re.match(
@ -142,27 +144,27 @@ def update_op_assets(
item_data["resolutionWidth"] = int(match_res.group(1))
item_data["resolutionHeight"] = int(match_res.group(2))
else:
item_data["resolutionWidth"] = project_doc["data"].get(
item_data["resolutionWidth"] = project_dict["data"].get(
"resolutionWidth")
item_data["resolutionHeight"] = project_doc["data"].get(
item_data["resolutionHeight"] = project_dict["data"].get(
"resolutionHeight")
# Properties that doesn't fully exist in Kitsu.
# Guessing those property names below:
# Pixel Aspect Ratio
item_data["pixelAspect"] = item_data.get(
"pixel_aspect", project_doc["data"].get("pixelAspect"))
"pixel_aspect", project_dict["data"].get("pixelAspect"))
# Handle Start
item_data["handleStart"] = item_data.get(
"handle_start", project_doc["data"].get("handleStart"))
"handle_start", project_dict["data"].get("handleStart"))
# Handle End
item_data["handleEnd"] = item_data.get(
"handle_end", project_doc["data"].get("handleEnd"))
"handle_end", project_dict["data"].get("handleEnd"))
# Clip In
item_data["clipIn"] = item_data.get(
"clip_in", project_doc["data"].get("clipIn"))
"clip_in", project_dict["data"].get("clipIn"))
# Clip Out
item_data["clipOut"] = item_data.get(
"clip_out", project_doc["data"].get("clipOut"))
"clip_out", project_dict["data"].get("clipOut"))
# Tasks
tasks_list = []
@ -204,9 +206,14 @@ def update_op_assets(
entity_root_asset_name = "Shots"
# Root parent folder if exist
visual_parent_doc_id = (
asset_doc_ids[parent_zou_id].get("_id") if parent_zou_id else None
)
visual_parent_doc_id = None
if parent_zou_id is not None:
parent_zou_id_dict = asset_dict_ids.get(parent_zou_id)
if parent_zou_id_dict is not None:
visual_parent_doc_id = (
parent_zou_id_dict.get("_id")
if parent_zou_id_dict else None)
if visual_parent_doc_id is None:
# Find root folder doc ("Assets" or "Shots")
root_folder_doc = get_asset_by_name(
@ -225,12 +232,15 @@ def update_op_assets(
item_data["parents"] = []
ancestor_id = parent_zou_id
while ancestor_id is not None:
parent_doc = asset_doc_ids[ancestor_id]
item_data["parents"].insert(0, parent_doc["name"])
parent_doc = asset_dict_ids.get(ancestor_id)
if parent_doc is not None:
item_data["parents"].insert(0, parent_doc["name"])
# Get parent entity
parent_entity = parent_doc["data"]["zou"]
ancestor_id = parent_entity.get("parent_id")
# Get parent entity
parent_entity = parent_doc["data"]["zou"]
ancestor_id = parent_entity.get("parent_id")
else:
ancestor_id = None
# Build OpenPype compatible name
if item_type in ["Shot", "Sequence"] and parent_zou_id is not None:
@ -239,7 +249,7 @@ def update_op_assets(
item_name = f"{item_data['parents'][-1]}_{item['name']}"
# Update doc name
asset_doc_ids[item["id"]]["name"] = item_name
asset_dict_ids[item["id"]]["name"] = item_name
else:
item_name = item["name"]
@ -258,7 +268,7 @@ def update_op_assets(
"$set": {
"name": item_name,
"data": item_data,
"parent": project_doc["_id"],
"parent": project_dict["_id"],
}
},
)
@ -278,13 +288,13 @@ def write_project_to_op(project: dict, dbcon: AvalonMongoDB) -> UpdateOne:
UpdateOne: Update instance for the project
"""
project_name = project["name"]
project_doc = get_project(project_name)
if not project_doc:
project_dict = get_project(project_name)
if not project_dict:
log.info("Project created: {}".format(project_name))
project_doc = create_project(project_name, project_name)
project_dict = create_project(project_name, project_name)
# Project data and tasks
project_data = project_doc["data"] or {}
project_data = project_dict["data"] or {}
# Build project code and update Kitsu
project_code = project.get("code")
@ -315,7 +325,7 @@ def write_project_to_op(project: dict, dbcon: AvalonMongoDB) -> UpdateOne:
)
return UpdateOne(
{"_id": project_doc["_id"]},
{"_id": project_dict["_id"]},
{
"$set": {
"config.tasks": {
@ -398,7 +408,7 @@ def sync_project_from_kitsu(dbcon: AvalonMongoDB, project: dict):
# Try to find project document
project_name = project["name"]
dbcon.Session["AVALON_PROJECT"] = project_name
project_doc = get_project(project_name)
project_dict = get_project(project_name)
# Query all assets of the local project
zou_ids_and_asset_docs = {
@ -406,7 +416,7 @@ def sync_project_from_kitsu(dbcon: AvalonMongoDB, project: dict):
for asset_doc in get_assets(project_name)
if asset_doc["data"].get("zou", {}).get("id")
}
zou_ids_and_asset_docs[project["id"]] = project_doc
zou_ids_and_asset_docs[project["id"]] = project_dict
# Create entities root folders
to_insert = [
@ -453,7 +463,7 @@ def sync_project_from_kitsu(dbcon: AvalonMongoDB, project: dict):
[
UpdateOne({"_id": id}, update)
for id, update in update_op_assets(
dbcon, project, project_doc,
dbcon, project, project_dict,
all_entities, zou_ids_and_asset_docs
)
]