Formatted with Black

This commit is contained in:
Jacob Danell 2023-03-03 11:10:12 +01:00 committed by Milan Kolar
parent c50678bcb8
commit 8fc6978ea2
7 changed files with 123 additions and 83 deletions

View file

@ -23,36 +23,37 @@ class ShowInKitsu(LauncherAction):
return True
def process(self, session, **kwargs):
# Context inputs
project_name = session["AVALON_PROJECT"]
asset_name = session.get("AVALON_ASSET", None)
task_name = session.get("AVALON_TASK", None)
project = get_project(project_name=project_name,
fields=["data.zou_id"])
project = get_project(
project_name=project_name, fields=["data.zou_id"]
)
if not project:
raise RuntimeError("Project {} not found.".format(project_name))
project_zou_id = project["data"].get("zou_id")
if not project_zou_id:
raise RuntimeError(
"Project {} has no connected kitsu id.".format(project_name))
"Project {} has no connected kitsu id.".format(project_name)
)
asset_zou_name = None
asset_zou_id = None
asset_zou_type = 'Assets'
asset_zou_type = "Assets"
task_zou_id = None
zou_sub_type = ['AssetType', 'Sequence']
zou_sub_type = ["AssetType", "Sequence"]
if asset_name:
asset_zou_name = asset_name
asset_fields = ["data.zou.id", "data.zou.type"]
if task_name:
asset_fields.append("data.tasks.{}.zou.id".format(task_name))
asset = get_asset_by_name(project_name,
asset_name=asset_name,
fields=asset_fields)
asset = get_asset_by_name(
project_name, asset_name=asset_name, fields=asset_fields
)
asset_zou_data = asset["data"].get("zou")
@ -68,37 +69,43 @@ class ShowInKitsu(LauncherAction):
task_zou_data = task_data.get("zou", {})
if not task_zou_data:
self.log.debug(
"No zou task data for task: {}".format(task_name))
"No zou task data for task: {}".format(task_name)
)
task_zou_id = task_zou_data["id"]
# Define URL
url = self.get_url(project_id=project_zou_id,
asset_name=asset_zou_name,
asset_id=asset_zou_id,
asset_type=asset_zou_type,
task_id=task_zou_id)
url = self.get_url(
project_id=project_zou_id,
asset_name=asset_zou_name,
asset_id=asset_zou_id,
asset_type=asset_zou_type,
task_id=task_zou_id,
)
# Open URL in webbrowser
self.log.info("Opening URL: {}".format(url))
webbrowser.open(url,
# Try in new tab
new=2)
webbrowser.open(
url,
# Try in new tab
new=2,
)
def get_url(self,
project_id,
asset_name=None,
asset_id=None,
asset_type=None,
task_id=None):
shots_url = {'Shots', 'Sequence', 'Shot'}
sub_type = {'AssetType', 'Sequence'}
def get_url(
self,
project_id,
asset_name=None,
asset_id=None,
asset_type=None,
task_id=None,
):
shots_url = {"Shots", "Sequence", "Shot"}
sub_type = {"AssetType", "Sequence"}
kitsu_module = self.get_kitsu_module()
# Get kitsu url with /api stripped
kitsu_url = kitsu_module.server_url
if kitsu_url.endswith("/api"):
kitsu_url = kitsu_url[:-len("/api")]
kitsu_url = kitsu_url[: -len("/api")]
sub_url = f"/productions/{project_id}"
asset_type_url = "shots" if asset_type in shots_url else "assets"
@ -121,6 +128,6 @@ class ShowInKitsu(LauncherAction):
# Add search method if is a sub_type
sub_url += f"/{asset_type_url}"
if asset_type in sub_type:
sub_url += f'?search={asset_name}'
sub_url += f"?search={asset_name}"
return f"{kitsu_url}{sub_url}"

View file

@ -13,6 +13,5 @@ class CollectKitsuSession(pyblish.api.ContextPlugin): # rename log in
# families = ["kitsu"]
def process(self, context):
gazu.client.set_host(os.environ["KITSU_SERVER"])
gazu.log_in(os.environ["KITSU_LOGIN"], os.environ["KITSU_PWD"])

View file

@ -10,9 +10,9 @@ class CollectKitsuEntities(pyblish.api.ContextPlugin):
label = "Kitsu entities"
def process(self, context):
kitsu_project = gazu.project.get_project_by_name(
context.data["projectName"])
context.data["projectName"]
)
if not kitsu_project:
raise ValueError("Project not found in kitsu!")
@ -35,7 +35,8 @@ class CollectKitsuEntities(pyblish.api.ContextPlugin):
zou_task_data = asset_doc["data"]["tasks"][task_name].get("zou")
self.log.debug(
"Collected zou task data: {}".format(zou_task_data))
"Collected zou task data: {}".format(zou_task_data)
)
entity_id = zou_asset_data["id"]
entity = kitsu_entities_by_id.get(entity_id)
@ -44,7 +45,9 @@ class CollectKitsuEntities(pyblish.api.ContextPlugin):
if not entity:
raise ValueError(
"{} was not found in kitsu!".format(
zou_asset_data["name"]))
zou_asset_data["name"]
)
)
kitsu_entities_by_id[entity_id] = entity
instance.data["entity"] = entity

View file

@ -13,7 +13,6 @@ class IntegrateKitsuNote(pyblish.api.ContextPlugin):
note_status_shortname = "wfa"
def process(self, context):
# Get comment text body
publish_comment = context.data.get("comment")
if not publish_comment:
@ -45,9 +44,7 @@ class IntegrateKitsuNote(pyblish.api.ContextPlugin):
# Add comment to kitsu task
task_id = kitsu_task["id"]
self.log.debug(
"Add new note in taks id {}".format(task_id)
)
self.log.debug("Add new note in taks id {}".format(task_id))
kitsu_comment = gazu.task.add_comment(
task_id, note_status, comment=publish_comment
)

View file

@ -12,7 +12,6 @@ class IntegrateKitsuReview(pyblish.api.InstancePlugin):
optional = True
def process(self, instance):
task = instance.data["kitsu_task"]["id"]
comment = instance.data["kitsu_comment"]["id"]

View file

