mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-01 16:34:53 +01:00
use dbcon.Session instead of collection
This commit is contained in:
parent
d9062b762a
commit
26fcd19a5d
3 changed files with 63 additions and 68 deletions
|
|
@ -119,8 +119,8 @@ class Listener:
|
|||
|
||||
# Write into DB
|
||||
if update_project:
|
||||
project_col = self.dbcon.database[project_name]
|
||||
project_col.bulk_write([update_project])
|
||||
self.dbcon = self.dbcon.database[project_name]
|
||||
self.dbcon.bulk_write([update_project])
|
||||
|
||||
def _delete_project(self, data):
|
||||
"""Delete project."""
|
||||
|
|
@ -129,28 +129,27 @@ class Listener:
|
|||
project = gazu.project.get_project(data["project_id"])
|
||||
|
||||
# Delete project collection
|
||||
project_col = self.dbcon.database[project["name"]]
|
||||
project_col.drop()
|
||||
# self.dbcon = self.dbcon.database[project["name"]]
|
||||
|
||||
# == Asset ==
|
||||
|
||||
def _new_asset(self, data):
|
||||
"""Create new asset into OP DB."""
|
||||
# Get project entity
|
||||
project_col = set_op_project(self.dbcon, data["project_id"])
|
||||
set_op_project(self.dbcon, data["project_id"])
|
||||
|
||||
# Get gazu entity
|
||||
asset = gazu.asset.get_asset(data["asset_id"])
|
||||
|
||||
# Insert doc in DB
|
||||
project_col.insert_one(create_op_asset(asset))
|
||||
self.dbcon.insert_one(create_op_asset(asset))
|
||||
|
||||
# Update
|
||||
self._update_asset(data)
|
||||
|
||||
def _update_asset(self, data):
|
||||
"""Update asset into OP DB."""
|
||||
project_col = set_op_project(self.dbcon, data["project_id"])
|
||||
set_op_project(self.dbcon, data["project_id"])
|
||||
project_doc = self.dbcon.find_one({"type": "project"})
|
||||
|
||||
# Get gazu entity
|
||||
|
|
@ -160,23 +159,23 @@ class Listener:
|
|||
# Query all assets of the local project
|
||||
zou_ids_and_asset_docs = {
|
||||
asset_doc["data"]["zou"]["id"]: asset_doc
|
||||
for asset_doc in project_col.find({"type": "asset"})
|
||||
for asset_doc in self.dbcon.find({"type": "asset"})
|
||||
if asset_doc["data"].get("zou", {}).get("id")
|
||||
}
|
||||
zou_ids_and_asset_docs[asset["project_id"]] = project_doc
|
||||
|
||||
# Update
|
||||
asset_doc_id, asset_update = update_op_assets(
|
||||
project_col[asset], zou_ids_and_asset_docs
|
||||
self.dbcon[asset], zou_ids_and_asset_docs
|
||||
)[0]
|
||||
project_col.update_one({"_id": asset_doc_id}, asset_update)
|
||||
self.dbcon.update_one({"_id": asset_doc_id}, asset_update)
|
||||
|
||||
def _delete_asset(self, data):
|
||||
"""Delete asset of OP DB."""
|
||||
project_col = set_op_project(self.dbcon, data["project_id"])
|
||||
set_op_project(self.dbcon, data["project_id"])
|
||||
|
||||
# Delete
|
||||
project_col.delete_one(
|
||||
self.dbcon.delete_one(
|
||||
{"type": "asset", "data.zou.id": data["asset_id"]}
|
||||
)
|
||||
|
||||
|
|
@ -184,20 +183,20 @@ class Listener:
|
|||
def _new_episode(self, data):
|
||||
"""Create new episode into OP DB."""
|
||||
# Get project entity
|
||||
project_col = set_op_project(self.dbcon, data["project_id"])
|
||||
set_op_project(self.dbcon, data["project_id"])
|
||||
|
||||
# Get gazu entity
|
||||
episode = gazu.shot.get_episode(data["episode_id"])
|
||||
|
||||
# Insert doc in DB
|
||||
project_col.insert_one(create_op_asset(episode))
|
||||
self.dbcon.insert_one(create_op_asset(episode))
|
||||
|
||||
# Update
|
||||
self._update_episode(data)
|
||||
|
||||
def _update_episode(self, data):
|
||||
"""Update episode into OP DB."""
|
||||
project_col = set_op_project(self.dbcon, data["project_id"])
|
||||
set_op_project(self.dbcon, data["project_id"])
|
||||
project_doc = self.dbcon.find_one({"type": "project"})
|
||||
|
||||
# Get gazu entity
|
||||
|
|
@ -207,24 +206,24 @@ class Listener:
|
|||
# Query all assets of the local project
|
||||
zou_ids_and_asset_docs = {
|
||||
asset_doc["data"]["zou"]["id"]: asset_doc
|
||||
for asset_doc in project_col.find({"type": "asset"})
|
||||
for asset_doc in self.dbcon.find({"type": "asset"})
|
||||
if asset_doc["data"].get("zou", {}).get("id")
|
||||
}
|
||||
zou_ids_and_asset_docs[episode["project_id"]] = project_doc
|
||||
|
||||
# Update
|
||||
asset_doc_id, asset_update = update_op_assets(
|
||||
project_col, [episode], zou_ids_and_asset_docs
|
||||
self.dbcon, [episode], zou_ids_and_asset_docs
|
||||
)[0]
|
||||
project_col.update_one({"_id": asset_doc_id}, asset_update)
|
||||
self.dbcon.update_one({"_id": asset_doc_id}, asset_update)
|
||||
|
||||
def _delete_episode(self, data):
|
||||
"""Delete shot of OP DB."""
|
||||
project_col = set_op_project(self.dbcon, data["project_id"])
|
||||
set_op_project(self.dbcon, data["project_id"])
|
||||
print("delete episode") # TODO check bugfix
|
||||
|
||||
# Delete
|
||||
project_col.delete_one(
|
||||
self.dbcon.delete_one(
|
||||
{"type": "asset", "data.zou.id": data["episode_id"]}
|
||||
)
|
||||
|
||||
|
|
@ -232,20 +231,20 @@ class Listener:
|
|||
def _new_sequence(self, data):
|
||||
"""Create new sequnce into OP DB."""
|
||||
# Get project entity
|
||||
project_col = set_op_project(self.dbcon, data["project_id"])
|
||||
set_op_project(self.dbcon, data["project_id"])
|
||||
|
||||
# Get gazu entity
|
||||
sequence = gazu.shot.get_sequence(data["sequence_id"])
|
||||
|
||||
# Insert doc in DB
|
||||
project_col.insert_one(create_op_asset(sequence))
|
||||
self.dbcon.insert_one(create_op_asset(sequence))
|
||||
|
||||
# Update
|
||||
self._update_sequence(data)
|
||||
|
||||
def _update_sequence(self, data):
|
||||
"""Update sequence into OP DB."""
|
||||
project_col = set_op_project(self.dbcon, data["project_id"])
|
||||
set_op_project(self.dbcon, data["project_id"])
|
||||
project_doc = self.dbcon.find_one({"type": "project"})
|
||||
|
||||
# Get gazu entity
|
||||
|
|
@ -255,24 +254,24 @@ class Listener:
|
|||
# Query all assets of the local project
|
||||
zou_ids_and_asset_docs = {
|
||||
asset_doc["data"]["zou"]["id"]: asset_doc
|
||||
for asset_doc in project_col.find({"type": "asset"})
|
||||
for asset_doc in self.dbcon.find({"type": "asset"})
|
||||
if asset_doc["data"].get("zou", {}).get("id")
|
||||
}
|
||||
zou_ids_and_asset_docs[sequence["project_id"]] = project_doc
|
||||
|
||||
# Update
|
||||
asset_doc_id, asset_update = update_op_assets(
|
||||
project_col, [sequence], zou_ids_and_asset_docs
|
||||
self.dbcon, [sequence], zou_ids_and_asset_docs
|
||||
)[0]
|
||||
project_col.update_one({"_id": asset_doc_id}, asset_update)
|
||||
self.dbcon.update_one({"_id": asset_doc_id}, asset_update)
|
||||
|
||||
def _delete_sequence(self, data):
|
||||
"""Delete sequence of OP DB."""
|
||||
project_col = set_op_project(self.dbcon, data["project_id"])
|
||||
set_op_project(self.dbcon, data["project_id"])
|
||||
print("delete sequence") # TODO check bugfix
|
||||
|
||||
# Delete
|
||||
project_col.delete_one(
|
||||
self.dbcon.delete_one(
|
||||
{"type": "asset", "data.zou.id": data["sequence_id"]}
|
||||
)
|
||||
|
||||
|
|
@ -280,20 +279,20 @@ class Listener:
|
|||
def _new_shot(self, data):
|
||||
"""Create new shot into OP DB."""
|
||||
# Get project entity
|
||||
project_col = set_op_project(self.dbcon, data["project_id"])
|
||||
set_op_project(self.dbcon, data["project_id"])
|
||||
|
||||
# Get gazu entity
|
||||
shot = gazu.shot.get_shot(data["shot_id"])
|
||||
|
||||
# Insert doc in DB
|
||||
project_col.insert_one(create_op_asset(shot))
|
||||
self.dbcon.insert_one(create_op_asset(shot))
|
||||
|
||||
# Update
|
||||
self._update_shot(data)
|
||||
|
||||
def _update_shot(self, data):
|
||||
"""Update shot into OP DB."""
|
||||
project_col = set_op_project(self.dbcon, data["project_id"])
|
||||
set_op_project(self.dbcon, data["project_id"])
|
||||
project_doc = self.dbcon.find_one({"type": "project"})
|
||||
|
||||
# Get gazu entity
|
||||
|
|
@ -303,23 +302,23 @@ class Listener:
|
|||
# Query all assets of the local project
|
||||
zou_ids_and_asset_docs = {
|
||||
asset_doc["data"]["zou"]["id"]: asset_doc
|
||||
for asset_doc in project_col.find({"type": "asset"})
|
||||
for asset_doc in self.dbcon.find({"type": "asset"})
|
||||
if asset_doc["data"].get("zou", {}).get("id")
|
||||
}
|
||||
zou_ids_and_asset_docs[shot["project_id"]] = project_doc
|
||||
|
||||
# Update
|
||||
asset_doc_id, asset_update = update_op_assets(
|
||||
project_col, [shot], zou_ids_and_asset_docs
|
||||
self.dbcon, [shot], zou_ids_and_asset_docs
|
||||
)[0]
|
||||
project_col.update_one({"_id": asset_doc_id}, asset_update)
|
||||
self.dbcon.update_one({"_id": asset_doc_id}, asset_update)
|
||||
|
||||
def _delete_shot(self, data):
|
||||
"""Delete shot of OP DB."""
|
||||
project_col = set_op_project(self.dbcon, data["project_id"])
|
||||
set_op_project(self.dbcon, data["project_id"])
|
||||
|
||||
# Delete
|
||||
project_col.delete_one(
|
||||
self.dbcon.delete_one(
|
||||
{"type": "asset", "data.zou.id": data["shot_id"]}
|
||||
)
|
||||
|
||||
|
|
@ -327,13 +326,13 @@ class Listener:
|
|||
def _new_task(self, data):
|
||||
"""Create new task into OP DB."""
|
||||
# Get project entity
|
||||
project_col = set_op_project(self.dbcon, data["project_id"])
|
||||
set_op_project(self.dbcon, data["project_id"])
|
||||
|
||||
# Get gazu entity
|
||||
task = gazu.task.get_task(data["task_id"])
|
||||
|
||||
# Find asset doc
|
||||
asset_doc = project_col.find_one(
|
||||
asset_doc = self.dbcon.find_one(
|
||||
{"type": "asset", "data.zou.id": task["entity"]["id"]}
|
||||
)
|
||||
|
||||
|
|
@ -341,7 +340,7 @@ 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}
|
||||
project_col.update_one(
|
||||
self.dbcon.update_one(
|
||||
{"_id": asset_doc["_id"]}, {"$set": {"data.tasks": asset_tasks}}
|
||||
)
|
||||
|
||||
|
|
@ -352,10 +351,10 @@ class Listener:
|
|||
|
||||
def _delete_task(self, data):
|
||||
"""Delete task of OP DB."""
|
||||
project_col = set_op_project(self.dbcon, data["project_id"])
|
||||
set_op_project(self.dbcon, data["project_id"])
|
||||
|
||||
# Find asset doc
|
||||
asset_docs = [doc for doc in project_col.find({"type": "asset"})]
|
||||
asset_docs = [doc for doc in self.dbcon.find({"type": "asset"})]
|
||||
for doc in asset_docs:
|
||||
# Match task
|
||||
for name, task in doc["data"]["tasks"].items():
|
||||
|
|
@ -365,7 +364,7 @@ class Listener:
|
|||
asset_tasks.pop(name)
|
||||
|
||||
# Delete task in DB
|
||||
project_col.update_one(
|
||||
self.dbcon.update_one(
|
||||
{"_id": doc["_id"]},
|
||||
{"$set": {"data.tasks": asset_tasks}},
|
||||
)
|
||||
|
|
|
|||
|
|
@ -29,18 +29,17 @@ def create_op_asset(gazu_entity: dict) -> dict:
|
|||
}
|
||||
|
||||
|
||||
def set_op_project(dbcon, project_id) -> Collection:
|
||||
def set_op_project(dbcon: AvalonMongoDB, project_id: str):
|
||||
"""Set project context.
|
||||
|
||||
:param dbcon: Connection to DB.
|
||||
:param project_id: Project zou ID
|
||||
Args:
|
||||
dbcon (AvalonMongoDB): Connection to DB.
|
||||
project_id (str): Project zou ID
|
||||
"""
|
||||
project = gazu.project.get_project(project_id)
|
||||
project_name = project["name"]
|
||||
dbcon.Session["AVALON_PROJECT"] = project_name
|
||||
|
||||
return dbcon.database[project_name]
|
||||
|
||||
|
||||
def update_op_assets(
|
||||
project_col: Collection,
|
||||
|
|
@ -258,28 +257,25 @@ def sync_all_project(login: str, password: str):
|
|||
dbcon.install()
|
||||
all_projects = gazu.project.all_open_projects()
|
||||
for project in all_projects:
|
||||
sync_project_from_kitsu(project["name"], dbcon, project)
|
||||
sync_project_from_kitsu(dbcon, project)
|
||||
|
||||
|
||||
def sync_project_from_kitsu(
|
||||
project_name: str, dbcon: AvalonMongoDB, project: dict = None
|
||||
dbcon: AvalonMongoDB, project: dict
|
||||
):
|
||||
"""Update OP project in DB with Zou data.
|
||||
|
||||
Args:
|
||||
project_name (str): Name of project to sync
|
||||
dbcon (AvalonMongoDB): MongoDB connection
|
||||
project (dict, optional): Project dict got using gazu.
|
||||
Defaults to None.
|
||||
project (dict): Project dict got using gazu.
|
||||
"""
|
||||
bulk_writes = []
|
||||
|
||||
# Get project from zou
|
||||
if not project:
|
||||
project = gazu.project.get_project_by_name(project_name)
|
||||
project_code = project_name
|
||||
project = gazu.project.get_project_by_name(project["name"])
|
||||
|
||||
print(f"Synchronizing {project_name}...")
|
||||
print(f"Synchronizing {project['name']}...")
|
||||
|
||||
# Get all assets from zou
|
||||
all_assets = gazu.asset.all_assets_for_project(project)
|
||||
|
|
@ -292,28 +288,28 @@ def sync_project_from_kitsu(
|
|||
bulk_writes.append(write_project_to_op(project, dbcon))
|
||||
|
||||
# Try to find project document
|
||||
project_col = dbcon.database[project_code]
|
||||
project_doc = project_col.find_one({"type": "project"})
|
||||
dbcon.Session["AVALON_PROJECT"] = project["name"]
|
||||
project_doc = dbcon.find_one({"type": "project"})
|
||||
|
||||
# Query all assets of the local project
|
||||
zou_ids_and_asset_docs = {
|
||||
asset_doc["data"]["zou"]["id"]: asset_doc
|
||||
for asset_doc in project_col.find({"type": "asset"})
|
||||
for asset_doc in dbcon.find({"type": "asset"})
|
||||
if asset_doc["data"].get("zou", {}).get("id")
|
||||
}
|
||||
zou_ids_and_asset_docs[project["id"]] = project_doc
|
||||
|
||||
# Create entities root folders
|
||||
project_module_settings = get_project_settings(project_name)["kitsu"]
|
||||
project_module_settings = get_project_settings(project["name"])["kitsu"]
|
||||
for entity_type, root in project_module_settings["entities_root"].items():
|
||||
parent_folders = root.split("/")
|
||||
direct_parent_doc = None
|
||||
for i, folder in enumerate(parent_folders, 1):
|
||||
parent_doc = project_col.find_one(
|
||||
parent_doc = dbcon.find_one(
|
||||
{"type": "asset", "name": folder, "data.root_of": entity_type}
|
||||
)
|
||||
if not parent_doc:
|
||||
direct_parent_doc = project_col.insert_one(
|
||||
direct_parent_doc = dbcon.insert_one(
|
||||
{
|
||||
"name": folder,
|
||||
"type": "asset",
|
||||
|
|
@ -338,13 +334,13 @@ def sync_project_from_kitsu(
|
|||
)
|
||||
if to_insert:
|
||||
# Insert doc in DB
|
||||
project_col.insert_many(to_insert)
|
||||
dbcon.insert_many(to_insert)
|
||||
|
||||
# Update existing docs
|
||||
zou_ids_and_asset_docs.update(
|
||||
{
|
||||
asset_doc["data"]["zou"]["id"]: asset_doc
|
||||
for asset_doc in project_col.find({"type": "asset"})
|
||||
for asset_doc in dbcon.find({"type": "asset"})
|
||||
if asset_doc["data"].get("zou")
|
||||
}
|
||||
)
|
||||
|
|
@ -354,7 +350,7 @@ def sync_project_from_kitsu(
|
|||
[
|
||||
UpdateOne({"_id": id}, update)
|
||||
for id, update in update_op_assets(
|
||||
project_col, all_entities, zou_ids_and_asset_docs
|
||||
dbcon, all_entities, zou_ids_and_asset_docs
|
||||
)
|
||||
]
|
||||
)
|
||||
|
|
@ -373,4 +369,4 @@ def sync_project_from_kitsu(
|
|||
|
||||
# Write into DB
|
||||
if bulk_writes:
|
||||
project_col.bulk_write(bulk_writes)
|
||||
dbcon.bulk_write(bulk_writes)
|
||||
|
|
|
|||
|
|
@ -93,10 +93,10 @@ def sync_zou_from_op_project(
|
|||
|
||||
# Query all assets of the local project
|
||||
project_module_settings = get_project_settings(project_name)["kitsu"]
|
||||
project_col = dbcon.database[project_name]
|
||||
dbcon.Session["AVALON_PROJECT"] = project_name
|
||||
asset_docs = {
|
||||
asset_doc["_id"]: asset_doc
|
||||
for asset_doc in project_col.find({"type": "asset"})
|
||||
for asset_doc in dbcon.find({"type": "asset"})
|
||||
}
|
||||
|
||||
# Create new assets
|
||||
|
|
@ -259,4 +259,4 @@ def sync_zou_from_op_project(
|
|||
|
||||
# Write into DB
|
||||
if bulk_writes:
|
||||
project_col.bulk_write(bulk_writes)
|
||||
dbcon.bulk_write(bulk_writes)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue