diff --git a/openpype/client/__init__.py b/openpype/client/__init__.py index e4c01fc0cc..2ba2a3693e 100644 --- a/openpype/client/__init__.py +++ b/openpype/client/__init__.py @@ -2,7 +2,8 @@ from .entities import ( get_projects, get_project, - get_asset, + get_asset_by_id, + get_asset_by_name, get_assets, get_asset_ids_with_subsets, @@ -33,7 +34,8 @@ __all__ = ( "get_projects", "get_project", - "get_asset", + "get_asset_by_id", + "get_asset_by_name", "get_assets", "get_asset_ids_with_subsets", @@ -56,6 +58,6 @@ __all__ = ( "get_representation_parents", "get_representations_parents", - "get_thubmnail", + "get_thumbnail", "get_thumbnail_id_from_source", ) diff --git a/openpype/client/entities.py b/openpype/client/entities.py index e9b820dd1a..97553f30fe 100644 --- a/openpype/client/entities.py +++ b/openpype/client/entities.py @@ -90,23 +90,44 @@ def get_project(project_name, active=True, inactive=False, fields=None): return conn.find_one(query_filter, _prepare_fields(fields)) -def get_asset(project_name, asset_name=None, asset_id=None, fields=None): - query_filter = {"type": "asset"} - has_filter = False - if asset_name: - has_filter = True - query_filter["name"] = asset_name +def get_asset_by_id(project_name, asset_id, fields=None): + """Receive asset data by it's id. - if asset_id: - has_filter = True - query_filter["_id"] = _convert_id(asset_id) + Args: + project_name (str): Name of project where to look for subset. + asset_id (str|ObjectId): Asset's id. - # Avoid random asset quqery - if not has_filter: + Returns: + dict: Asset entity data. + None: Asset was not found by id. + """ + + asset_id = _convert_id(asset_id) + if not asset_id: return None + query_filter = {"type": "asset", "_id": asset_id} conn = _get_project_connection(project_name) + return conn.find_one(query_filter, _prepare_fields(fields)) + +def get_asset_by_name(project_name, asset_name, fields=None): + """Receive asset data by it's name. + + Args: + project_name (str): Name of project where to look for subset. + asset_name (str): Asset's name. + + Returns: + dict: Asset entity data. + None: Asset was not found by name. + """ + + if not asset_name: + return None + + query_filter = {"type": "asset", "name": asset_name} + conn = _get_project_connection(project_name) return conn.find_one(query_filter, _prepare_fields(fields)) diff --git a/openpype/tools/creator/window.py b/openpype/tools/creator/window.py index a85f47a060..a3937d6a40 100644 --- a/openpype/tools/creator/window.py +++ b/openpype/tools/creator/window.py @@ -4,7 +4,7 @@ import re from Qt import QtWidgets, QtCore -from openpype.client import get_asset, get_subsets +from openpype.client import get_asset_by_name, get_subsets from openpype import style from openpype.api import get_current_project_settings from openpype.tools.utils.lib import qt_app_context @@ -220,8 +220,8 @@ class CreatorWindow(QtWidgets.QDialog): asset_doc = None if creator_plugin: # Get the asset from the database which match with the name - asset_doc = get_asset( - project_name, asset_name=asset_name, fields=["_id"] + asset_doc = get_asset_by_name( + project_name, asset_name, fields=["_id"] ) # Get plugin diff --git a/openpype/tools/mayalookassigner/commands.py b/openpype/tools/mayalookassigner/commands.py index a4fc1fab70..2e7a51efde 100644 --- a/openpype/tools/mayalookassigner/commands.py +++ b/openpype/tools/mayalookassigner/commands.py @@ -4,7 +4,7 @@ import os import maya.cmds as cmds -from openpype.client import get_asset +from openpype.client import get_asset_by_id from openpype.pipeline import ( legacy_io, remove_container, @@ -161,7 +161,7 @@ def create_items_from_nodes(nodes): project_name = legacy_io.active_project() for _id, id_nodes in id_hashes.items(): - asset = get_asset(project_name, asset_id=_id, fields=["name"]) + asset = get_asset_by_id(project_name, _id, fields=["name"]) # Skip if asset id is not found if not asset: diff --git a/openpype/tools/publisher/widgets/create_dialog.py b/openpype/tools/publisher/widgets/create_dialog.py index d579831b21..53bbef8b75 100644 --- a/openpype/tools/publisher/widgets/create_dialog.py +++ b/openpype/tools/publisher/widgets/create_dialog.py @@ -10,7 +10,7 @@ except Exception: commonmark = None from Qt import QtWidgets, QtCore, QtGui -from openpype.client import get_asset, get_subsets +from openpype.client import get_asset_by_name, get_subsets from openpype.lib import TaskNotSetError from openpype.pipeline.create import ( CreatorError, @@ -650,7 +650,7 @@ class CreateDialog(QtWidgets.QDialog): return project_name = self.dbcon.active_project() - asset_doc = get_asset(project_name, asset_name=asset_name) + asset_doc = get_asset_by_name(project_name, asset_name) self._asset_doc = asset_doc if asset_doc: diff --git a/openpype/tools/sceneinventory/model.py b/openpype/tools/sceneinventory/model.py index 9cf69ed650..6d813af45b 100644 --- a/openpype/tools/sceneinventory/model.py +++ b/openpype/tools/sceneinventory/model.py @@ -7,7 +7,7 @@ from Qt import QtCore, QtGui import qtawesome from openpype.client import ( - get_asset, + get_asset_by_id, get_subset, get_version, get_last_version_for_subset, @@ -342,7 +342,7 @@ class InventoryModel(TreeModel): not_found_ids.append(repre_id) continue - asset = get_asset(project_name, asset_id=subset["parent"]) + asset = get_asset_by_id(project_name, subset["parent"]) if not asset: not_found["asset"].append(group_items) not_found_ids.append(repre_id) diff --git a/openpype/tools/sceneinventory/switch_dialog.py b/openpype/tools/sceneinventory/switch_dialog.py index b940c66a56..6d6294af6f 100644 --- a/openpype/tools/sceneinventory/switch_dialog.py +++ b/openpype/tools/sceneinventory/switch_dialog.py @@ -5,7 +5,7 @@ import qtawesome from bson.objectid import ObjectId from openpype.client import ( - get_asset, + get_asset_by_name, get_assets, get_subset, get_subsets, @@ -484,9 +484,9 @@ class SwitchAssetDialog(QtWidgets.QDialog): # Prepare asset document if asset is selected asset_doc = None if selected_asset: - asset_doc = get_asset( + asset_doc = get_asset_by_name( self.active_project(), - asset_name=selected_asset, + selected_asset, fields=["_id"] ) if not asset_doc: @@ -768,8 +768,8 @@ class SwitchAssetDialog(QtWidgets.QDialog): project_name = self.active_project() selected_asset = self._assets_box.get_valid_value() if selected_asset: - asset_doc = get_asset( - project_name, asset_name=selected_asset, fields=["_id"] + asset_doc = get_asset_by_name( + project_name, selected_asset, fields=["_id"] ) asset_ids = [asset_doc["_id"]] else: @@ -832,8 +832,8 @@ class SwitchAssetDialog(QtWidgets.QDialog): # [x] [x] [?] if selected_asset and selected_subset: - asset_doc = get_asset( - project_name, asset_name=selected_asset, fields=["_id"] + asset_doc = get_asset_by_name( + project_name, selected_asset, fields=["_id"] ) subset_doc = get_subset( project_name, @@ -858,8 +858,8 @@ class SwitchAssetDialog(QtWidgets.QDialog): # [x] [ ] [?] # If asset only is selected if selected_asset: - asset_doc = get_asset( - project_name, asset_name=selected_asset, fields=["_id"] + asset_doc = get_asset_by_name( + project_name, selected_asset, fields=["_id"] ) if not asset_doc: return list() @@ -995,8 +995,8 @@ class SwitchAssetDialog(QtWidgets.QDialog): # [x] [ ] [?] project_name = self.active_project() - asset_doc = get_asset( - project_name, asset_name=selected_asset, fields=["_id"] + asset_doc = get_asset_by_name( + project_name, selected_asset, fields=["_id"] ) subset_docs = get_subsets( project_name, asset_ids=[asset_doc["_id"]], fields=["name"] @@ -1043,8 +1043,8 @@ class SwitchAssetDialog(QtWidgets.QDialog): # [x] [x] [ ] project_name = self.active_project() if selected_asset is not None and selected_subset is not None: - asset_doc = get_asset( - project_name, asset_name=selected_asset, fields=["_id"] + asset_doc = get_asset_by_name( + project_name, selected_asset, fields=["_id"] ) subset_doc = get_subset( project_name, @@ -1077,8 +1077,8 @@ class SwitchAssetDialog(QtWidgets.QDialog): # [x] [ ] [ ] if selected_asset is not None: - asset_doc = get_asset( - project_name, asset_name=selected_asset, fields=["_id"] + asset_doc = get_asset_by_name( + project_name, selected_asset, fields=["_id"] ) subset_docs = list(get_subsets( project_name, @@ -1189,7 +1189,7 @@ class SwitchAssetDialog(QtWidgets.QDialog): project_name = self.active_project() if selected_asset: - asset_doc = get_asset(project_name, asset_name=selected_asset) + asset_doc = get_asset_by_name(project_name, selected_asset) asset_docs_by_id = {asset_doc["_id"]: asset_doc} else: asset_docs_by_id = self.content_assets diff --git a/openpype/tools/sceneinventory/view.py b/openpype/tools/sceneinventory/view.py index 6a95ccb57b..04e0f67a15 100644 --- a/openpype/tools/sceneinventory/view.py +++ b/openpype/tools/sceneinventory/view.py @@ -657,11 +657,9 @@ class SceneInventoryView(QtWidgets.QTreeView): project_name = legacy_io.active_project() # Get available versions for active representation - representation_id = ObjectId(active["representation"]) - repre_doc = get_representation( project_name, - representation_id=representation_id, + representation_id=active["representation"], fields=["parent"] ) diff --git a/openpype/tools/standalonepublish/app.py b/openpype/tools/standalonepublish/app.py index 4831db038c..3ceeb3ad48 100644 --- a/openpype/tools/standalonepublish/app.py +++ b/openpype/tools/standalonepublish/app.py @@ -6,7 +6,7 @@ import signal from bson.objectid import ObjectId from Qt import QtWidgets, QtCore, QtGui -from openpype.client import get_asset +from openpype.client import get_asset_by_id from .widgets import ( AssetWidget, FamilyWidget, ComponentsWidget, ShadowWidget @@ -144,8 +144,8 @@ class Window(QtWidgets.QDialog): if len(selected) == 1: self.valid_parent = True project_name = self.db.active_project() - asset = get_asset( - project_name, asset_id=selected[0], fields=["name"] + asset = get_asset_by_id( + project_name, selected[0], fields=["name"] ) self.widget_family.change_asset(asset['name']) else: diff --git a/openpype/tools/standalonepublish/widgets/widget_asset.py b/openpype/tools/standalonepublish/widgets/widget_asset.py index 0b5802ed9e..73114f7960 100644 --- a/openpype/tools/standalonepublish/widgets/widget_asset.py +++ b/openpype/tools/standalonepublish/widgets/widget_asset.py @@ -4,7 +4,7 @@ import qtawesome from openpype.client import ( get_project, - get_asset, + get_asset_by_id, ) from openpype.tools.utils import PlaceholderLineEdit @@ -251,9 +251,9 @@ class AssetWidget(QtWidgets.QWidget): return output project_name = self.dbcon.active_project() - parent = get_asset( + parent = get_asset_by_id( project_name, - asset_id=parent_asset_id, + parent_asset_id, fields=["name", "data.visualParent"] ) output.append(parent['name']) @@ -362,8 +362,8 @@ class AssetWidget(QtWidgets.QWidget): selected = self.get_selected_assets() if len(selected) == 1: project_name = self.dbcon.active_project() - asset = get_asset( - project_name, asset_id=selected[0], fields=["data.tasks"] + asset = get_asset_by_id( + project_name, selected[0], fields=["data.tasks"] ) if asset: tasks = asset.get('data', {}).get('tasks', []) diff --git a/openpype/tools/standalonepublish/widgets/widget_family.py b/openpype/tools/standalonepublish/widgets/widget_family.py index ed9f405f38..fa157d37f1 100644 --- a/openpype/tools/standalonepublish/widgets/widget_family.py +++ b/openpype/tools/standalonepublish/widgets/widget_family.py @@ -3,7 +3,7 @@ import re from Qt import QtWidgets, QtCore from openpype.client import ( - get_asset, + get_asset_by_name, get_subset, get_subsets, get_last_version_for_subset, @@ -188,8 +188,8 @@ class FamilyWidget(QtWidgets.QWidget): if asset_name != self.NOT_SELECTED: # Get the assets from the database which match with the name project_name = self.dbcon.active_project() - asset_doc = get_asset( - project_name, asset_name=asset_name, fields=["_id"] + asset_doc = get_asset_by_name( + project_name, asset_name, fields=["_id"] ) # Get plugin and family @@ -205,8 +205,8 @@ class FamilyWidget(QtWidgets.QWidget): # Get the asset from the database which match with the name project_name = self.dbcon.active_project() - asset_doc = get_asset( - project_name, asset_name=asset_name, fields=["_id"] + asset_doc = get_asset_by_name( + project_name, asset_name, fields=["_id"] ) # Get plugin plugin = item.data(PluginRole) @@ -310,8 +310,8 @@ class FamilyWidget(QtWidgets.QWidget): asset_name != self.NOT_SELECTED and subset_name.strip() != '' ): - asset_doc = get_asset( - project_name, asset_name=asset_name, fields=["_id"] + asset_doc = get_asset_by_name( + project_name, asset_name, fields=["_id"] ) if asset_doc: diff --git a/openpype/tools/texture_copy/app.py b/openpype/tools/texture_copy/app.py index 8703f075d3..746a72b3ec 100644 --- a/openpype/tools/texture_copy/app.py +++ b/openpype/tools/texture_copy/app.py @@ -4,7 +4,7 @@ import click import speedcopy -from openpype.client import get_project, get_asset +from openpype.client import get_project, get_asset_by_name from openpype.lib import Terminal from openpype.api import Anatomy from openpype.pipeline import legacy_io @@ -94,7 +94,7 @@ class TextureCopy: t.echo("!!! Project name [ {} ] not found.".format(project_name)) exit(1) - asset = get_asset(project_name, asset_name=asset_name) + asset = get_asset_by_name(project_name, asset_name) if not asset: t.echo("!!! Asset [ {} ] not found in project".format(asset_name)) exit(1) diff --git a/openpype/tools/utils/lib.py b/openpype/tools/utils/lib.py index 72ebfcc063..ea1362945f 100644 --- a/openpype/tools/utils/lib.py +++ b/openpype/tools/utils/lib.py @@ -8,7 +8,7 @@ import qtawesome from openpype.client import ( get_project, - get_asset, + get_asset_by_name, ) from openpype.style import ( get_default_entity_icon_color, @@ -434,8 +434,8 @@ class FamilyConfigCache: database = getattr(self.dbcon, "database", None) if database is None: database = self.dbcon._database - asset_doc = get_asset( - project_name, asset_name=asset_name, fields=["data.tasks"] + asset_doc = get_asset_by_name( + project_name, asset_name, fields=["data.tasks"] ) or {} tasks_info = asset_doc.get("data", {}).get("tasks") or {} task_type = tasks_info.get(task_name, {}).get("type") diff --git a/openpype/tools/utils/tasks_widget.py b/openpype/tools/utils/tasks_widget.py index fcbec318f5..0353f3dd2f 100644 --- a/openpype/tools/utils/tasks_widget.py +++ b/openpype/tools/utils/tasks_widget.py @@ -3,7 +3,7 @@ import qtawesome from openpype.client import ( get_project, - get_asset, + get_asset_by_id, ) from openpype.style import get_disabled_entity_icon_color from openpype.tools.utils.lib import get_task_icon @@ -77,8 +77,8 @@ class TasksModel(QtGui.QStandardItemModel): asset_doc = None if self._context_is_valid(): project_name = self._get_current_project() - asset_doc = get_asset( - project_name, asset_id=asset_id, fields=["data.tasks"] + asset_doc = get_asset_by_id( + project_name, asset_id, fields=["data.tasks"] ) self._set_asset(asset_doc) diff --git a/openpype/tools/workfiles/files_widget.py b/openpype/tools/workfiles/files_widget.py index 36b9a055d8..68fe8301c9 100644 --- a/openpype/tools/workfiles/files_widget.py +++ b/openpype/tools/workfiles/files_widget.py @@ -5,7 +5,7 @@ import shutil import Qt from Qt import QtWidgets, QtCore -from openpype.client import get_asset +from openpype.client import get_asset_by_id from openpype.tools.utils import PlaceholderLineEdit from openpype.tools.utils.delegates import PrettyTimeDelegate from openpype.lib import ( @@ -386,7 +386,7 @@ class FilesWidget(QtWidgets.QWidget): if self._asset_doc is None: project_name = legacy_io.active_project() - self._asset_doc = get_asset(project_name, asset_id=self._asset_id) + self._asset_doc = get_asset_by_id(project_name, self._asset_id) return self._asset_doc diff --git a/openpype/tools/workfiles/save_as_dialog.py b/openpype/tools/workfiles/save_as_dialog.py index 1fbcbfeb22..b62fd2c889 100644 --- a/openpype/tools/workfiles/save_as_dialog.py +++ b/openpype/tools/workfiles/save_as_dialog.py @@ -7,7 +7,7 @@ from Qt import QtWidgets, QtCore from openpype.client import ( get_project, - get_asset, + get_asset_by_name, ) from openpype.lib import ( get_last_workfile_with_version, @@ -33,9 +33,9 @@ def build_workfile_data(session): project_doc = get_project( project_name, fields=["name", "data.code", "config.tasks"] ) - asset_doc = get_asset( + asset_doc = get_asset_by_name( project_name, - asset_name=asset_name, + asset_name, fields=["name", "data.tasks", "data.parents"] ) diff --git a/openpype/tools/workfiles/window.py b/openpype/tools/workfiles/window.py index 45d8d41d16..9f4cea2f8a 100644 --- a/openpype/tools/workfiles/window.py +++ b/openpype/tools/workfiles/window.py @@ -2,7 +2,7 @@ import os import datetime from Qt import QtCore, QtWidgets -from openpype.client import get_asset +from openpype.client import get_asset_by_id, get_asset_by_name from openpype import style from openpype.lib import ( get_workfile_doc, @@ -302,7 +302,7 @@ class Window(QtWidgets.QMainWindow): workdir, filename = os.path.split(filepath) asset_id = self.assets_widget.get_selected_asset_id() project_name = legacy_io.active_project() - asset_doc = get_asset(project_name, asset_id=asset_id) + asset_doc = get_asset_by_id(project_name, asset_id) task_name = self.tasks_widget.get_selected_task_name() create_workfile_doc( asset_doc, task_name, filename, workdir, legacy_io @@ -328,7 +328,7 @@ class Window(QtWidgets.QMainWindow): self._context_to_set, context = None, self._context_to_set if "asset" in context: - asset_doc = get_asset( + asset_doc = get_asset_by_name( self.project_name, context["asset"], fields=["_id"] )