Пример #1
0
def import_from_filename(filename, silent=False):  # pragma: no cover
    """If settings_module is a filename path import it."""
    if not filename.endswith('.py'):
        filename = '{0}.py'.format(filename)

    if filename in default_settings.SETTINGS_MODULE_FOR_DYNACONF:
        silent = True
    mod = types.ModuleType(filename.rstrip('.py'))
    mod.__file__ = filename
    mod._is_error = False
    try:
        with io.open(
            find_file(filename),
            encoding=default_settings.ENCODING_FOR_DYNACONF
        ) as config_file:
            exec(
                compile(config_file.read(), filename, 'exec'),
                mod.__dict__
            )
    except IOError as e:
        e.strerror = (
            'py_loader: error loading file (%s %s)\n'
        ) % (e.strerror, filename)
        if silent and e.errno in (errno.ENOENT, errno.EISDIR):
            return
        raw_logger().debug(e.strerror)
        mod._is_error = True
    return mod
Пример #2
0
def import_from_filename(obj, filename, silent=False):  # pragma: no cover
    """If settings_module is a filename path import it."""
    if filename in [item.filename for item in inspect.stack()]:
        raise ImportError(
            "Looks like you are loading dynaconf "
            f"from inside the {filename} file and then it is trying "
            "to load itself entering in a circular reference "
            "problem. To solve it you have to "
            "invoke your program from another root folder "
            "or rename your program file.")

    _find_file = getattr(obj, "find_file", find_file)
    if not filename.endswith(".py"):
        filename = f"{filename}.py"

    if filename in default_settings.SETTINGS_FILE_FOR_DYNACONF:
        silent = True
    mod = types.ModuleType(filename.rstrip(".py"))
    mod.__file__ = filename
    mod._is_error = False
    try:
        with io.open(
                _find_file(filename),
                encoding=default_settings.ENCODING_FOR_DYNACONF,
        ) as config_file:
            exec(compile(config_file.read(), filename, "exec"), mod.__dict__)
    except IOError as e:
        e.strerror = (f"py_loader: error loading file "
                      f"({e.strerror} {filename})\n")
        if silent and e.errno in (errno.ENOENT, errno.EISDIR):
            return
        raw_logger().debug(e.strerror)
        mod._is_error = True
    return mod
Пример #3
0
def start_dotenv(obj=None, root_path=None):
    # load_from_dotenv_if_installed
    obj = obj or {}
    _find_file = getattr(obj, "find_file", find_file)
    root_path = (
        root_path
        or getattr(obj, "_root_path", None)
        or get("ROOT_PATH_FOR_DYNACONF")
    )
    raw_logger().debug(
        "Starting Dynaconf Dotenv %s",
        "for {0}".format(root_path) if root_path else "Base",
    )

    dotenv_path = (
        obj.get("DOTENV_PATH_FOR_DYNACONF")
        or get("DOTENV_PATH_FOR_DYNACONF")
        or _find_file(".env", project_root=root_path)
    )

    load_dotenv(
        dotenv_path,
        verbose=obj.get("DOTENV_VERBOSE_FOR_DYNACONF", False),
        override=obj.get("DOTENV_OVERRIDE_FOR_DYNACONF", False),
    )

    warn_deprecations(os.environ)
Пример #4
0
def get_module(obj, filename, silent=False):
    logger = raw_logger()
    try:
        logger.debug("Trying to import %s", filename)
        mod = importlib.import_module(filename)
        loaded_from = "module"
    except (ImportError, TypeError):
        logger.debug("Cant import %s trying to load from file", filename)
        mod = import_from_filename(obj, filename, silent=silent)
        if mod and not mod._is_error:
            loaded_from = "filename"
        else:
            loaded_from = None
    return mod, loaded_from
Пример #5
0
def get_module(obj, filename, silent=False):
    logger = raw_logger()
    try:
        logger.debug(f"Trying to import {filename}")
        mod = importlib.import_module(filename)
        loaded_from = "module"
    except (ImportError, TypeError):
        logger.debug(f"Cant import {filename} trying to load from file")
        mod = import_from_filename(obj, filename, silent=silent)
        if mod and not mod._is_error:
            loaded_from = "filename"
        else:
            # it is important to return None in case of not loaded
            loaded_from = None
    return mod, loaded_from
Пример #6
0
 def logger(self):  # pragma: no cover
     """Get or create inner logger"""
     return raw_logger()
Пример #7
0
import io
import os

from dynaconf.utils import ensure_a_list
from dynaconf.utils import raw_logger

logger = raw_logger()


class BaseLoader(object):
    """Base loader for dynaconf source files.

    :param obj: {[LazySettings]} -- [Dynaconf settings]
    :param env: {[string]} -- [the current env to be loaded defaults to
      [development]]
    :param identifier: {[string]} -- [identifier ini, yaml, json, py, toml]
    :param extensions: {[list]} -- [List of extensions with dots ['.a', '.b']]
    :param file_reader: {[callable]} -- [reads file return dict]
    :param string_reader: {[callable]} -- [reads string return dict]
    """
    def __init__(self, obj, env, identifier, extensions, file_reader,
                 string_reader):
        """Instantiates a loader for different sources"""
        self.obj = obj
        self.env = env or obj.current_env
        self.identifier = identifier
        self.extensions = extensions
        self.file_reader = file_reader
        self.string_reader = string_reader

    @staticmethod