예제 #1
0
def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app, config_name)

    assets.init_app(app)
    bootstrap.init_app(app)
    db.init_app(app)
    login_manager.init_app(app)

    assets_config = os.path.join(os.path.dirname(__file__), os.pardir,
                                 'webassets.yaml')
    assets._named_bundles = {}  # avoid duplicate registration in unit tests
    assets_loader = YAMLLoader(assets_config)
    bundles = assets_loader.load_bundles(assets)
    assets.register(bundles)

    if not app.debug and not app.testing and app.config[
            'SSL_STATUS'] == SSLStatus.ENABLED:
        sslify = SSLify(app)

    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)

    from .auth import auth as auth_blueprint
    app.register_blueprint(auth_blueprint)

    return app
예제 #2
0
파일: app.py 프로젝트: boldfield/decanter
    def register_decanter_assets(self):
        path = os.path.join(DIR, 'assets', 'decanter.yaml')
        if not os.path.isfile(path):
            self._write_decanter_manifest(path)

        manifest = YAMLLoader(path)
        manifest = manifest.load_bundles()
        [self.register_asset_bundle(n, manifest[n]) for n in manifest]
예제 #3
0
def init_assets(app):
    app.assets = Environment(app)
    app.assets.auto_build = False
    app.assets.directory = os.path.join(DIR, 'assets')
    app.assets.manifest = 'file'
    app.assets.url = '/static'

    manifest = YAMLLoader(os.path.join(DIR, 'assets', 'manifest.yaml'))
    manifest = manifest.load_bundles()
    [app.assets.register(n, manifest[n]) for n in manifest]
예제 #4
0
def init_assets(app):
    app.assets = Environment(app)
    app.assets.auto_build = False
    app.assets.directory = os.path.join(DIR, 'assets')
    app.assets.manifest = 'file'
    app.assets.url = '/static'

    manifest = YAMLLoader(os.path.join(DIR, 'assets', 'manifest.yaml'))
    manifest = manifest.load_bundles()
    [app.assets.register(n, manifest[n]) for n in manifest]
예제 #5
0
def includeme(config):
    """pyramid include. declare the add_thumb_view"""
    here = os.path.dirname(__file__)
    settings = config.registry.settings

    config_dir = settings.get('garasu_webassets.config', '{}/configs'.format(here))
    LOG.debug(config_dir)
    # config_dir = AssetResolver(None).resolve(config_dir).abspath()
    asset_dir = settings.get('garasu_webassets.assets', '{}/assets'.format(here))
    LOG.debug(asset_dir)
    # asset_dir = AssetResolver(None).resolve(asset_dir).abspath()

    env = Environment(directory=asset_dir, url=settings['garasu_webassets.url'])
    env.manifest = settings['garasu_webassets.manifest']
    env.debug = asbool(settings['garasu_webassets.debug'])
    env.cache = asbool(settings['garasu_webassets.cache'])
    env.auto_build = asbool(settings['garasu_webassets.auto_build'])

    def text(value):
        if type(value) is six.binary_type:
            return value.decode('utf-8')
        else:
            return value

    def yaml_stream(fname, mode):
        if path.exists(fname):
            return open(fname, mode)
        raise FileNotFoundError

    fin = fileinput.input('/'.join([config_dir, settings['garasu_webassets.bundles']]),
                          openhook=yaml_stream)
    with closing(fin):
        lines = [text(line).rstrip() for line in fin]

    stream_yaml = six.StringIO('\n'.join(lines))
    loader = YAMLLoader(stream_yaml)
    result = loader.load_bundles()
    env.register(result)

    # for item in env:
    #     LOG.debug(item.output)
    #     path_file = '/'.join([public_dir, item.output])
    #     src_file = '/'.join([asset_dir, item.output])
    #     shutil.copy(src_file, path_file)

    def _get_assets(request, *args, **kwargs):
        bundle = Bundle(*args, **kwargs)
        with bundle.bind(env):
            urls = bundle.urls()
        return urls
    config.add_request_method(_get_assets, 'web_assets')

    def _get_assets_env(request):
        return env
    config.add_request_method(_get_assets_env, 'web_env', reify=True)