@ -102,7 +102,8 @@ class Listener:
)
gazu.events.add_listener(
self.event_client, "shot:new", self._new_shot)
self.event_client, "shot:new", self._new_shot
)
gazu.events.add_listener(
self.event_client, "shot:update", self._update_shot
)
@ -111,7 +112,8 @@ class Listener:
)
gazu.events.add_listener(
self.event_client, "task:new", self._new_task)
self.event_client, "task:new", self._new_task
)
gazu.events.add_listener(
self.event_client, "task:update", self._update_task
)
@ -146,7 +148,8 @@ class Listener:
# Write into DB
if update_project:
self.dbcon.Session["AVALON_PROJECT"] = get_kitsu_project_name(
data["project_id"])
data["project_id"]
)
self.dbcon.bulk_write([update_project])
if new_project:
@ -158,7 +161,8 @@ class Listener:
collections = self.dbcon.database.list_collection_names()
for collection in collections:
project = self.dbcon.database[collection].find_one(
{"data.zou_id": data["project_id"]})
{"data.zou_id": data["project_id"]}
)
if project:
# Delete project collection
self.dbcon.database[project["name"]].drop()
@ -186,13 +190,15 @@ class Listener:
ep_id = asset.get("episode_id")
ep = self.get_ep_dict(ep_id)
msg = "Asset created: {proj_name} - {ep_name}" \
msg = (
"Asset created: {proj_name} - {ep_name}"
"{asset_type_name} - {asset_name}".format(
proj_name=asset["project_name"],
ep_name=ep["name"] + " - " if ep is not None else "",
asset_type_name=asset["asset_type_name"],
asset_name=asset["name"]
asset_name=asset["name"],
)
)
log.info(msg)
def _update_asset(self, data):
@ -216,8 +222,11 @@ class Listener:
# Update
update_op_result = update_op_assets(
self.dbcon, gazu_project, project_doc,
[asset], zou_ids_and_asset_docs
self.dbcon,
gazu_project,
project_doc,
[asset],
zou_ids_and_asset_docs,
)
if update_op_result:
asset_doc_id, asset_update = update_op_result[0]
@ -238,13 +247,15 @@ class Listener:
ep_id = asset["data"]["zou"].get("episode_id")
ep = self.get_ep_dict(ep_id)
msg = "Asset deleted: {proj_name} - {ep_name}" \
msg = (
"Asset deleted: {proj_name} - {ep_name}"
"{type_name} - {asset_name}".format(
proj_name=asset["data"]["zou"]["project_name"],
ep_name=ep["name"] + " - " if ep is not None else "",
type_name=asset["data"]["zou"]["asset_type_name"],
asset_name=asset["name"]
asset_name=asset["name"],
)
)
log.info(msg)
# == Episode ==
@ -264,8 +275,7 @@ class Listener:
# Print message
msg = "Episode created: {proj_name} - {ep_name}".format(
proj_name=ep["project_name"],
ep_name=ep["name"]
proj_name=ep["project_name"], ep_name=ep["name"]
)
log.info(msg)
@ -290,8 +300,11 @@ class Listener:
# Update
update_op_result = update_op_assets(
self.dbcon, gazu_project, project_doc,
[ep], zou_ids_and_asset_docs
self.dbcon,
gazu_project,
project_doc,
[ep],
zou_ids_and_asset_docs,
)
if update_op_result:
asset_doc_id, asset_update = update_op_result[0]
@ -310,11 +323,11 @@ class Listener:
# Print message
project = gazu.project.get_project(
ep["data"]["zou"]["project_id"])
ep["data"]["zou"]["project_id"]
)
msg = "Episode deleted: {proj_name} - {ep_name}".format(
proj_name=project["name"],
ep_name=ep["name"]
proj_name=project["name"], ep_name=ep["name"]
)
log.info(msg)
@ -337,12 +350,14 @@ class Listener:
ep_id = sequence.get("episode_id")
ep = self.get_ep_dict(ep_id)
msg = "Sequence created: {proj_name} - {ep_name}" \
msg = (
"Sequence created: {proj_name} - {ep_name}"
"{sequence_name}".format(
proj_name=sequence["project_name"],
ep_name=ep["name"] + " - " if ep is not None else "",
sequence_name=sequence["name"]
sequence_name=sequence["name"],
)
)
log.info(msg)
def _update_sequence(self, data):
@ -366,8 +381,11 @@ class Listener:
# Update
update_op_result = update_op_assets(
self.dbcon, gazu_project, project_doc,
[sequence], zou_ids_and_asset_docs
self.dbcon,
gazu_project,
project_doc,
[sequence],
zou_ids_and_asset_docs,
)
if update_op_result:
asset_doc_id, asset_update = update_op_result[0]
@ -388,14 +406,17 @@ class Listener:
ep = self.get_ep_dict(ep_id)
gazu_project = gazu.project.get_project(
sequence["data"]["zou"]["project_id"])
sequence["data"]["zou"]["project_id"]
)
msg = "Sequence deleted: {proj_name} - {ep_name}" \
msg = (
"Sequence deleted: {proj_name} - {ep_name}"
"{sequence_name}".format(
proj_name=gazu_project["name"],
ep_name=ep["name"] + " - " if ep is not None else "",
sequence_name=sequence["name"]
sequence_name=sequence["name"],
)
)
log.info(msg)
# == Shot ==
@ -417,13 +438,15 @@ class Listener:
ep_id = shot["episode_id"]
ep = self.get_ep_dict(ep_id)
msg = "Shot created: {proj_name} - {ep_name}" \
msg = (
"Shot created: {proj_name} - {ep_name}"
"{sequence_name} - {shot_name}".format(
proj_name=shot["project_name"],
ep_name=ep["name"] + " - " if ep is not None else "",
sequence_name=shot["sequence_name"],
shot_name=shot["name"]
shot_name=shot["name"],
)
)
log.info(msg)
def _update_shot(self, data):
@ -440,14 +463,18 @@ class Listener:
zou_ids_and_asset_docs = {
asset_doc["data"]["zou"]["id"]: asset_doc
for asset_doc in get_assets(project_name)
if asset_doc["data"].get("zou", {}).get("id")}
if asset_doc["data"].get("zou", {}).get("id")
}
zou_ids_and_asset_docs[shot["project_id"]] = project_doc
gazu_project = gazu.project.get_project(shot["project_id"])
# Update
update_op_result = update_op_assets(
self.dbcon, gazu_project, project_doc,
[shot], zou_ids_and_asset_docs
self.dbcon,
gazu_project,
project_doc,
[shot],
zou_ids_and_asset_docs,
)
if update_op_result:
@ -469,13 +496,15 @@ class Listener:
ep_id = shot["data"]["zou"].get("episode_id")
ep = self.get_ep_dict(ep_id)
msg = "Shot deleted: {proj_name} - {ep_name}" \
msg = (
"Shot deleted: {proj_name} - {ep_name}"
"{sequence_name} - {shot_name}".format(
proj_name=shot["data"]["zou"]["project_name"],
ep_name=ep["name"] + " - " if ep is not None else "",
sequence_name=shot["data"]["zou"]["sequence_name"],
shot_name=shot["name"]
shot_name=shot["name"],
)
)
log.info(msg)
# == Task ==
@ -504,12 +533,12 @@ class Listener:
parent_name = "{ep_name}{sequence_name} - {shot_name}".format(
ep_name=ep["name"] + " - " if ep is not None else "",
sequence_name=task["sequence"]["name"],
shot_name=task["entity"]["name"]
shot_name=task["entity"]["name"],
)
asset_name = "{ep_name}{sequence_name}_{shot_name}".format(
ep_name=ep["name"] + "_" if ep is not None else "",
sequence_name=task["sequence"]["name"],
shot_name=task["entity"]["name"]
shot_name=task["entity"]["name"],
)
# Update asset tasks with new one
@ -518,20 +547,24 @@ class Listener:
asset_tasks = asset_doc["data"].get("tasks")
task_type_name = task["task_type"]["name"]
asset_tasks[task_type_name] = {
"type": task_type_name, "zou": task}
"type": task_type_name,
"zou": task,
}
self.dbcon.update_one(
{"_id": asset_doc["_id"]},
{"$set": {"data.tasks": asset_tasks}}
{"$set": {"data.tasks": asset_tasks}},
)
# Print message
msg = "Task created: {proj} - {ent_type}{parent}" \
msg = (
"Task created: {proj} - {ent_type}{parent}"
" - {task}".format(
proj=task["project"]["name"],
ent_type=ent_type + " - " if ent_type is not None else "",
parent=parent_name,
task=task["task_type"]["name"]
task=task["task_type"]["name"],
)
)
log.info(msg)
def _update_task(self, data):
@ -567,19 +600,19 @@ class Listener:
parent_name = "{ep}{entity_type} - {entity}".format(
ep=ep["name"] + " - " if ep is not None else "",
entity_type=task["zou"]["entity_type"]["name"],
entity=task["zou"]["entity"]["name"]
entity=task["zou"]["entity"]["name"],
)
elif entity["type"] == "Shot":
parent_name = "{ep}{sequence} - {shot}".format(
ep=ep["name"] + " - " if ep is not None else "",
sequence=task["zou"]["sequence"]["name"],
shot=task["zou"]["entity"]["name"]
shot=task["zou"]["entity"]["name"],
)
msg = "Task deleted: {proj} - {parent} - {task}".format(
proj=task["zou"]["project"]["name"],
parent=parent_name,
task=name
task=name,
)
log.info(msg)
@ -593,6 +626,7 @@ def start_listeners(login: str, password: str):
login (str): Kitsu user login
password (str): Kitsu user password
"""
# Refresh token every week
def refresh_token_every_week():
log.info("Refreshing token...")

View file

@ -83,7 +83,8 @@ def sync_zou_from_op_project(
}
)
gazu.project.update_project_data(
zou_project, data=project_doc["data"])
zou_project, data=project_doc["data"]
)
gazu.project.update_project(zou_project)
asset_types = gazu.asset.all_asset_types()
@ -99,8 +100,7 @@ def sync_zou_from_op_project(
project_module_settings = get_project_settings(project_name)["kitsu"]
dbcon.Session["AVALON_PROJECT"] = project_name
asset_docs = {
asset_doc["_id"]: asset_doc
for asset_doc in get_assets(project_name)
asset_doc["_id"]: asset_doc for asset_doc in get_assets(project_name)
}
# Create new assets
@ -176,7 +176,8 @@ def sync_zou_from_op_project(
frame_in=doc["data"]["frameStart"],
frame_out=doc["data"]["frameEnd"],
nb_frames=(
doc["data"]["frameEnd"] - doc["data"]["frameStart"] + 1),
doc["data"]["frameEnd"] - doc["data"]["frameStart"] + 1
),
)
elif match.group(2): # Sequence