Exemple #1
0
    def execute_loaders(
        self, env=None, silent=None, key=None, filename=None, loaders=None
    ):
        """Execute all internal and registered loaders

        :param env: The environment to load
        :param silent: If loading erros is silenced
        :param key: if provided load a single key
        :param filename: optional custom filename to load
        :param loaders: optional list of loader modules
        """
        if key is None:
            default_loader(self, self._defaults)

        env = (env or self.current_env).upper()
        silent = silent or self.SILENT_ERRORS_FOR_DYNACONF

        if loaders is None:
            self.pre_load(env, silent=silent, key=key)
            settings_loader(
                self, env=env, silent=silent, key=key, filename=filename
            )
            self.load_extra_yaml(env, silent, key)  # DEPRECATED
            enable_external_loaders(self)

            loaders = self.loaders

        for loader in loaders:
            loader.load(self, env, silent=silent, key=key)

        self.load_includes(env, silent=silent, key=key)
Exemple #2
0
    def execute_loaders(self, env=None, silent=None, key=None, filename=None):
        """Execute all internal and registered loaders

        :param env: The environment to load
        :param silent: If loading erros is silenced
        :param key: if provided load a single key
        :param filename: optional custom filename to load
        """
        if key is None:
            default_loader(self, self._defaults)
        env = (env or self.current_env).upper()
        silent = silent or self.SILENT_ERRORS_FOR_DYNACONF
        self.pre_load(env, silent=silent, key=key)
        settings_loader(self,
                        env=env,
                        silent=silent,
                        key=key,
                        filename=filename)
        self.load_extra_yaml(env, silent, key)  # DEPRECATED
        enable_external_loaders(self)
        for loader in self.loaders:
            self.logger.debug("Dynaconf executing: %s", loader.__name__)
            loader.load(self, env, silent=silent, key=key)
        self.load_includes(env, silent=silent, key=key)
        self.logger.debug("Loaded Files: %s", deduplicate(self._loaded_files))
Exemple #3
0
 def execute_loaders(self, namespace=None, silent=None, key=None):
     """Execute all internal and registered loaders"""
     silent = silent or self.SILENT_ERRORS_FOR_DYNACONF
     if key is None:
         default_loader(self, self._defaults)
     settings_loader(self, namespace=namespace, silent=silent, key=key)
     self.load_extra_yaml(namespace, silent, key)  # DEPRECATED
     for loader in self.loaders:
         self.logger.debug('Loading %s', loader.__name__)
         loader.load(self, namespace, silent=silent, key=key)
Exemple #4
0
 def execute_loaders(self, namespace=None, silent=None, key=None):
     """Execute all internal and registered loaders"""
     default_loader(self)
     module_loader(self, namespace=namespace)
     if self.exists('YAML'):
         yaml_loader.load(self,
                          namespace=namespace,
                          filename=self.get('YAML'))
     silent = silent or self.DYNACONF_SILENT_ERRORS
     for loader in self.loaders:
         loader.load(self, namespace, silent=silent, key=key)
Exemple #5
0
    def execute_loaders(self, env=None, silent=None, key=None, filename=None):
        """Execute all internal and registered loaders

        :param env: The environment to load
        :param silent: If loading erros is silenced
        :param key: if provided load a single key
        :param filename: optinal custom filename to load
        """
        if key is None:
            default_loader(self, self._defaults)
        silent = silent or self.SILENT_ERRORS_FOR_DYNACONF
        settings_loader(self, env=env, silent=silent, key=key,
                        filename=filename)
        self.load_extra_yaml(env, silent, key)  # DEPRECATED
        enable_external_loaders(self)
        for loader in self.loaders:
            self.logger.debug('Dynaconf executing: %s', loader.__name__)
            loader.load(self, env, silent=silent, key=key)

        # Do we have any nested includes we need to process? If so,
        # Remove any duplicate paths (while preserving definition order)
        # by converting to an ordered dict, and then converting back
        # to a list.
        includes = list(OrderedDict.fromkeys(self.get('DYNACONF_INCLUDE', [])))
        if includes:
            already_loaded = set()
            basepath = os.path.split(self.settings_module)[0]

            for include in includes:
                # Handle absolute and relative paths in the configuration.
                if os.path.isabs(include):  # pragma: no cover
                    included_filename = include
                else:
                    included_filename = os.path.join(basepath, include)

                # Handle possible globs
                for path in glob.glob(included_filename):
                    if path in already_loaded:  # pragma: no cover
                        continue

                    settings_loader(obj=self,
                                    env=env,
                                    silent=silent,
                                    key=key,
                                    filename=path)

                    already_loaded.add(path)
