From 8085efeb992d07d5ab201b1f552110e0e7d4e220 Mon Sep 17 00:00:00 2001 From: Yann Date: Wed, 2 Nov 2016 16:24:22 +0100 Subject: [PATCH] Replaced all lodel subthings import by LodelContext.expose_modules calls Test passes --- lodel/auth/client.py | 16 ++++++++----- lodel/auth/exceptions.py | 7 ++++-- lodel/editorial_model/components.py | 11 +++++---- lodel/editorial_model/model.py | 14 ++++++----- lodel/editorial_model/translator/xmlfile.py | 10 +++++--- lodel/exceptions.py | 1 + lodel/leapi/datahandlers/base_classes.py | 9 +++++-- lodel/leapi/datahandlers/datas.py | 11 +++++++-- lodel/leapi/datahandlers/datas_base.py | 7 ++++-- lodel/leapi/datahandlers/references.py | 11 ++++++--- lodel/leapi/exceptions.py | 4 +++- lodel/leapi/lefactory.py | 20 ++++++++++------ lodel/leapi/leobject.py | 26 +++++++++++++-------- lodel/leapi/query.py | 10 +++++--- lodel/plugin/core_hooks.py | 8 ++++--- lodel/plugin/core_scripts.py | 4 +++- lodel/plugin/datasource_plugin.py | 13 +++++++---- lodel/plugin/exceptions.py | 2 +- lodel/plugin/extensions.py | 11 ++++++--- lodel/plugin/interface.py | 10 +++++--- lodel/plugin/plugins.py | 24 +++++++++++++++---- lodel/plugin/scripts.py | 8 +++++-- lodel/plugin/sessionhandler.py | 10 +++++--- lodel/settings/settings.py | 11 ++++----- lodel/settings/settings_loader.py | 11 +++++---- lodel/settings/validator.py | 5 +++- 26 files changed, 184 insertions(+), 90 deletions(-) diff --git a/lodel/auth/client.py b/lodel/auth/client.py index 5f6fc59..cf53834 100644 --- a/lodel/auth/client.py +++ b/lodel/auth/client.py @@ -5,12 +5,16 @@ import sys import warnings import inspect -from lodel.settings import Settings -from lodel import logger -from lodel.plugin.hooks import LodelHook -from lodel.plugin import SessionHandlerPlugin as SessionHandler -from .exceptions import * -from ..leapi.query import LeGetQuery +from lodel.context import LodelContext + +LodelContext.expose_modules(globals(), { + 'lodel.settings': 'Settings', + 'lodel.logger': 'logger', + 'lodel.plugins.hooks': ['LodelHook'], + 'lodel.plugin': [('SessionHandlerPlugin', 'SessionHandler')], + 'lodel.auth.exceptions': ['ClientError', 'ClientAuthenticationFailure', + 'ClientPermissionDenied', 'ClientAuthenticationError'], + 'lodel.leapi.query': ['LeGetQuery'],}) ##@brief Client metaclass designed to implements container accessor on #Client Class diff --git a/lodel/auth/exceptions.py b/lodel/auth/exceptions.py index 2a9f897..d3a02af 100644 --- a/lodel/auth/exceptions.py +++ b/lodel/auth/exceptions.py @@ -1,5 +1,8 @@ -from lodel import logger -from lodel.plugin.hooks import LodelHook +from lodel.context import LodelContext + +LodelContext.expose_modules(globals(), { + 'lodel.logger': 'logger', + 'lodel.plugin.hooks': ['LodelHook']}) ##@brief Handles common errors with a Client class ClientError(Exception): diff --git a/lodel/editorial_model/components.py b/lodel/editorial_model/components.py index 36ea11b..ff27133 100644 --- a/lodel/editorial_model/components.py +++ b/lodel/editorial_model/components.py @@ -9,11 +9,12 @@ import warnings import copy import hashlib -from lodel.utils.mlstring import MlString - -from lodel.settings import Settings -from lodel.editorial_model.exceptions import * -from lodel.leapi.leobject import CLASS_ID_FIELDNAME +from lodel.context import LodelContext +LodelContext.expose_modules(globals(), { + 'lodel.utils.mlstring': ['MlString'], + 'lodel.settings': ['Settings'], + 'lodel.editorial_model.exceptions': ['EditorialModelError', 'assert_edit'], + 'lodel.leapi.leobject': ['CLASS_ID_FIELDNAME']}) ##@brief Abstract class to represent editorial model components # @see EmClass EmField diff --git a/lodel/editorial_model/model.py b/lodel/editorial_model/model.py index 0916076..5bdf0b0 100644 --- a/lodel/editorial_model/model.py +++ b/lodel/editorial_model/model.py @@ -4,13 +4,15 @@ import hashlib import importlib import copy -from lodel.utils.mlstring import MlString -from lodel import logger -from lodel.settings import Settings -from lodel.settings.utils import SettingsError +from lodel.context import LodelContext +LodelContext.expose_modules(globals(), { + 'lodel.utils.mlstring': ['MlString'], + 'lodel.logger': 'logger', + 'lodel.settings': ['Settings'], + 'lodel.settings.utils': ['SettingsError'], + 'lodel.editorial_model.exceptions': ['EditorialModelError', 'assert_edit'], + 'lodel.editorial_model.components': ['EmClass', 'EmField', 'EmGroup']}) -from lodel.editorial_model.exceptions import * -from lodel.editorial_model.components import EmClass, EmField, EmGroup ##@brief Describe an editorial model #@ingroup lodel2_em diff --git a/lodel/editorial_model/translator/xmlfile.py b/lodel/editorial_model/translator/xmlfile.py index 1274c0d..5b3b4d7 100644 --- a/lodel/editorial_model/translator/xmlfile.py +++ b/lodel/editorial_model/translator/xmlfile.py @@ -3,9 +3,13 @@ import lxml import os from lxml import etree -from lodel.editorial_model.model import EditorialModel -from lodel.editorial_model.components import * -from lodel.utils.mlstring import MlString + +from lodel.context import LodelContext +LodelContext.expose_modules(globals(), { + 'lodel.editorial_model.model': ['EditorialModel'], + 'lodel.editorial_model.components': ['EmComponent', 'EmClass', 'EmField', + 'EmGroup'], + 'lodel.utils.mlstring': ['MlString']}) ##@package lodel.editorial_model.translator.xmlfile Translator module designed #to load & save EM in XML diff --git a/lodel/exceptions.py b/lodel/exceptions.py index ceda8f7..549a5c0 100644 --- a/lodel/exceptions.py +++ b/lodel/exceptions.py @@ -42,3 +42,4 @@ class DataNoneValid(Exception): #@note Designed to be raised in DataHandler class FieldValidationError(Exception): pass + diff --git a/lodel/leapi/datahandlers/base_classes.py b/lodel/leapi/datahandlers/base_classes.py index b3aa131..4c25c18 100644 --- a/lodel/leapi/datahandlers/base_classes.py +++ b/lodel/leapi/datahandlers/base_classes.py @@ -8,8 +8,13 @@ import copy import importlib import inspect import warnings -from lodel.exceptions import * -from lodel import logger + +from lodel.context import LodelContext + +LodelContext.expose_modules(globals(), { + 'lodel.exceptions': ['LodelException', 'LodelExceptions', + 'LodelFatalError', 'DataNoneValid', 'FieldValidationError'], + 'lodel.logger': 'logger'}) ##@brief Base class for all data handlers diff --git a/lodel/leapi/datahandlers/datas.py b/lodel/leapi/datahandlers/datas.py index eaf2d3e..e5bbc39 100644 --- a/lodel/leapi/datahandlers/datas.py +++ b/lodel/leapi/datahandlers/datas.py @@ -1,10 +1,17 @@ #-*- coding: utf-8 -*- import warnings import inspect -from lodel.leapi.datahandlers.datas_base import * -from lodel.exceptions import * import re +from lodel.context import LodelContext + +LodelContext.expose_modules(globals(), { + 'lodel.leapi.datahandlers.datas_base': ['Boolean', 'Integer', 'Varchar', + 'DateTime', 'Text', 'File'], + 'lodel.exceptions': ['LodelException', 'LodelExceptions', + 'LodelFatalError', 'DataNoneValid', 'FieldValidationError']}) + + ##@brief Data field designed to handle formated strings class FormatString(Varchar): diff --git a/lodel/leapi/datahandlers/datas_base.py b/lodel/leapi/datahandlers/datas_base.py index 94acf47..78bcffc 100644 --- a/lodel/leapi/datahandlers/datas_base.py +++ b/lodel/leapi/datahandlers/datas_base.py @@ -4,8 +4,11 @@ import datetime import time import os -from lodel.leapi.datahandlers.base_classes import DataField -from lodel.exceptions import * +from lodel.context import LodelContext +LodelContext.expose_modules(globals(), { + 'lodel.leapi.datahandlers.base_classes': ['DataField'], + 'lodel.exceptions': ['LodelException', 'LodelExceptions', + 'LodelFatalError', 'DataNoneValid', 'FieldValidationError']}) ##@brief Data field designed to handle boolean values diff --git a/lodel/leapi/datahandlers/references.py b/lodel/leapi/datahandlers/references.py index 586b204..7b86aaa 100644 --- a/lodel/leapi/datahandlers/references.py +++ b/lodel/leapi/datahandlers/references.py @@ -1,7 +1,12 @@ # -*- coding: utf-8 -*- -from lodel.leapi.datahandlers.base_classes import Reference, MultipleRef, SingleRef -from lodel.exceptions import * -from lodel import logger + +from lodel.context import LodelContext +LodelContext.expose_modules(globals(), { + 'lodel.leapi.datahandlers.base_classes': ['Reference', 'MultipleRef', + 'SingleRef'], + 'lodel.logger': 'logger', + 'lodel.exceptions': ['LodelException', 'LodelExceptions', + 'LodelFatalError', 'DataNoneValid', 'FieldValidationError']}) class Link(SingleRef): pass diff --git a/lodel/leapi/exceptions.py b/lodel/leapi/exceptions.py index f0b1e91..097a302 100644 --- a/lodel/leapi/exceptions.py +++ b/lodel/leapi/exceptions.py @@ -1,6 +1,8 @@ #-*- coding: utf-8 -*- -from lodel.exceptions import LodelExceptions, LodelException +from lodel.context import LodelContext +LodelContext.expose_modules(globals(), { + 'lodel.exceptions': ['LodelExceptions', 'LodelException']}) class LeApiError(LodelException): pass diff --git a/lodel/leapi/lefactory.py b/lodel/leapi/lefactory.py index 4112987..71f818f 100644 --- a/lodel/leapi/lefactory.py +++ b/lodel/leapi/lefactory.py @@ -2,10 +2,14 @@ import os, os.path import functools -from lodel.editorial_model.components import * -from lodel.leapi.leobject import LeObject -from lodel.leapi.datahandlers.base_classes import DataHandler -from lodel import logger + +from lodel.context import LodelContext +LodelContext.expose_modules(globals(), { + 'lodel.editorial_model.components': ['EmComponent', 'EmClass', 'EmField', + 'EmGroup'], + 'lodel.leapi.leobject': ['LeObject'], + 'lodel.leapi.datahandlers.base_classes': ['DataHandler'], + 'lodel.logger': 'logger'}) ##@brief Generate python module code from a given model # @param model lodel.editorial_model.model.EditorialModel @@ -15,9 +19,11 @@ def dyncode_from_em(model): cls_code, modules, bootstrap_instr = generate_classes(model) # Header - imports = """from lodel.leapi.leobject import LeObject -from lodel.leapi.datahandlers.base_classes import DataField -from lodel.plugin.hooks import LodelHook + imports = """from lodel.context import LodelContext +LodelContext.expose_modules(globals(), { + 'lodel.leapi.leobject': ['LeObject'], + 'lodel.leapi.datahandlers.base_classes': ['DataField'], + 'lodel.plugin.hooks': ['LodelHook']}) """ for module in modules: imports += "import %s\n" % module diff --git a/lodel/leapi/leobject.py b/lodel/leapi/leobject.py index 1eda678..d139b20 100644 --- a/lodel/leapi/leobject.py +++ b/lodel/leapi/leobject.py @@ -4,16 +4,22 @@ import importlib import warnings import copy -from lodel import logger -from lodel.settings import Settings -from lodel.settings.utils import SettingsError -from .query import LeInsertQuery, LeUpdateQuery, LeDeleteQuery, LeGetQuery -from .exceptions import * -from lodel.plugin.exceptions import * -from lodel.plugin.hooks import LodelHook -from lodel.plugin import Plugin, DatasourcePlugin -from lodel.leapi.datahandlers.base_classes import DatasConstructor -from lodel.leapi.datahandlers.base_classes import Reference +from lodel.context import LodelContext + +LodelContext.expose_modules(globals(), { + 'lodel.logger': 'logger', + 'lodel.settings': 'Settings', + 'lodel.settings.utils': 'SettingsError', + 'lodel.leapi.query': ['LeInsertQuery', 'LeUpdateQuery', 'LeDeleteQuery', + 'LeGetQuery'], + 'lodel.leapi.exceptions': ['LeApiError', 'LeApiErrors', + 'LeApiDataCheckError', 'LeApiDataCheckErrors', 'LeApiQueryError', + 'LeApiQueryErrors'], + 'lodel.plugin.exceptions': ['PluginError', 'PluginTypeError', + 'LodelScriptError', 'DatasourcePluginError'], + 'lodel.plugin.hooks': ['LodelHook'], + 'lodel.plugin': ['Plugin', 'DatasourcePlugin'], + 'lodel.leapi.datahandlers.base_classes': ['DatasConstructor', 'Reference']}) ##@brief Stores the name of the field present in each LeObject that indicates #the name of LeObject subclass represented by this object diff --git a/lodel/leapi/query.py b/lodel/leapi/query.py index 5bf00a9..891711b 100644 --- a/lodel/leapi/query.py +++ b/lodel/leapi/query.py @@ -5,9 +5,13 @@ import copy import inspect import warnings -from .exceptions import * -from lodel.plugin.hooks import LodelHook -from lodel import logger +from lodel.context import LodelContext +LodelContext.expose_modules(globals(), { + 'lodel.leapi.exceptions': ['LeApiError', 'LeApiErrors', + 'LeApiDataCheckError', 'LeApiDataCheckErrors', 'LeApiQueryError', + 'LeApiQueryErrors'], + 'lodel.plugin.hooks': ['LodelHook'], + 'lodel.logger': ['logger']}) ##@todo check datas when running query diff --git a/lodel/plugin/core_hooks.py b/lodel/plugin/core_hooks.py index 9d5178c..2d99c79 100644 --- a/lodel/plugin/core_hooks.py +++ b/lodel/plugin/core_hooks.py @@ -1,8 +1,10 @@ #-*- coding: utf-8 -*- -from lodel.plugin import LodelHook -from lodel.settings import Settings -from lodel import logger +from lodel.context import LodelContext +LodelContext.expose_modules(globals(), { + 'lodel.plugin': ['LodelHook'], + 'lodel.settings': ['Settings'], + 'lodel.logger': 'logger'}) ##@package lodel.plugin.core_hooks #@brief Lodel2 internal hooks declaration diff --git a/lodel/plugin/core_scripts.py b/lodel/plugin/core_scripts.py index f061eba..d327789 100644 --- a/lodel/plugin/core_scripts.py +++ b/lodel/plugin/core_scripts.py @@ -1,4 +1,6 @@ -import lodel.plugin.scripts as lodel_script +from lodel.context import LodelContext +LodelContext.expose_modules(globals(), { + 'lodel.plugin.scripts': 'lodel_script'}) ##@package lodel.plugin.core_scripts #@brief Lodel2 internal scripts declaration diff --git a/lodel/plugin/datasource_plugin.py b/lodel/plugin/datasource_plugin.py index 7598e9f..540f411 100644 --- a/lodel/plugin/datasource_plugin.py +++ b/lodel/plugin/datasource_plugin.py @@ -1,8 +1,11 @@ -from .plugins import Plugin -from .exceptions import * -from lodel.exceptions import * -from lodel.settings.validator import SettingValidator - +from lodel.context import LodelContext +LodelContext.expose_modules(globals(), { + 'lodel.plugin.plugins': ['Plugin'], + 'lodel.plugin.exceptions': ['PluginError', 'PluginTypeError', + 'LodelScriptError', 'DatasourcePluginError'], + 'lodel.settings.validator': ['SettingValidator'], + 'lodel.exceptions': ['LodelException', 'LodelExceptions', + 'LodelFatalError', 'DataNoneValid', 'FieldValidationError']}) _glob_typename = 'datasource' diff --git a/lodel/plugin/exceptions.py b/lodel/plugin/exceptions.py index bbf4242..81ace22 100644 --- a/lodel/plugin/exceptions.py +++ b/lodel/plugin/exceptions.py @@ -1,7 +1,7 @@ class PluginError(Exception): pass -class PluginTypeErrror(PluginError): +class PluginTypeError(PluginError): pass class LodelScriptError(Exception): diff --git a/lodel/plugin/extensions.py b/lodel/plugin/extensions.py index e2fa3da..9672c90 100644 --- a/lodel/plugin/extensions.py +++ b/lodel/plugin/extensions.py @@ -1,8 +1,13 @@ -from .plugins import Plugin -from .exceptions import * -from lodel.settings.validator import SettingValidator +from lodel.context import LodelContext +LodelContext.expose_modules(globals(), { + 'lodel.plugin.plugins': ['Plugin'], + 'lodel.plugin.exceptions': ['PluginError', 'PluginTypeError', + 'LodelScriptError', 'DatasourcePluginError'], + 'lodel.settings.validator': ['SettingValidator']}) _glob_typename = 'extension' + + class Extension(Plugin): _plist_confspecs = { diff --git a/lodel/plugin/interface.py b/lodel/plugin/interface.py index 168ab66..04d1a1b 100644 --- a/lodel/plugin/interface.py +++ b/lodel/plugin/interface.py @@ -1,9 +1,13 @@ -from .plugins import Plugin -from .exceptions import * -from lodel.settings.validator import SettingValidator +from lodel.context import LodelContext +LodelContext.expose_modules(globals(), { + 'lodel.plugin.plugins': ['Plugin'], + 'lodel.plugin.exceptions': ['PluginError', 'PluginTypeError', + 'LodelScriptError', 'DatasourcePluginError'], + 'lodel.settings.validator': ['SettingValidator']}) _glob_typename = 'ui' + ##@brief Handles interfaces plugin #@note It's a singleton class. Only 1 interface allowed by instance. class InterfacePlugin(Plugin): diff --git a/lodel/plugin/plugins.py b/lodel/plugin/plugins.py index 44287bb..a0647ef 100644 --- a/lodel/plugin/plugins.py +++ b/lodel/plugin/plugins.py @@ -7,10 +7,14 @@ import copy import json from importlib.machinery import SourceFileLoader, SourcelessFileLoader -from lodel import logger -from lodel.settings.utils import SettingsError -from .exceptions import * -from lodel.exceptions import * +from lodel.context import LodelContext +LodelContext.expose_modules(globals(), { + 'lodel.logger': 'logger', + 'lodel.settings.utils': ['SettingsError'], + 'lodel.plugin.exceptions': ['PluginError', 'PluginTypeError', + 'LodelScriptError', 'DatasourcePluginError'], + 'lodel.exceptions': ['LodelException', 'LodelExceptions', + 'LodelFatalError', 'DataNoneValid', 'FieldValidationError']}) ## @package lodel.plugins Lodel2 plugins management #@ingroup lodel2_plugins @@ -828,6 +832,13 @@ file : '%s'. Running discover again..." % DISCOVER_CACHE_FILENAME) raise PluginError("Unable to import initfile") return (res_module, temp_module) + @classmethod + def debug_wrapper(cls, updglob = None): + if updglob is not None: + for k, v in updglob.items(): + globals()[k] = v + print(logger) + ##@brief Reccursiv plugin discover given a path #@param path str : the path to walk through #@return A dict with plugin_name as key and {'path':..., 'version':...} as value @@ -849,6 +860,8 @@ file : '%s'. Running discover again..." % DISCOVER_CACHE_FILENAME) to_explore.append(f_path) return res +def debug_wrapper_mod(): + print("MOD : ",logger) ##@brief Decorator class designed to allow plugins to add custom methods #to LeObject childs (dyncode objects) @@ -961,3 +974,6 @@ with %s" % (custom_method._method_name, custom_method)) custom_method.__get_method()) logger.debug( "Custom method %s added to target" % custom_method) + +def wrapper_debug_fun(): + print(logger) diff --git a/lodel/plugin/scripts.py b/lodel/plugin/scripts.py index 424a8fd..c982359 100644 --- a/lodel/plugin/scripts.py +++ b/lodel/plugin/scripts.py @@ -1,8 +1,11 @@ import argparse import sys -from lodel import logger -from lodel.exceptions import * +from lodel.context import LodelContext +LodelContext.expose_modules(globals(), { + 'lodel.logger': 'logger', + 'lodel.exceptions': ['LodelException', 'LodelExceptions', + 'LodelFatalError', 'DataNoneValid', 'FieldValidationError']}) ##@defgroup lodel2_script Administration scripts #@ingroup lodel2_plugins @@ -16,6 +19,7 @@ from lodel.exceptions import * #@todo store it in MetaLodelScript __registered_scripts = dict() + ##@brief LodelScript metaclass that allows to "catch" child class #declaration #@ingroup lodel2_script diff --git a/lodel/plugin/sessionhandler.py b/lodel/plugin/sessionhandler.py index b5cd6ce..5333fd2 100644 --- a/lodel/plugin/sessionhandler.py +++ b/lodel/plugin/sessionhandler.py @@ -1,6 +1,10 @@ -from .plugins import Plugin, MetaPlugType -from .exceptions import * -from lodel.settings.validator import SettingValidator +from lodel.context import LodelContext +LodelContext.expose_modules(globals(), { + 'lodel.plugin.plugins': ['Plugin', 'MetaPlugType'], + 'lodel.plugin.exceptions': ['PluginError', 'PluginTypeError', + 'LodelScriptError', 'DatasourcePluginError'], + 'lodel.settings.validator': ['SettingValidator']}) + ##@brief SessionHandlerPlugin metaclass designed to implements a wrapper #between SessionHandlerPlugin classmethod and plugin loader functions diff --git a/lodel/settings/settings.py b/lodel/settings/settings.py index 7ac3fa1..ead992c 100644 --- a/lodel/settings/settings.py +++ b/lodel/settings/settings.py @@ -12,15 +12,12 @@ from lodel.context import LodelContext LodelContext.expose_modules(globals(),{ 'lodel.logger': 'logger', - 'lodel.settings.utils': ['SettingsError', 'SettingsErrors']}) + 'lodel.settings.utils': ['SettingsError', 'SettingsErrors'], + 'lodel.settings.validator': ['SettingValidator', 'LODEL2_CONF_SPECS', + 'confspec_append'], + 'lodel.settings.settings_loader':['SettingsLoader']}) -#from lodel import logger -#from lodel.settings.utils import SettingsError, SettingsErrors -from lodel.settings.validator import SettingValidator, LODEL2_CONF_SPECS, \ - confspec_append -from lodel.settings.settings_loader import SettingsLoader - ## @package lodel.settings.settings Lodel2 settings module # # Contains the class that handles the namedtuple tree of settings diff --git a/lodel/settings/settings_loader.py b/lodel/settings/settings_loader.py index 0a312c6..ff245ed 100644 --- a/lodel/settings/settings_loader.py +++ b/lodel/settings/settings_loader.py @@ -4,12 +4,13 @@ import os import glob import copy -from lodel import logger -from lodel.settings.utils import * -from lodel.settings.validator import SettingsValidationError -from lodel.settings.utils import SettingsError, SettingsErrors +from lodel.context import LodelContext + +LodelContext.expose_modules(globals(), { + 'lodel.logger': 'logger', + 'lodel.settings.utils': ['SettingsError', 'SettingsErrors'], + 'lodel.settings.validator': ['SettingsValidationError']}) - ##@brief Merges and loads configuration files class SettingsLoader(object): diff --git a/lodel/settings/validator.py b/lodel/settings/validator.py index 009a0fb..9bf139a 100644 --- a/lodel/settings/validator.py +++ b/lodel/settings/validator.py @@ -7,7 +7,10 @@ import socket import inspect import copy -from lodel.exceptions import * +from lodel.context import LodelContext +LodelContext.expose_modules(globals(), { + 'lodel.exceptions': ['LodelException', 'LodelExceptions', + 'LodelFatalError', 'FieldValidationError']}) ## @package lodel.settings.validator Lodel2 settings validators/cast module #