예제 #6
0
def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app, config_name)

    app.config['ASSETS_DEBUG'] = app.config['DEBUG']

    assets.init_app(app)
    bootstrap.init_app(app)
    db.init_app(app)
    login_manager.init_app(app)
    migrate.init_app(app, db)

    assets_config = os.path.join(os.path.dirname(__file__), os.pardir, 'webassets.yaml')
    assets._named_bundles = {}  # avoid duplicate registration in unit tests
    assets_loader = YAMLLoader(assets_config)
    bundles = assets_loader.load_bundles(assets)
    assets.register(bundles)

    if not app.debug and not app.testing and app.config['SSL_STATUS'] == SSLStatus.ENABLED:
        sslify = SSLify(app)

    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)

    from .auth import auth as auth_blueprint
    app.register_blueprint(auth_blueprint)

    @app.context_processor
    def bokeh_resources():
        return dict(bokeh_resources=CDN)

    @app.cli.command()
    def flyway():
        # parse the database URI
        url = make_url(app.config['SQLALCHEMY_DATABASE_URI'])
        jdbc_url = 'jdbc:{drivername}://{host}:{port}/{database}'.format(drivername=url.drivername,
                                                                         host=url.host,
                                                                         port=url.port if url.port else 3306,
                                                                         database=url.database)
        username = url.username
        password = url.password

        # get Flyway command to run
        settings = Config.settings(os.environ['FLASK_CONFIG'])
        args = [settings['flyway_command'],
                '-url=' + jdbc_url,
                '-user='******'-password='******'-locations=filesystem:' + settings['migration_sql_dir'],
                'migrate']

        return subprocess.call(args)

    return app
예제 #7
0
    def load_bundles(self, bundle_file):
        """
        Load predefined bundles from a YAML file.

        See bundles.yaml for an example.
        """

        # Load bundles from YAML file
        loader = YAMLLoader(bundle_file)
        bundles = loader.load_bundles()

        # Register the bundles with the environment
        self.register(bundles)
예제 #8
0
def configure_static_assets(app):

  loader = YAMLLoader('assets.yaml')
  assets = Environment(app)
  assets.manifest = None
  assets.cache = False
  assets.directory = './makers'
  assets.url = ''

  for name, bundle in loader.load_bundles().items():
    assets.register(name, bundle)

  app.environment = assets
예제 #9
0
파일: __init__.py 프로젝트: etalab/weckan
def get_webassets_env(conf):
    '''Get a preconfigured WebAssets environment'''
    # Configure webassets
    assets_environment = AssetsEnvironment(conf.get('static_files_dir', DEFAULT_STATIC), '/')
    assets_environment.debug = conf.get('debug', False)
    assets_environment.auto_build = conf.get('debug', False)
    assets_environment.config['less_paths'] = (
        'bower/bootstrap/less',
        'bower/etalab-assets/less',
        'bower/bootstrap-markdown/less',
    )

    # Load bundle from yaml file
    loader = YAMLLoader(resource_stream(__name__, '../assets.yaml'))
    bundles = loader.load_bundles()
    for name, bundle in bundles.items():
        assets_environment.register(name, bundle)

    return assets_environment
예제 #10
0
def get_webassets_env(base_dir, assets_url, debug=False):
    """
    Get a webassets environment configured for building browser extensions.

    :param base_dir: The directory into which the assets should be built.
    :param assets_url: The relative or absolute URL used to reference assets
                       in the app.html and embed.js files.
    :param debug: If true, generates source maps and skips minification.
    """
    webassets_env = webassets.Environment(
        directory=os.path.abspath(base_dir),
        url=assets_url)

    # Disable webassets caching and manifest generation
    webassets_env.cache = False
    webassets_env.manifest = False
    webassets_env.resolver = Resolver()
    webassets_env.config['UGLIFYJS_BIN'] = './node_modules/.bin/uglifyjs'
    webassets_env.debug = debug

    loader = YAMLLoader(resolve('h:assets.yaml').abspath())
    webassets_env.register(loader.load_bundles())

    return webassets_env
