Source code for vulyk.bootstrap._assets

# -*- coding: utf-8 -*-
import os.path
from typing import List

from flask_assets import Bundle, Environment
from flask_collect import Collect

__all__ = [
    'init'
]


def _get_files_for_settings(app, assets_key) -> List[str]:
    """
    Extract a list of full paths to given assets group.

    :param app: Main application instance
    :type app: flask.Flask
    :param assets_key: Key which maps to a certain list of assets in settings.
    :type assets_key: str

    :returns: list of paths to assets
    :rtype: List[str]
    """
    result = []

    if assets_key in app.config and len(app.config[assets_key]) > 0:
        result = [
            os.path.join(app.static_folder, static_file)
            for static_file in app.config[assets_key]
        ]

    return result


[docs]def init(app) -> None: """ Bundle projects assets. :param app: Main application instance :type app: flask.Flask """ assets = Environment(app) assets.auto_build = app.config.get('ASSETS_AUTO_BUILD', True) files_to_watch = [] if 'COLLECT_STATIC_ROOT' in app.config: assets.cache = app.config['COLLECT_STATIC_ROOT'] collect = Collect() collect.init_app(app) collect.collect() app.static_folder = app.config['COLLECT_STATIC_ROOT'] for key in ['js', 'css']: assets_key = '%s_ASSETS' % key.upper() build_files = app.config[assets_key] files_to_watch.extend(_get_files_for_settings(app, assets_key)) bundle = Bundle(*build_files, output=app.config['%s_OUTPUT' % assets_key], filters=app.config['%s_FILTERS' % assets_key] ) assets.register('%s_all' % key, bundle) app.logger.debug('Bundling files: %s%s', os.linesep, os.linesep.join(build_files)) app.assets = assets app._base_files_to_watch = files_to_watch app.logger.info('Base assets are collected successfully.')