Example #1
0
class TestConfigNoAppBound:
    """The application is not bound to a specific app.
    """

    def setup(self):
        self.env = Environment()

    def test_no_app_available(self):
        """Without an application bound, we can't do much."""
        assert_raises(RuntimeError, getattr, self.env, 'url')
        assert_raises(RuntimeError, setattr, self.env, 'debug', True)
        assert_raises(RuntimeError, self.env.config.get, 'debug')

    def test_global_defaults(self):
        """We may set defaults even without an application, however."""
        self.env.config.setdefault('FOO', 'BAR')
        with Flask(__name__).test_request_context():
            assert self.env.config['FOO'] == 'BAR'

    def test_app_specific_defaults(self):
        """The defaults for url and directory are read from the app object.
        """
        app = Flask(__name__, static_path='/foo')
        self.env.init_app(app)
        with app.test_request_context():
            assert self.env.url.endswith('static')
            assert self.env.directory.endswith('foo')

            # Can be overridden
            self.env.directory = 'new_media_dir'
            assert self.env.directory == 'new_media_dir'

    def test_multiple_separate_apps(self):
        """Each app has it's own separate configuration.
        """
        app1 = Flask(__name__)
        self.env.init_app(app1)

        # With no app yet available...
        assert_raises(RuntimeError, getattr, self.env, 'url')
        # ...set a default
        self.env.config.setdefault('FOO', 'BAR')

        # When an app is available, the default is used
        with app1.test_request_context():
            assert self.env.config['FOO'] == 'BAR'

            # If the default is overridden for this application, it
            # is still valid for other apps.
            self.env.config['FOO'] = '42'
            assert self.env.config['FOO'] == '42'
            app2 = Flask(__name__)
            with app2.test_request_context():
                assert self.env.config['FOO'] == 'BAR'

    def test_key_error(self):
        """KeyError is raised if a config value doesn't exist.
        """
        with Flask(__name__).test_request_context():
            assert_raises(KeyError, self.env.config.get, 'YADDAYADDA')
Example #2
0
class TestConfigNoAppBound:
    """The application is not bound to a specific app.
    """

    def setup(self):
        self.env = Environment()

    def test_no_app_available(self):
        """Without an application bound, we can't do much."""
        assert_raises(RuntimeError, setattr, self.env, 'debug', True)
        assert_raises(RuntimeError, self.env.config.get, 'debug')

    def test_global_defaults(self):
        """We may set defaults even without an application, however."""
        self.env.config.setdefault('FOO', 'BAR')
        with Flask(__name__).test_request_context():
            assert self.env.config['FOO'] == 'BAR'

    def test_multiple_separate_apps(self):
        """Each app has it's own separate configuration.
        """
        app1 = Flask(__name__)
        self.env.init_app(app1)

        # With no app yet available...
        assert_raises(RuntimeError, getattr, self.env, 'url')
        # ...set a default
        self.env.config.setdefault('FOO', 'BAR')

        # When an app is available, the default is used
        with app1.test_request_context():
            assert self.env.config['FOO'] == 'BAR'

            # If the default is overridden for this application, it
            # is still valid for other apps.
            self.env.config['FOO'] = '42'
            assert self.env.config['FOO'] == '42'
            app2 = Flask(__name__)
            with app2.test_request_context():
                assert self.env.config['FOO'] == 'BAR'

    def test_key_error(self):
        """KeyError is raised if a config value doesn't exist.
        """
        with Flask(__name__).test_request_context():
            assert_raises(KeyError, self.env.config.__getitem__, 'YADDAYADDA')
            # The get() helper, on the other hand, simply returns None
            assert self.env.config.get('YADDAYADDA') == None