예제 #11
0
def create_app(
    version_path,
    secret_key,
    session_cookie_name,
    session_cookie_domain,
    session_cookie_secure,
    use_https,
    enable_asset_pipeline,
    lando_api_url,
    debug=False,
):
    """
    Create an app instance.
    """
    csp = {
        "default-src": "'self'",
        "font-src": "'self' https://code.cdn.mozilla.net",
        "style-src": "'self' https://code.cdn.mozilla.net",
        "img-src": "'self' *.cloudfront.net *.gravatar.com " "*.googleusercontent.com",
        "object-src": "'none'",
        "frame-ancestors": "'none'",
        "manifest-src": "'none'",
        "worker-src": "'none'",
        "media-src": "'none'",
        "frame-src": "'none'",
        "base-uri": "'none'",
        "report-uri": "/__cspreport__",
    }  # yapf: disable

    initialize_logging()

    app = Flask(__name__)
    app.debug = debug

    # Set configuration
    version_info = get_app_version(version_path)
    logger.info("application version", extra=version_info)
    initialize_sentry(app, version_info["version"])

    set_config_param(app, "LANDO_API_URL", lando_api_url)
    set_config_param(app, "BUGZILLA_URL",
                     _lookup_service_url(lando_api_url, "bugzilla"))
    set_config_param(app, "PHABRICATOR_URL",
                     _lookup_service_url(lando_api_url, "phabricator"))
    set_config_param(app, "SECRET_KEY", secret_key, obfuscate=True)
    set_config_param(app, "SESSION_COOKIE_NAME", session_cookie_name)
    set_config_param(app, "SESSION_COOKIE_DOMAIN", session_cookie_domain)
    set_config_param(app, "SESSION_COOKIE_SECURE", session_cookie_secure)
    set_config_param(app, "SERVER_NAME", session_cookie_domain)
    set_config_param(app, "USE_HTTPS", use_https)

    app.config["PREFERRED_URL_SCHEME"] = "https" if use_https else "http"
    app.config["VERSION"] = version_info

    # Flags that need to be deprecated in the future.
    set_config_param(app, "ENABLE_SEC_APPROVAL",
                     bool(os.getenv("ENABLE_SEC_APPROVAL")))

    set_config_param(
        app,
        "ENABLE_EMBEDDED_TRANSPLANT_UI",
        bool(os.getenv("ENABLE_EMBEDDED_TRANSPLANT_UI")),
    )

    Talisman(app, content_security_policy=csp, force_https=use_https)

    # Authentication
    global oidc
    authentication = auth.OpenIDConnect(auth.OIDCConfig())
    oidc = authentication.auth(app)

    # Register routes via Flask Blueprints
    from landoui.pages import pages
    from landoui.revisions import revisions
    from landoui.dockerflow import dockerflow

    app.register_blueprint(pages)
    app.register_blueprint(revisions)
    app.register_blueprint(dockerflow)

    # Register template helpers
    from landoui.template_helpers import template_helpers

    app.register_blueprint(template_helpers)

    # Register error pages
    errorhandlers.register_error_handlers(app)

    # Setup Flask Assets
    assets = Environment(app)
    if enable_asset_pipeline:
        loader = YAMLLoader(
            os.path.join(os.path.dirname(os.path.abspath(__file__)),
                         "assets_src/assets.yml"))
        assets.register(loader.load_bundles())

    logger.info("Application started successfully.")
    return app
예제 #12
0
파일: app.py 프로젝트: boldfield/decanter
 def register_assets(self):
     manifest = YAMLLoader(os.path.join(self.project_root,
                                        'assets',
                                        'manifest.yaml'))
     manifest = manifest.load_bundles()
     [self.register_asset_bundle(n, manifest[n]) for n in manifest]
예제 #13
0
__author__ = 'hsk81'

###############################################################################
###############################################################################

from flask.ext.assets import Environment
from webassets.loaders import YAMLLoader

from ..app import app

###############################################################################
###############################################################################

loader = YAMLLoader (app.config['YML_FILE'])
bundles = loader.load_bundles ()

