def import_configuration(module_name, data_dir): """ Load configuration from file as python module. """ try: debug("Attempting to load {module_name}.py from {data_dir}", module_name=module_name, data_dir=data_dir) module = _import(module_name, data_dir) puts("Loaded {module_name}.py from {data_dir}".format(module_name=module_name, data_dir=data_dir)) except ImportError as e: # if the module was found but could not be loaded, re-raise the error if getattr(e, 'module_path', None): raise e debug("Attempting to load {module_name}.py_tmpl from {data_dir}", module_name=module_name, data_dir=data_dir) # try to load as a template try: env = Environment(loader=FileSystemLoader(data_dir)) rendered_module = env.get_template(module_name + '.py_tmpl').render({}) module = _import_string(module_name, rendered_module) puts("Loaded {module_name}.py_tmpl from {data_dir}".format(module_name=module_name, data_dir=data_dir)) except TemplateNotFound: debug("Could not load {module_name} from {data_dir}", module_name=module_name, data_dir=data_dir) module = {} return options.module_as_dict(module)
def load_from_module(cls, settings_path=None): """ Load settings from a Python module. :param settings_path: path to settings module. a full path or directory name. module name defaults to ``settings``. directory defaults to the current working directory. """ if settings_path: if settings_path.endswith(".py"): dir_name, module = os.path.split(settings_path) module_name, _ = os.path.splitext(module) else: dir_name, module_name = settings_path, None else: dir_name, module_name = os.getcwd(), None settings_ = Settings(dir_name) try: module = _import(module_name or 'settings', dir_name) except ImportError as e: raise Exception("Unable to load {settings}: {error}" .format(settings=os.path.join(dir_name, module_name or "settings.py"), error=e)) for key in Settings.KEYS: setattr(settings_, key, getattr(module, key, {})) return settings_
def load_from_module(cls, settings_path=None): """ Load settings from a Python module. :param settings_path: path to settings module. a full path or directory name. module name defaults to 'settings'. directory defaults to the current working directory. """ if settings_path: if settings_path.endswith(".py"): dir_name, module = os.path.split(settings_path) module_name, _ = os.path.splitext(module) else: dir_name, module_name = settings_path, None else: dir_name, module_name = os.getcwd(), None settings_ = Settings(dir_name) try: module = _import(module_name or 'settings', dir_name) except ImportError as e: raise Exception("Unable to load {settings}: {error}" .format(settings=os.path.join(dir_name, module_name or "settings.py"), error=e)) for key in Settings.KEYS: setattr(settings_, key, getattr(module, key, {})) return settings_
def load_model_from_dir(dir_name, module_name='settings'): """ Load model data (environments, roles, hosts) from settings module. """ settings = _import(module_name, dir_name) for key in _keys(): env[key] = getattr(settings, key, {})
def load_model_from_dir(dir_name): """ Load model data (environments, roles, hosts) from settings.py. """ settings = _import('settings', dir_name) try: env['environmentdefs'] = getattr(settings, 'environmentdefs') except AttributeError: env['environmentdefs'] = {} try: env['roledefs'] = getattr(settings, 'roledefs') except AttributeError: env['roledefs'] = {}
def import_configuration(module_name, data_dir): """ Load configuration from file as python module. Treats module's __all__ value as the configuration dictionary. """ # use __all__ as the module's dictionary def as_dict(module): try: return module.__all__ except AttributeError: return None try: module = _import(module_name, data_dir) return as_dict(module) except ImportError: return None
def import_configuration(module_name, data_dir): """ Load configuration from file as python module. Returns publicly names values in module's __dict__. """ def as_dict(module): try: return {k: v for k, v in module.__dict__.iteritems() if not k[0:1] == '_'} except AttributeError: return None try: debug("Attempting to load {module_name}.py from {data_dir}", module_name=module_name, data_dir=data_dir) module = _import(module_name, data_dir) puts("Loaded {module_name}.py from {data_dir}".format(module_name=module_name, data_dir=data_dir)) except ImportError: debug("Attempting to load {module_name}.py_tmpl from {data_dir}", module_name=module_name, data_dir=data_dir) # try to load as a template try: env = Environment(loader=FileSystemLoader(data_dir)) rendered_module = env.get_template(module_name + '.py_tmpl').render({}) except TemplateNotFound: debug("Could not load {module_name} from {data_dir}", module_name=module_name, data_dir=data_dir) return None module = _import_string(module_name, rendered_module) puts("Loaded {module_name}.py_tmpl from {data_dir}".format(module_name=module_name, data_dir=data_dir)) return as_dict(module)
def _import_configuration(module_name, data_dir): """ Load configuration from file as python module. :param data_dir: directory to load from. """ try: debug("Attempting to load {module_name}.py from {data_dir}", module_name=module_name, data_dir=data_dir) module = _import(module_name, data_dir) puts("Loaded {module_name}.py from {data_dir}".format( module_name=module_name, data_dir=data_dir)) except ImportError as e: # if the module was found but could not be loaded, re-raise the error if getattr(e, 'module_path', None): raise e debug("Attempting to load {module_name}.py_tmpl from {data_dir}", module_name=module_name, data_dir=data_dir) # try to load as a template try: env = Environment(loader=FileSystemLoader(data_dir)) rendered_module = env.get_template(module_name + '.py_tmpl').render({}) module = _import_string(module_name, rendered_module) puts("Loaded {module_name}.py_tmpl from {data_dir}".format( module_name=module_name, data_dir=data_dir)) except TemplateNotFound: debug("Could not load {module_name} from {data_dir}", module_name=module_name, data_dir=data_dir) raise ModuleNotFound("No module named {}".format(module_name)) return module
def test_import_broken(self): with self.assertRaises(ImportError) as e: _import("broken", self.dir_name) # module_path was set: the module was found but had an import error eq_(join(self.dir_name, 'broken.py'), e.exception.module_path)
def test_import_not_found(self): with self.assertRaises(ImportError) as e: _import("missing", self.dir_name) # module_path not set: the module itself could not be found eq_(None, getattr(e.exception, 'module_path', None))
def test_import_simple(self): module = _import("simple", self.dir_name) ok_(module) eq_("bar", module.foo)
def test_import_empty(self): module = _import("empty", self.dir_name) ok_(module)