Example #3
0
class TestEnv:

    def setup(self):
        self.app = Flask(__name__)
        self.env = Environment(self.app)
        self.env.debug = True
        self.app.config.update({
            'ASSETS_DIRECTORY': '',
            'ASSETS_URL': '/foo',
        })
        self.env.register('test', 'file1', 'file2')

    def test_tag_available(self):
        """Jinja tag has been made available.
        """
        t = self.app.jinja_env.from_string('{% assets "test" %}{{ASSET_URL}};{% endassets %}');
        assert t.render() == '/foo/file1;/foo/file2;'
Example #4
0
 def setup(self):
     self.app = Flask(__name__)
     self.env = Environment(self.app)
     self.env.debug = True
     self.app.config.update({
         'ASSETS_DIRECTORY': '',
         'ASSETS_URL': '/foo',
     })
     self.env.register('test', 'file1', 'file2')
Example #5
0
class TestUrlAndDirectoryWithInitApp(object):
    """[Regression] Make sure the automatic "directory" and "url"
    values also work if the application is initialized via "init_app()".
    """

    def setup(self):
        self.app = Flask(__name__, static_path='/initapp_static')
        self.env = Environment()
        self.env.init_app(self.app)

    def test(self):
        """Make sure the "url" and "directory" config values are
        read from the Flask app.
        """
        with self.app.test_request_context():
            assert not 'url' in self.env.config
            assert Bundle('foo').urls(self.env) == ['/initapp_static/foo']

            assert not 'directory' in self.env.config
            root = self.app.root_path
            assert get_all_bundle_files(Bundle('foo'), self.env) == [root + '/static/foo']
Example #6
0
def init(app):
    """Initialize CSS and JavaScript asset bundles
    """
    js_libs = Bundle("js/libs/jquery-1.6.2.min.js",
                     "js/libs/jquery.dropkick-1.0.0.js",
                     "js/libs/json2.js",
                     "js/libs/underscore.js",
                     "js/libs/backbone.js",
                     "js/libs/swfobject.js",
                     "js/libs/spin-1.2.2.js",
                     filters="jsmin",
                     output="libs.js")

    js_common = Bundle("js/app/tools.js",
                       "js/app/common.js",
                       filters="jsmin",
                       output="common.js")

    js_home = Bundle("js/app/stats.js",
                     "js/app/home.js",
                     filters="jsmin",
                     output="home.js")

    js_profile = Bundle("js/app/profile.js",
                        filters="jsmin",
                        output="profile.js")

    css_less = Bundle("css/style.less",
                      filters="less",
                      output="style.css",
                      debug=False)

    css_main = Bundle(Bundle("css/lib/screen.css", "css/lib/dropkick.css"),
                      css_less,
                      filters="cssmin",
                      output="main.css")

    css_ie8 = Bundle("css/ie8.css", filters="cssmin", output="ie8.css")

    # Admin Assets
    js_admin_libs = Bundle("js/libs/jquery-1.6.2.min.js",
                           "js/libs/jquery-ui-1.8.16.min.js",
                           "js/libs/json2.js",
                           "js/libs/underscore.js",
                           "js/libs/backbone.js",
                           filters="jsmin",
                           output="admin_libs.js")

    js_admin_common = Bundle("js/app/admin_tools.js",
                             "js/app/admin.js",
                             filters="jsmin",
                             output="admin_common.js")

    css_admin_less = Bundle("css/admin.less",
                            filters="less",
                            output="admin.css",
                            debug=False)

    css_admin_main = Bundle("css/lib/screen.css",
                            "css/lib/smoothness/jquery-ui-1.8.16.css",
                            css_admin_less,
                            filters="cssmin",
                            output="admin_main.css")

    assets = Environment(app)
    assets.debug = app.config['ENVIRONMENT'] in ['development', 'staging']

    assets.register('js_libs', js_libs)
    assets.register('js_common', js_common)
    assets.register('js_home', js_home)
    assets.register('js_profile', js_profile)
    assets.register("css_main", css_main)
    assets.register("css_ie8", css_ie8)

    assets.register("js_admin_libs", js_admin_libs)
    assets.register("js_admin_common", js_admin_common)
    assets.register("css_admin_main", css_admin_main)