assets = Environment (app)
assets.manifest = 'cache'
assets.register (bundles)
assets.url = app.config.get ('CDN')

###############################################################################
###############################################################################
예제 #14
0
def create_app(version_path, secret_key, session_cookie_name,
               session_cookie_domain, session_cookie_secure, use_https,
               enable_asset_pipeline, lando_api_url):
    """
    Create an app instance.
    """
    csp = {
        'default-src': "'self'",
        'font-src': "'self' https://code.cdn.mozilla.net",
        'style-src': "'self' https://code.cdn.mozilla.net",
        'img-src': "'self' *.cloudfront.net *.gravatar.com "
                   "*.googleusercontent.com",
        'object-src': "'none'",
        'frame-ancestors': "'none'",
        'manifest-src': "'none'",
        'worker-src': "'none'",
        'media-src': "'none'",
        'frame-src': "'none'",
        'base-uri': "'none'",
        'report-uri': "/__cspreport__"
    }  # yapf: disable

    initialize_logging()

    app = Flask(__name__)

    # Set configuration
    app.config['VERSION_PATH'] = version_path
    log_config_change('VERSION_PATH', version_path)

    version_info = json.load(open(version_path))
    logger.info(version_info, 'app.version')

    this_app_version = version_info['version']
    initialize_sentry(app, this_app_version)

    app.config['LANDO_API_URL'] = lando_api_url
    log_config_change('LANDO_API_URL', lando_api_url)

    # Set remaining configuration
    app.config['SECRET_KEY'] = secret_key
    app.config['SESSION_COOKIE_NAME'] = session_cookie_name
    app.config['SESSION_COOKIE_DOMAIN'] = session_cookie_domain
    app.config['SESSION_COOKIE_SECURE'] = session_cookie_secure
    app.config['SERVER_NAME'] = session_cookie_domain
    app.config['USE_HTTPS'] = use_https
    app.config['PREFERRED_URL_SCHEME'] = 'https' if use_https else 'http'

    Talisman(app, content_security_policy=csp, force_https=use_https)

    # Authentication
    global oidc
    authentication = auth.OpenIDConnect(auth.OIDCConfig())
    oidc = authentication.auth(app)

    # Register routes via Flask Blueprints
    from landoui.pages import pages
    from landoui.revisions import revisions
    from landoui.dockerflow import dockerflow
    app.register_blueprint(pages)
    app.register_blueprint(revisions)
    app.register_blueprint(dockerflow)

    # Register template helpers
    from landoui.template_helpers import template_helpers
    app.register_blueprint(template_helpers)

    # Register error pages
    errorhandlers.register_error_handlers(app)

    # Setup Flask Assets
    assets = Environment(app)
    if enable_asset_pipeline:
        loader = YAMLLoader(
            os.path.join(os.path.dirname(os.path.abspath(__file__)),
                         'assets_src/assets.yml'))
        assets.register(loader.load_bundles())

    return app
