diff --git a/pype/api.py b/pype/api.py index 08b886d59c..5a7da7f8a6 100644 --- a/pype/api.py +++ b/pype/api.py @@ -18,20 +18,14 @@ from .action import ( from pypeapp import Logger - -from .templates import ( - get_hierarchy, - get_asset, - set_avalon_workdir, - get_workdir_template -) - from .lib import ( version_up, get_handle_irregular, + get_asset, + get_asset_data, get_project, get_project_data, - get_asset_data, + get_hierarchy, get_version_from_path, modified_environ, add_tool_to_environment, @@ -61,9 +55,7 @@ __all__ = [ "get_project", "get_hierarchy", "get_asset", - "set_avalon_workdir", - "get_version_from_path", - "get_workdir_template", + "get_version_from_path" "modified_environ", "add_tool_to_environment", "get_data_hierarchical_attr" diff --git a/pype/aport/__init__.py b/pype/aport/__init__.py index 00e14924f0..b4d9e68028 100644 --- a/pype/aport/__init__.py +++ b/pype/aport/__init__.py @@ -6,6 +6,7 @@ from pyblish import api as pyblish from pypeapp import execute, Logger from .. import api +from .lib import set_avalon_workdir log = Logger().get_logger(__name__, "aport") @@ -33,7 +34,7 @@ INVENTORY_PATH = os.path.join(PLUGINS_DIR, "aport", "inventory") def install(): - api.set_avalon_workdir() + set_avalon_workdir() log.info("Registering Aport plug-ins..") pyblish.register_plugin_path(PUBLISH_PATH) diff --git a/pype/templates.py b/pype/aport/lib.py similarity index 68% rename from pype/templates.py rename to pype/aport/lib.py index 3900d2f462..62b81db88a 100644 --- a/pype/templates.py +++ b/pype/aport/lib.py @@ -2,21 +2,13 @@ import os import re import sys from avalon import io, api as avalon, lib as avalonlib -from . import lib +from pype import lib +from pype import api as pype # from pypeapp.api import (Templates, Logger, format) from pypeapp import Logger, Anatomy log = Logger().get_logger(__name__, os.getenv("AVALON_APP", "pype-config")) -self = sys.modules[__name__] -self.SESSION = None - - -def set_session(): - lib.set_io_database() - self.SESSION = avalon.session - - def get_asset(): """ Obtain Asset string from session or environment variable @@ -27,9 +19,8 @@ def get_asset(): Raises: log: error """ - if self.SESSION is None: - set_session() - asset = self.SESSION.get("AVALON_ASSET", None) \ + lib.set_io_database() + asset = io.Session.get("AVALON_ASSET", None) \ or os.getenv("AVALON_ASSET", None) log.info("asset: {}".format(asset)) assert asset, log.error("missing `AVALON_ASSET`" @@ -38,26 +29,6 @@ def get_asset(): return asset -def get_hierarchy(): - """ - Obtain asset hierarchy path string from mongo db - - Returns: - string: asset hierarchy path - - """ - parents = io.find_one({ - "type": 'asset', - "name": get_asset()} - )['data']['parents'] - - hierarchy = "" - if parents and len(parents) > 0: - # hierarchy = os.path.sep.join(hierarchy) - hierarchy = os.path.join(*parents).replace("\\", "/") - return hierarchy - - def get_context_data( project_name=None, hierarchy=None, asset=None, task_name=None ): @@ -75,19 +46,23 @@ def get_context_data( """ if not task_name: - if self.SESSION is None: - set_session() - task_name = self.SESSION.get("AVALON_TASK", None) \ + lib.set_io_database() + task_name = io.Session.get("AVALON_TASK", None) \ or os.getenv("AVALON_TASK", None) assert task_name, log.error( "missing `AVALON_TASK` in avalon session or os.environ!" ) + application = avalonlib.get_application(os.environ["AVALON_APP_NAME"]) os.environ['AVALON_PROJECT'] = project_name io.Session['AVALON_PROJECT'] = project_name + if not hierarchy: + hierarchy = pype.get_hierarchy() + project_doc = io.find_one({"type": "project"}) + data = { "task": task_name, "asset": asset or get_asset(), @@ -95,16 +70,15 @@ def get_context_data( "name": project_doc["name"], "code": project_doc["data"].get("code", '') }, - "hierarchy": hierarchy or get_hierarchy(), + "hierarchy": hierarchy, "app": application["application_dir"] } return data -def set_avalon_workdir(project=None, - hierarchy=None, - asset=None, - task=None): +def set_avalon_workdir( + project=None, hierarchy=None, asset=None, task=None +): """ Updates os.environ and session with filled workdir @@ -119,20 +93,20 @@ def set_avalon_workdir(project=None, avalon.session[AVALON_WORKDIR]: workdir path """ - if self.SESSION is None: - set_session() - awd = self.SESSION.get("AVALON_WORKDIR", None) or \ + lib.set_io_database() + awd = io.Session.get("AVALON_WORKDIR", None) or \ os.getenv("AVALON_WORKDIR", None) data = get_context_data(project, hierarchy, asset, task) if (not awd) or ("{" not in awd): - awd = get_workdir_template(data) + anatomy_filled = Anatomy(io.Session["AVALON_PROJECT"]).format(data) + awd = anatomy_filled["work"]["folder"] awd_filled = os.path.normpath(format(awd, data)) - self.SESSION["AVALON_WORKDIR"] = awd_filled + io.Session["AVALON_WORKDIR"] = awd_filled os.environ["AVALON_WORKDIR"] = awd_filled log.info("`AVALON_WORKDIR` fixed to: {}".format(awd_filled)) @@ -154,7 +128,8 @@ def get_workdir_template(data=None): try: work = anatomy_filled["work"] except Exception as e: - log.error("{0} Error in " - "get_workdir_template(): {1}".format(__name__, e)) + log.error( + "{0} Error in get_workdir_template(): {1}".format(__name__, str(e)) + ) - return work["folder"] + return work diff --git a/pype/lib.py b/pype/lib.py index 94aef3f142..0987a2b8d3 100644 --- a/pype/lib.py +++ b/pype/lib.py @@ -22,6 +22,26 @@ def get_handle_irregular(asset): return (handle_start, handle_end) +def get_hierarchy(): + """ + Obtain asset hierarchy path string from mongo db + + Returns: + string: asset hierarchy path + + """ + parents = io.find_one({ + "type": 'asset', + "name": get_asset()} + )['data']['parents'] + + hierarchy = "" + if parents and len(parents) > 0: + # hierarchy = os.path.sep.join(hierarchy) + hierarchy = os.path.join(*parents).replace("\\", "/") + return hierarchy + + def add_tool_to_environment(tools): """ It is adding dynamic environment to os environment. diff --git a/pype/plugins/launcher/actions/Aport.py b/pype/plugins/launcher/actions/Aport.py index 3773b90256..94f14cd0d3 100644 --- a/pype/plugins/launcher/actions/Aport.py +++ b/pype/plugins/launcher/actions/Aport.py @@ -6,10 +6,9 @@ import acre from avalon import api, lib import pype.api as pype +from pype.aport import lib as aportlib -from pype.api import Logger - -log = Logger().get_logger(__name__, "aport") +log = pype.Logger().get_logger(__name__, "aport") class Aport(api.Action): @@ -50,15 +49,16 @@ class Aport(api.Action): env = acre.merge(env, current_env=dict(os.environ)) if not env.get('AVALON_WORKDIR', None): - os.environ["AVALON_WORKDIR"] = pype.get_workdir_template() + os.environ["AVALON_WORKDIR"] = aportlib.get_workdir_template() env.update(dict(os.environ)) try: - lib.launch(executable=executable, - args=arguments, - environment=env - ) + lib.launch( + executable=executable, + args=arguments, + environment=env + ) except Exception as e: log.error(e) return diff --git a/pype/plugins/launcher/actions/unused/PremierePro.py b/pype/plugins/launcher/actions/unused/PremierePro.py index 7d94db4044..97d693ffbb 100644 --- a/pype/plugins/launcher/actions/unused/PremierePro.py +++ b/pype/plugins/launcher/actions/unused/PremierePro.py @@ -3,7 +3,7 @@ import sys from pprint import pprint import acre -from avalon import api, lib +from avalon import api, lib, io import pype.api as pype @@ -44,12 +44,42 @@ class PremierePro(api.Action): env = acre.merge(env, current_env=dict(os.environ)) if not env.get('AVALON_WORKDIR', None): - os.environ["AVALON_WORKDIR"] = pype.get_workdir_template() + project_name = env.get("AVALON_PROJECT") + anatomy = Anatomy(project_name) + os.environ['AVALON_PROJECT'] = project_name + io.Session['AVALON_PROJECT'] = project_name + + task_name = os.environ.get( + "AVALON_TASK", io.Session["AVALON_TASK"] + ) + asset_name = os.environ.get( + "AVALON_ASSET", io.Session["AVALON_ASSET"] + ) + application = lib.get_application( + os.environ["AVALON_APP_NAME"] + ) + + project_doc = io.find_one({"type": "project"}) + data = { + "task": task_name, + "asset": asset_name, + "project": { + "name": project_doc["name"], + "code": project_doc["data"].get("code", '') + }, + "hierarchy": pype.get_hierarchy(), + "app": application["application_dir"] + } + anatomy_filled = anatomy.format(data) + workdir = anatomy_filled["work"]["folder"] + + os.environ["AVALON_WORKDIR"] = workdir env.update(dict(os.environ)) - lib.launch(executable=executable, - args=arguments, - environment=env - ) + lib.launch( + executable=executable, + args=arguments, + environment=env + ) return diff --git a/pype/premiere/__init__.py b/pype/premiere/__init__.py index a331ef6514..05dca3d277 100644 --- a/pype/premiere/__init__.py +++ b/pype/premiere/__init__.py @@ -6,6 +6,7 @@ from avalon import api as avalon from pyblish import api as pyblish from pypeapp import Logger from .. import api +from pype.aport.lib import set_avalon_workdir from ..widgets.message_window import message @@ -75,7 +76,7 @@ def extensions_sync(): def install(): - api.set_avalon_workdir() + set_avalon_workdir() log.info("Registering Premiera plug-ins..") reg_paths = request_aport("/api/register_plugin_path",