Example #7
0
Website server for geekup.in
"""

from flask import Flask
from flaskext.assets import Environment, Bundle
from flaskext.mail import Mail
from coaster import configureapp
from os import environ

# First, make an app and config it

app = Flask(__name__, instance_relative_config=True)
configureapp(app, 'GEEKUP_ENV')
mail = Mail()
mail.init_app(app)
assets = Environment(app)

# Second, setup assets

js = Bundle('js/libs/jquery-1.6.4.js',
            'js/libs/jquery.form.js',
            'js/scripts.js',
            filters='jsmin',
            output='js/packed.js')

assets.register('js_all', js)

# Third, after config, import the models and views

import geekup.models
import geekup.views
Example #8
0
from radiocrepe.web.auth import web_auth, configure_auth
from radiocrepe.web.queue import web_queue
from radiocrepe.web.hub import web_hub
from radiocrepe.web.live import web_live
from radiocrepe.web.user import web_user


app = Flask(__name__)
app.register_blueprint(web_auth)
app.register_blueprint(web_queue)
app.register_blueprint(web_hub)
app.register_blueprint(web_live)
app.register_blueprint(web_user)


assets = Environment(app)

lib_bundle = Bundle('js/jquery.js', 'js/jquery.qtip.js', 'js/underscore.js',
                    'js/backbone.js', 'js/handlebars.js',
                    filters='jsmin', output='js/gen/libs.packed.js')

rc_bundle = Bundle('js/queue.js', 'js/user_profile.js', 'js/notifications.js',
                   filters='jsmin', output='js/gen/radiocrepe.packed.js')

assets.register('js_libs', lib_bundle)
assets.register('js_app', rc_bundle)


@app.route('/song/<uid>/')
@with_hub_db
def song(db, storage, registry, uid):
Example #9
0
import os

from redis import Redis

from flask import Flask, request, g
from flaskext.assets import Environment, Bundle
from flaskext.login import (LoginManager, current_user, login_required,
                            login_user, logout_user, AnonymousUser,
                            confirm_login, fresh_login_required)


app = Flask(__name__)
app.config.from_object('gcm.config.%s' % os.environ.get('GCM_CONFIG', 'production'))
        

assets = Environment(app)
assets.register('gcm', Bundle(
    'lib/modernizer-2.0.6.js',
    'lib/jquery-1.6.1.js', 
    'jquery-ui/jquery-ui-1.8.14.custom.js', 
    'lib/underscore.js', 
    'lib/backbone.js', 
    'js/auth.js', 
    'js/tumblr.js',
    'js/instagram.js',
    'js/twitter.js',
    'js/gcm.js', 
    # filters='jsmin', 
    output='gen/gcm.js'))
    
assets.register('admin', Bundle(
Example #10
0
from flask import Flask
from flaskext.assets import Environment, Bundle
from baseframe import baseframe, baseframe_js, baseframe_css

# the flask app

app = Flask(__name__, instance_relative_config=True)

app.register_blueprint(baseframe)

assets = Environment(app)

js = Bundle(baseframe_js, 'js/leaflet.js')

css = Bundle(Bundle(baseframe_css, 'css/pyconindia.css', 'css/monitor.css',
             filters='cssmin', output='css/pyconindia-packed.css'),
             'css/leaflet.css')

assets.register('js_all', js)
assets.register('css_all', css)

# Import models and views, and register routes here

from flask import render_template, redirect, url_for

@app.route('/')
def index():
    return render_template('index.html', active=1)

# delete the rule for favicon
Example #11
0
def create_app(config=None, debug=False):
    '''
    Inicializa la aplicación Flask. Carga los siguientes módulos:
     - index: página de inicio
     - page: páginas estáticas
     - user: gestión del usuario
     - files: búsqueda y obtención de ficheros
     - status: servicio de monitorización de la aplicación

    Y además, inicializa los siguientes servicios:
     - Configuración: carga valores por defecto y modifica con el @param config
     - Web Assets: compilación y compresión de recursos estáticos
     - i18n: detección de idioma en la URL y catálogos de mensajes
     - Cache y auth: Declarados en el módulo services
     - Files y users: Clases para acceso a datos
    '''
    app = Flask(__name__)
    app.config.from_object(defaults)
    app.debug = debug

    # Configuración
    if config:
        app.config.from_object(config)

    # Configuración dependiente de la versión del código
    revision_filename_path = os.path.join(os.path.dirname(app.root_path), "revision")
    if os.path.exists(revision_filename_path):
        f = open(revision_filename_path, "r")
        data = f.read()
        f.close()
        revisions = tuple(
            tuple(i.strip() for i in line.split("#")[0].split())
            for line in data.strip().split("\n")
            if line.strip() and not line.strip().startswith("#"))
        revision_hash = md5(data).hexdigest()
        app.config.update(
            CACHE_KEY_PREFIX = "%s%s/" % (
                app.config["CACHE_KEY_PREFIX"] if "CACHE_KEY_PREFIX" in app.config else "",
                revision_hash
                ),
            REVISION_HASH = revision_hash,
            REVISION = revisions
            )
    else:
        app.config.update(
            REVISION_HASH = None,
            REVISION = ()
            )

    # Gestión centralizada de errores
    sentry.init_app(app)
    logging.getLogger().setLevel(logging.DEBUG if debug else logging.INFO)
    setup_logging(SentryHandler(sentry.client))

    # Registra filtros de plantillas
    register_filters(app)

    # Oauth
    init_oauth(app)

    # Blueprints
    app.register_blueprint(index)
    app.register_blueprint(page)
    app.register_blueprint(user)
    app.register_blueprint(files)
    app.register_blueprint(control)
    app.register_blueprint(api)

    # Web Assets
    if not os.path.isdir(app.static_folder+"/gen"): os.mkdir(app.static_folder+"/gen")
    assets = Environment(app)
    assets.debug = app.debug

    register_filter(JsSlimmer)
    register_filter(CssSlimmer)

    assets.register('js_all', Bundle('js/jquery.js', 'js/jquery-ui.js', 'js/files.js', filters='rjsmin', output='gen/packed.js'))
    assets.register('css_all', Bundle('css/main.css', filters=('css_slimmer',), output='gen/packed.css'))
    assets.register('css_ie7', Bundle('css/ie7.css', filters=('css_slimmer',), output='gen/ie7.css'))

    assets.register('js_admin', Bundle('js/jquery.js', 'js/admin.js', filters='rjsmin', output='gen/admin_packed.js'))
    assets.register('css_admin', Bundle('css/admin.css', filters=('css_slimmer',), output='gen/admin_packed.css'))

    # Detección de idioma
    @app.url_defaults
    def add_language_code(endpoint, values):
        '''
        Añade el código de idioma a una URL que lo incluye.
        '''
        if 'lang' in values or not g.lang:
            return
        if app.url_map.is_endpoint_expecting(endpoint, 'lang'):
            values['lang'] = g.lang

    pull_lang_code_languages = tuple(
        (code,localedata.load(code)["languages"][code].capitalize(), code in app.config["BETA_LANGS"])
        for code in app.config["ALL_LANGS"])
    @app.url_value_preprocessor
    def pull_lang_code(endpoint, values):
        '''
        Carga el código de idioma en la variable global.
        '''
        # obtiene el idioma de la URL
        g.url_lang = None
        if values is not None:
            g.url_lang = values.pop('lang', None)

        # si esta lista de idiomas permitidos
        if g.url_lang and g.url_lang in app.config["ALL_LANGS"]:
            g.lang = g.url_lang
        # si el usuario esta logueado y tiene establecido el idioma se asigna ese
        elif "user" in session and "lang" in session["user"]:
            g.lang = session["user"]["lang"]
        # sino se coge el que mas convenga dependiendo del que tenga establecido en su navegador o el idioma por defecto
        elif request.accept_languages.values()!=[]:
            g.lang = request.accept_languages.best_match(app.config["ALL_LANGS"],app.config["LANGS"][0])
        # y sino se pone el idioma por defecto
        else:
            g.lang = app.config["LANGS"][0]

        # se carga la lista de idiomas como se dice en cada idioma
        g.languages = pull_lang_code_languages
        g.beta_lang = g.lang in app.config["BETA_LANGS"]

    # Traducciones
    babel.init_app(app)

    @babel.localeselector
    def get_locale():
        '''
        Devuelve el código del idioma activo.
        '''
        try: return g.lang
        except: return "en"

    # Cache
    cache.init_app(app)

    # Autenticación
    auth.setup_app(app)
    auth.login_view="user.login"
    auth.login_message="login_required"

    @auth.user_loader
    def load_user(userid):
        user = User(userid)
        if not user.has_data:
            data = usersdb.find_userid(userid)
            if data is None:
                return None
            user.set_data(data)
        return user

    # Mail
    mail.init_app(app)

    # Acceso a bases de datos
    filesdb.init_app(app)
    usersdb.init_app(app)
    pagesdb.init_app(app)
    feedbackdb.init_app(app)

    # Actualizador del contador de ficheros
    lastcount = [filesdb.count_files()]
    def countupdater():
        lastcount[0] = long(filesdb.count_files())
    eventmanager.interval(app.config["COUNT_UPDATE_INTERVAL"], countupdater)

    # Refresco de conexiones
    eventmanager.interval(app.config["FOOCONN_UPDATE_INTERVAL"], filesdb.load_servers_conn)

    profiler.init_app(app, feedbackdb)

    # Carga la traducción alternativa
    fallback_lang = support.Translations.load(os.path.join(app.root_path, 'translations'), ["en"])

    @app.before_request
    def before_request():
        # si el idioma de la URL es inválido, devuelve página no encontrada
        if g.url_lang and not g.url_lang in app.config["ALL_LANGS"]:
            abort(404)

        # quita todas las / finales de una URL
        if request.path != '/' and request.path.endswith('/'):
            return redirect(u(request.url).replace(u(request.path), u(request.path)[:-1]),301)

        # ignora peticiones sin blueprint
        if request.blueprint is None:
            return

        # si no es el idioma alternativo, lo añade por si no se encuentra el mensaje
        if g.lang!="en":
            get_translations().add_fallback(fallback_lang)

        # dominio de la web
        g.domain = request.url_root[7:-1] if "https" not in request.url_root else request.url_root[8:-1]
        # título de la página por defecto
        g.title = g.domain
        # contador de archivos totales
        g.count_files = lastcount[0]

    '''
    # TODO: Buscar una forma mejor de hacer esto
    @app.after_request
    def after_request(response):
        if response.mimetype == "text/html":
            response.data = html_slimmer(response.data)
        return response
    '''

    # Páginas de error
    @app.errorhandler(400)
    @app.errorhandler(401)
    @app.errorhandler(403)
    @app.errorhandler(404)
    @app.errorhandler(405)
    @app.errorhandler(408)
    @app.errorhandler(409)
    @app.errorhandler(410)
    @app.errorhandler(411)
    @app.errorhandler(412)
    @app.errorhandler(413)
    @app.errorhandler(414)
    @app.errorhandler(415)
    @app.errorhandler(416)
    @app.errorhandler(417)
    @app.errorhandler(418)
    @app.errorhandler(500)
    @app.errorhandler(501)
    @app.errorhandler(502)
    @app.errorhandler(503)
    def all_errors(e):
        error=str(e.code)
        message=_("error_"+error+"_message")
        description=_("error_"+error+"_description")
        g.title=error+" "+message if message!="error_"+error+"_message" else e.message.replace("<p>","").replace("</p>","")
        g.count_files = lastcount[0]
        return render_template('error.html',
            zone="errorhandler",
            error=error,
            description=description if description!="error_"+error+"_description" else e.description.replace("<p>","").replace("</p>","")
        ), e.code

    return app
Example #12
0
from flask import Flask, session, g, render_template
from flaskext.assets import Environment, Bundle
from jousse_blog.views import general

import websiteconfig as config
import os, sys

app = Flask(__name__)
app.debug = config.DEBUG
app.secret_key = config.SECRET_KEY

assets = Environment(app)
assets.directory = os.path.join(os.path.abspath(os.path.dirname(__file__)),'.','static')

js = Bundle('javascripts/jquery.js', 'javascripts/cufon-yui.js',
            'javascripts/cufon.fonts.js',
            'javascripts/scripts.js',
            filters='jsmin', output='javascripts/packed.js')


css = Bundle('stylesheets/build.css',
            filters='cssmin', output='stylesheets/packed.css')

assets.register('js_all', js)
assets.register('css_all', css)

@app.errorhandler(404)
def not_found(error):
    return render_template('404.html'), 404

Example #13
0
def init(app):
    """Initialize CSS and JavaScript asset bundles
    """
    js_libs = Bundle("js/libs/jquery-1.6.2.min.js",
                     "js/libs/jquery.dropkick-1.0.0.js", 
                     "js/libs/json2.js", 
                     "js/libs/underscore.js", 
                     "js/libs/backbone.js", 
                     "js/libs/swfobject.js", 
                     "js/libs/spin-1.2.2.js",
                     filters="jsmin", 
                     output="libs.js")
    
    js_common = Bundle("js/app/tools.js", 
                       "js/app/common.js", 
                       filters="jsmin", 
                       output="common.js")
    
    js_home = Bundle("js/app/stats.js",
                     "js/app/home.js",
                     filters="jsmin", 
                     output="home.js")
    
    js_profile = Bundle("js/app/profile.js", 
                        filters="jsmin", 
                        output="profile.js")
    
    css_less = Bundle("css/style.less", 
                      filters="less", 
                      output="style.css", 
                      debug=False)
    
    css_main = Bundle(Bundle("css/lib/screen.css",
                             "css/lib/dropkick.css"), 
                      css_less, 
                      filters="cssmin", 
                      output="main.css")
    
    css_ie8 = Bundle("css/ie8.css",filters="cssmin", output="ie8.css")
    
    # Admin Assets
    js_admin_libs = Bundle("js/libs/jquery-1.6.2.min.js", 
                           "js/libs/jquery-ui-1.8.16.min.js",
                           "js/libs/json2.js", 
                           "js/libs/underscore.js", 
                           "js/libs/backbone.js",
                           filters="jsmin", 
                           output="admin_libs.js")
    
    js_admin_common = Bundle("js/app/admin_tools.js", 
                             "js/app/admin.js",
                             filters="jsmin", 
                             output="admin_common.js")
    
    css_admin_less = Bundle("css/admin.less",
                            filters="less", 
                            output="admin.css", 
                            debug=False)
    
    css_admin_main = Bundle("css/lib/screen.css", 
                            "css/lib/smoothness/jquery-ui-1.8.16.css", 
                            css_admin_less, 
                            filters="cssmin", 
                            output="admin_main.css")
    
    assets = Environment(app)
    assets.debug = app.config['ENVIRONMENT'] in ['development', 'staging']
    
    assets.register('js_libs', js_libs)
    assets.register('js_common', js_common)
    assets.register('js_home', js_home)
    assets.register('js_profile', js_profile)
    assets.register("css_main", css_main)
    assets.register("css_ie8", css_ie8)
    
    assets.register("js_admin_libs", js_admin_libs)
    assets.register("js_admin_common", js_admin_common)
    assets.register("css_admin_main", css_admin_main)
Example #14
0
 def setup(self):
     self.app = Flask(__name__, static_path='/initapp_static')
     self.env = Environment()
     self.env.init_app(self.app)
Example #15
0
# encoding=utf-8

import os
import time

from redis import Redis

from flask import Flask, request, g
from flaskext.assets import Environment, Bundle


app = Flask(__name__)
app.config.from_object('gummiognina.config.%s' % os.environ.get('GUMMIOGNINA_CONFIG', 'production'))


assets = Environment(app)
assets.register('js', Bundle(
    
    'lib/modernizer-2.0.6.js',
    'lib/jquery-1.6.1.js', 
    'lib/jquery.appear.js', 
    'lib/underscore.js', 
    'lib/backbone.js', 
    'js/gummiognina.js', 
    
    # filters='jsmin', 
    output='gen/gummiognina.js'))

#if not app.debug:
#    from .loggers import configure_logging
#    configure_logging(app)
Example #16
0
import os
from flask import Flask, render_template
from flaskext.assets import Environment, Bundle
import feedparser

app = Flask(__name__)
assets = Environment(app)
app.debug = True

app.config['LESS_PATH'] = '/usr/local/bin/lessc'

js = Bundle('scripts/jquery-1.7.1.min.js',
            filters='jsmin',
            output='scripts/gen.js')
assets.register('all-js', js)


@app.route('/')
def hello():
    return render_template('index.html')


if __name__ == '__main__':
    port = int(os.environ.get("PORT", "5000"))
    app.run(host='0.0.0.0', port=port)
Example #17
0
 def setup(self):
     self.env = Environment()
Example #18
0
#!/usr/bin/env python
import sys
from os import path
sys.path.insert(0, path.join(path.dirname(__file__), '../src'))

from flask import Flask, render_template, url_for
from flaskext.assets import Environment, Bundle

app = Flask(__name__)

assets = Environment(app)
assets.register('main',
                'style1.css', 'style2.css',
                output='cached.css', filters='cssmin')

@app.route('/')
def index():
    return render_template('index.html')


app.run(debug=True)
Example #19
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
Website server for rootconf.
"""