예제 #15
0
def get_webassets_env_from_settings(settings, prefix='webassets'):
    """This function will take all webassets.* parameters, and
    call the ``Environment()`` constructor with kwargs passed in.

    The only two parameters that are not passed as keywords are:

    * base_dir
    * base_url

    which are passed in positionally.

    Read the ``WebAssets`` docs for ``Environment`` for more details.
    """
    # Make a dictionary of the webassets.* elements...
    kwargs = {}   # assets settings
    cut_prefix = len(prefix) + 1
    for k in settings:
        if k.startswith(prefix):
            val = settings[k]
            if isinstance(val, six.string_types):
                if val.lower() in auto_booly:
                    val = asbool(val)
                elif val.lower().startswith('json:') and k[cut_prefix:] != 'manifest':
                    val = json.loads(val[5:])
            kwargs[k[cut_prefix:]] = val

    if 'base_dir' not in kwargs:
        raise Exception("You need to provide webassets.base_dir in your configuration")
    if 'base_url' not in kwargs:
        raise Exception("You need to provide webassets.base_url in your configuration")

    asset_dir = kwargs.pop('base_dir')
    asset_url = kwargs.pop('base_url')

    if ':' in asset_dir:
        try:
            asset_dir = AssetResolver(None).resolve(asset_dir).abspath()
        except ImportError:
            pass

    if 'debug' in kwargs:
        kwargs['debug'] = maybebool(kwargs['debug'])

    if 'cache' in kwargs:
        cache = kwargs['cache'] = maybebool(kwargs['cache'])

        if cache and isinstance(cache, six.string_types) and not path.isdir(cache):
            makedirs(cache)

    # 'updater' is just passed in...

    if 'auto_build' in kwargs:
        kwargs['auto_build'] = maybebool(kwargs['auto_build'])

    if 'jst_compiler' in kwargs:
        kwargs['JST_COMPILER'] = kwargs.pop('jst_compiler')

    if 'jst_namespace' in kwargs:
        kwargs['JST_NAMESPACE'] = kwargs.pop('jst_namespace')

    if 'manifest' in kwargs:
        kwargs['manifest'] = maybebool(kwargs['manifest'])

    if 'url_expire' in kwargs:
        kwargs['url_expire'] = maybebool(kwargs['url_expire'])

    if 'static_view' in kwargs:
        kwargs['static_view'] = asbool(kwargs['static_view'])
    else:
        kwargs['static_view'] = False

    if 'cache_max_age' in kwargs:
        kwargs['cache_max_age'] = int(kwargs.pop('cache_max_age'))
    else:
        kwargs['cache_max_age'] = None

    if 'load_path' in kwargs:
        # force load_path to be an array and split on whitespace
        if not isinstance(kwargs['load_path'], list):
            kwargs['load_path'] = kwargs['load_path'].split()

    paths = kwargs.pop('paths', None)

    if 'bundles' in kwargs:
        if isinstance(kwargs['bundles'], six.string_types):
            kwargs['bundles'] = kwargs['bundles'].split()

    bundles = kwargs.pop('bundles', None)

    assets_env = Environment(asset_dir, asset_url, **kwargs)

    if paths is not None:
        for map_path, map_url in json.loads(paths).items():
            assets_env.append_path(map_path, map_url)

    def yaml_stream(fname):
        if path.exists(fname):
            return open(fname, 'rb')
        else:
            return assets_env.resolver.resolver.resolve(fname).stream()

    if isinstance(bundles, list):
        loaded = {}
        for bpath in bundles:
            with closing(yaml_stream(bpath)) as s:
                loader = YAMLLoader(s)
                loaded.update(loader.load_bundles())
        assets_env.register(loaded)
    elif isinstance(bundles, dict):
        assets_env.register(bundles)

    return assets_env
예제 #16
0
파일: resources.py 프로젝트: hyperstudio/h
def add_webassets(config):
    loader = YAMLLoader(join(dirname(__file__), 'resources.yaml'))
    bundles = loader.load_bundles()
    for name in bundles:
        config.add_webasset(name, bundles[name])
예제 #17
0
env = os.environ.get('FLASK_ENV', 'development').lower()

app = Flask(__name__, static_folder='static')

if env == 'development':
    app.config.from_object('config.DevelopmentConfig')
    from flask_debugtoolbar import DebugToolbarExtension
    DebugToolbarExtension(app)
elif env == 'production':
    app.config.from_object('config.ProductionConfig')

# Setup database
db = SQLAlchemy(app)

# Setup login manager
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'auth.login'

# Setup assets
assets_env = Environment(app)
yaml_loader = YAMLLoader(current_dir + '/assets.yml')
for name, bundle in yaml_loader.load_bundles().iteritems():
    assets_env.register(name, bundle)

# Registering blueprints:
from antiques.core.views import *  # noqa
from antiques.auth.views import auth_module  # noqa

app.register_blueprint(auth_module, url_prefix='/auth')
예제 #18
0
파일: assets.py 프로젝트: prakashru/notex
__author__ = 'hsk81'

###############################################################################
###############################################################################

from flask.ext.assets import Environment
from webassets.loaders import YAMLLoader

from ..app import app

