Skip to content

Commit

Permalink
Updated loader and register modules
Browse files Browse the repository at this point in the history
  • Loading branch information
tpoveda committed Jun 5, 2020
1 parent 4a56730 commit a761e26
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 77 deletions.
96 changes: 27 additions & 69 deletions artellapipe/launcher/loader.py
Expand Up @@ -13,22 +13,31 @@
__email__ = "tpovedatd@gmail.com"

import os
import inspect
import logging.config

import tpDcc as tp

# =================================================================================

def init(do_reload=False, dev=False):
PACKAGE = 'artellapipe.launcher'

# =================================================================================


def init(dev=False):
"""
Initializes module
:param do_reload: bool, Whether to reload modules or not
:param dev: bool, Whether artellapipe-launcher is initialized in dev mode or not
"""

from tpDcc.libs.python import importer
from artellapipe.launcher import register

logger = create_logger()
if dev:
register.cleanup()

logger = create_logger(dev=dev)

register.register_class('logger', logger)

if not dev:
Expand All @@ -38,82 +47,31 @@ def init(do_reload=False, dev=False):
except RuntimeError:
sentry_sdk.init("https://c329025c8d5a4e978dd7a4117ab6281d@sentry.io/1770788", default_integrations=False)

class ArtellaLauncher(importer.Importer, object):
def __init__(self, debug=False):
super(ArtellaLauncher, self).__init__(module_name='artellapipe.launcher', debug=debug)

def get_module_path(self):
"""
Returns path where tpNameIt module is stored
:return: str
"""

try:
mod_dir = os.path.dirname(inspect.getframeinfo(inspect.currentframe()).filename)
except Exception:
try:
mod_dir = os.path.dirname(__file__)
except Exception:
try:
import artellapipe.launcher
mod_dir = artellapipe.launcher.__path__[0]
except Exception:
return None

return mod_dir

packages_order = []

launcher_importer = importer.init_importer(importer_class=ArtellaLauncher, do_reload=False, debug=dev)
launcher_importer.import_packages(order=packages_order, only_packages=False)
if do_reload:
launcher_importer.reload_all()
skip_modules = ['{}.{}'.format(PACKAGE, name) for name in ['loader']]
importer.init_importer(package=PACKAGE, skip_modules=skip_modules)

register_resources()


def create_logger():
def create_logger(dev=False):
"""
Returns logger of current module
"""

logging.config.fileConfig(get_logging_config(), disable_existing_loggers=False)
logger = logging.getLogger('artellapipe-launcher')

return logger


def create_logger_directory():
"""
Creates artellapipe logger directory
"""

artellapipe_logger_dir = os.path.normpath(os.path.join(os.path.expanduser('~'), 'artellapipe', 'logs'))
if not os.path.isdir(artellapipe_logger_dir):
os.makedirs(artellapipe_logger_dir)


def get_logging_config():
"""
Returns logging configuration file path
:return: str
"""

create_logger_directory()
logger_directory = os.path.normpath(os.path.join(os.path.expanduser('~'), 'artellapipe', 'logs'))
if not os.path.isdir(logger_directory):
os.makedirs(logger_directory)

return os.path.normpath(os.path.join(os.path.dirname(__file__), '__logging__.ini'))
logging_config = os.path.normpath(os.path.join(os.path.dirname(__file__), '__logging__.ini'))

logging.config.fileConfig(logging_config, disable_existing_loggers=False)
logger = logging.getLogger('artellapipe-launcher')
if dev:
logger.setLevel(logging.DEBUG)
for handler in logger.handlers:
handler.setLevel(logging.DEBUG)

def get_logging_level():
"""
Returns logging level to use
:return: str
"""

if os.environ.get('ARTELLAPIPE_LAUNCHER_LOG_LEVEL', None):
return os.environ.get('ARTELLAPIPE_LAUNCHER_LOG_LEVEL')

return os.environ.get('ARTELLAPIPE_LAUNCHER_LOG_LEVEL', 'DEBUG')
return logger


def register_resources():
Expand Down
41 changes: 33 additions & 8 deletions artellapipe/launcher/register.py
Expand Up @@ -12,19 +12,44 @@
__maintainer__ = "Tomas Poveda"
__email__ = "tpovedatd@gmail.com"

import artellapipe.launcher

def register_class(cls_name, cls, is_unique=False):
# =================================================================================

REGISTER_ATTR = '_registered_classes'

# =================================================================================


def register_class(cls_name, cls, is_unique=True, skip_store=False):
"""
This function registers given class
This function registers given class into tpDcc module
:param cls_name: str, name of the class we want to register
:param cls: class, class we want to register
:param is_unique: bool, Whether if the class should be updated if new class is registered with the same name
:param skip_store: bool, Whether the registered class should be removed during cleanup operation
Useful in scenarios where we want to cleanup registered class manually.
"""

import artellapipe.launcher
if REGISTER_ATTR not in artellapipe.launcher.__dict__:
artellapipe.launcher.__dict__[REGISTER_ATTR] = list()

if not is_unique and cls_name in artellapipe.launcher.__dict__:
return

artellapipe.launcher.__dict__[cls_name] = cls
if not skip_store:
artellapipe.launcher.__dict__[REGISTER_ATTR].append(cls_name)


def cleanup():

if REGISTER_ATTR not in artellapipe.launcher.__dict__:
return

if is_unique:
if cls_name in artellapipe.launcher.__dict__:
setattr(artellapipe.launcher.__dict__, cls_name, getattr(artellapipe.launcher.__dict__, cls_name))
else:
artellapipe.launcher.__dict__[cls_name] = cls
for cls_name in artellapipe.launcher.__dict__[REGISTER_ATTR]:
if cls_name not in artellapipe.launcher.__dict__:
continue
# print('Deleting: {}'.format(cls_name))
del artellapipe.launcher.__dict__[cls_name]
del artellapipe.launcher.__dict__[REGISTER_ATTR]

0 comments on commit a761e26

Please sign in to comment.