Exemple #6
0
 def execute_loaders(self, namespace=None, silent=None, key=None):
     default_loader(self)
     module_loader(self)
     silent = silent or self.DYNACONF_SILENT_ERRORS
     for loader in self.loaders:
         loader.load(self, namespace, silent=silent, key=key)
Exemple #7
0
 def execute_loaders(self, namespace=None, silent=None, key=None):
     default_loader(self)
     module_loader(self)
     silent = silent or self.DYNACONF_SILENT_ERRORS
     for loader in self.loaders:
         loader.load(self, namespace, silent=silent, key=key)
Exemple #8
0
def configure_dynaconf(app):
    # extra vars in .secrets.yml override values on quokka.yml
    # secrets file is a hidden file and must be excluded on .gitignore
    # all password, token and other sensitive must go there
    # or exported as env var ex: QUOKKA_SECRET_KEY=12345

    settings_file = 'quokka.yml,.secrets.yml'
    initial_envmode = app.config.get('ENVMODE')

    # Extension is supposed to override envmode
    FlaskDynaconf(
        app,
        ENVVAR_FOR_DYNACONF="QUOKKA_SETTINGS_MODULE",
        GLOBAL_ENV_FOR_DYNACONF='QUOKKA',
        SETTINGS_MODULE_FOR_DYNACONF=settings_file,
        SILENT_ERRORS_FOR_DYNACONF=True
    )

    # Configure extra environment
    envmode = initial_envmode or app.config.get('ENVMODE')
    if envmode is not None:
        yaml_loader.load(
            obj=app.config,
            env=envmode,
            filename=settings_file
        )
        # overload with envvars
        env_loader.load_from_env(
            identifier=envmode,
            key=None,
            env=f'quokka_{envmode}',
            obj=app.config,
            silent=True
        )

    # configure theme options
    app.theme_context = DynaconfDict({
        'JINJA_ENVIRONMENT': app.jinja_env,
        'DEFAULT_LANG': app.config.get('BABEL_DEFAULT_LOCALE'),
        'default_locale': app.config.get('BABEL_DEFAULT_LOCALE'),
        'PAGES': [],
        'pages': [],
        'tags': [],
        'articles': [],
        'categories': [],
        # https://github.com/getpelican/pelican-plugins/tree/master/tag_cloud
        'tag_cloud': [],
        'CATEGORIES_URL': 'categories/index.html',
        'JINJA_EXTENSIONS': app.jinja_env.extensions,
        'USE_LESS': False,
        # For some themes like bootstrap3 theme SITEURL must be ''
        'SITEURL': 'http://localhost:5000',
        'THEME_STATIC_DIR': 'theme',
        'FAVICON': 'favicon.ico',
        'FAVICON_IE': 'favicon.ico',
        'FAVICON_FILENAME': 'favicon.ico',
        # 'AVATAR': 'LOAD FROM UPLOADS',
        'NEWEST_FIRST_ARCHIVES': True
    })

    default_loader(app.theme_context)

    # load theme variables from YAML file
    yaml_loader.load(
        obj=app.theme_context,
        env='theme',
        filename=app.config.get('SETTINGS_MODULE_FOR_DYNACONF')
    )
    # overrride with QUOKKA_THEME_ prefixed env vars if exist
    env_loader.load_from_env(
        identifier='theme',
        key=None,
        env='quokka_theme',
        obj=app.theme_context,
        silent=True
    )

    # remove prefix for pelican-themes
    active = app.theme_context.get('ACTIVE', 'default')
    if active.startswith('pelican'):
        active = active.lstrip('pelican-')
    app.theme_context['ACTIVE'] = active

    # load theme specific variables from YAML
    yaml_loader.load(
        obj=app.theme_context,
        env=f'theme_{app.theme_context.get("ACTIVE")}',
        filename=app.config.get('SETTINGS_MODULE_FOR_DYNACONF')
    )
    # overrride with QUOKKA_THEME_THEMENAME prefixed env vars if exist
    env_loader.load_from_env(
        identifier=f'theme_{app.theme_context.get("ACTIVE")}',
        key=None,
        env=f'quokka_theme_{app.theme_context.get("ACTIVE")}',
        obj=app.theme_context,
        silent=True
    )

    # mark strings as safe Markup
    for k, v in app.theme_context.items():
        if isinstance(v, str):
            app.theme_context[k] = Markup(v)