###############################################################################
###############################################################################

loader = YAMLLoader(app.config['YML_FILE'])
bundles = loader.load_bundles()

assets = Environment(app)
assets.manifest = 'cache'
assets.register(bundles)
assets.url = app.config.get('CDN')

###############################################################################
###############################################################################
예제 #19
0
def get_webassets_env_from_settings(settings, prefix='webassets'):
    """This function will take all webassets.* parameters, and
    call the ``Environment()`` constructor with kwargs passed in.

    The only two parameters that are not passed as keywords are:

    * base_dir
    * base_url

    which are passed in positionally.

    Read the ``WebAssets`` docs for ``Environment`` for more details.
    """
    # Make a dictionary of the webassets.* elements...
    kwargs = {}   # assets settings
    cut_prefix = len(prefix) + 1
    for k in settings:
        if k.startswith(prefix):
            val = settings[k]
            if isinstance(val, six.string_types):
                if val.lower() in auto_booly:
                    val = asbool(val)
                elif val.lower().startswith('json:') and k[cut_prefix:] != 'manifest':
                    val = json.loads(val[5:])
            kwargs[k[cut_prefix:]] = val

    if 'base_dir' not in kwargs:
        raise Exception("You need to provide webassets.base_dir in your configuration")
    if 'base_url' not in kwargs:
        raise Exception("You need to provide webassets.base_url in your configuration")

    asset_dir = kwargs.pop('base_dir')
    asset_url = kwargs.pop('base_url')

    if ':' in asset_dir:
        try:
            asset_dir = AssetResolver(None).resolve(asset_dir).abspath()
        except ImportError:
            pass

    if 'debug' in kwargs:
        kwargs['debug'] = maybebool(kwargs['debug'])

    if 'cache' in kwargs:
        cache = kwargs['cache'] = maybebool(kwargs['cache'])

        if cache and isinstance(cache, six.string_types) and not path.isdir(cache):
            makedirs(cache)

    # 'updater' is just passed in...

    if 'auto_build' in kwargs:
        kwargs['auto_build'] = maybebool(kwargs['auto_build'])

    if 'jst_compiler' in kwargs:
        kwargs['JST_COMPILER'] = kwargs.pop('jst_compiler')

    if 'jst_namespace' in kwargs:
        kwargs['JST_NAMESPACE'] = kwargs.pop('jst_namespace')

    if 'manifest' in kwargs:
        kwargs['manifest'] = maybebool(kwargs['manifest'])

    if 'url_expire' in kwargs:
        kwargs['url_expire'] = maybebool(kwargs['url_expire'])

    if 'static_view' in kwargs:
        kwargs['static_view'] = asbool(kwargs['static_view'])
    else:
        kwargs['static_view'] = False

    if 'cache_max_age' in kwargs:
        kwargs['cache_max_age'] = int(kwargs.pop('cache_max_age'))
    else:
        kwargs['cache_max_age'] = None

    if 'load_path' in kwargs:
        # force load_path to be an array and split on whitespace
        if not isinstance(kwargs['load_path'], list):
            kwargs['load_path'] = kwargs['load_path'].split()

    paths = kwargs.pop('paths', None)

    if 'bundles' in kwargs:
        if isinstance(kwargs['bundles'], six.string_types):
            kwargs['bundles'] = kwargs['bundles'].split()

    bundles = kwargs.pop('bundles', None)

    assets_env = Environment(asset_dir, asset_url, **kwargs)

    if paths is not None:
        for map_path, map_url in json.loads(paths).items():
            assets_env.append_path(map_path, map_url)

    def yaml_stream(fname):
        if path.exists(fname):
            return open(fname, 'rb')
        else:
            return assets_env.resolver.resolver.resolve(fname).stream()

    if isinstance(bundles, list):
        loaded = {}
        for bpath in reversed(bundles):
            with closing(yaml_stream(bpath)) as s:
                loader = YAMLLoader(s)
                loaded.update(loader.load_bundles())
        assets_env.register(loaded)
    elif isinstance(bundles, dict):
        assets_env.register(bundles)

    return assets_env