Пример #1
0
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)
Пример #2
0
    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_
Пример #3
0
    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_
Пример #4
0
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, {})
Пример #5
0
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'] = {}
Пример #6
0
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
Пример #7
0
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)
Пример #8
0
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
Пример #9
0
 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)
Пример #10
0
 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))
Пример #11
0
 def test_import_simple(self):
     module = _import("simple", self.dir_name)
     ok_(module)
     eq_("bar", module.foo)
Пример #12
0
 def test_import_empty(self):
     module = _import("empty", self.dir_name)
     ok_(module)