from flask import Flask
from flaskext.assets import Environment, Bundle
from baseframe import baseframe, baseframe_js, baseframe_css
from os import environ
from coaster import configureapp

# First, make an app and config it

app = Flask(__name__, instance_relative_config=True)
configureapp(app, "ROOTCONF_ENV")

app.register_blueprint(baseframe)
assets = Environment(app)
js = Bundle(baseframe_js, "js/leaflet.js")
css = Bundle(baseframe_css, "css/rootconf.css", "css/monitor.css")
assets.register("js_all", js)
assets.register("css_all", css)

import rootconf.views

if environ.get("ROOTCONF_ENV") == "production":
    import rootconf.loghandler
Example #20
0
Function:           %(funcName)s
Time:               %(asctime)s

Message:

%(message)s
    '''.strip()))
    mail_handler.setLevel(logging.ERROR)
    app.logger.addHandler(mail_handler)
    app.logger.info("Emailing on error is ENABLED")
else:
    app.logger.info("Emailing on error is DISABLED")

# Assets
from flaskext.assets import Environment
assets = Environment(app)
# Ensure output directory exists
assets_output_dir = os.path.join(FLASK_APP_DIR, 'static', 'gen')
if not os.path.exists(assets_output_dir):
    os.mkdir(assets_output_dir)

# Email
from flaskext.mail import Mail
mail = Mail(app)

# Memcache
from werkzeug.contrib.cache import MemcachedCache
app.cache = MemcachedCache(app.config['MEMCACHED_SERVERS'])
def cache_fetch(key, value_function, timeout=None):
    '''Mimicking Rails.cache.fetch'''
    global app