Пример #1
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;'

    def test_from_yaml(self):
        """YAML configuration gets loaded
        """
        f = open('test.yaml', 'w')
        f.write("""
        yamltest:
            contents:
                - yamlfile1
                - yamlfile2
        """)
        f.close()

        self.env.from_yaml('test.yaml')

        t = self.app.jinja_env.from_string('{% assets "yamltest" %}{{ASSET_URL}};{% endassets %}')
        assert t.render() == '/foo/yamlfile1;/foo/yamlfile2;'

        os.remove('test.yaml')

    def test_from_python_module(self):
        """Python configuration module gets loaded
        """
        import types
        module = types.ModuleType('test')
        module.pytest = Bundle('pyfile1', 'pyfile2')

        self.env.from_module(module)

        t = self.app.jinja_env.from_string('{% assets "pytest" %}{{ASSET_URL}};{% endassets %}')
        assert t.render() == '/foo/pyfile1;/foo/pyfile2;'
Пример #2
0
def create_app():
    app = Flask(__name__)
    app.config.from_object('piradio.config')
    app.config.from_envvar('PIRADIO_CONFIG')

    from .views import views
    app.register_blueprint(views)

    cur_dir = os.path.join(os.path.dirname(__file__))

    # webassets config

    app.config.update({
        'PYSCSS_STATIC_ROOT': 'static/scss',
        'PYSCSS_STATIC_URL': '/static/',
        'PYSCSS_LOAD_PATHS': [os.path.join(cur_dir, 'static/scss'),
                             os.path.join(cur_dir, 'static/scss/lib')]
    })

    assets = Environment(app)
    assets.from_yaml(os.path.join(cur_dir, 'bundles.yaml'))

    # Logging setup!

    scss_logger = logging.getLogger('scss')

    db.init_app(app)

    # HACKY!
    for handler in app.logger.handlers:
        scss_logger.addHandler(handler)

    if not app.debug:
        file_handler = FileHandler('error.log')
        file_handler.setFormatter(Formatter('%(asctime)s %(levelname)s: %(message)s '
                                            '[in %(pathname)s:%(lineno)d]'))
        app.logger.setLevel(logging.INFO)
        file_handler.setLevel(logging.INFO)
        app.logger.addHandler(file_handler)
        app.logger.info('errors')

    return app
Пример #3
0
def create_app(config=None):
    """ config should be a python file """
    app = Flask(__name__.split('.')[0], instance_relative_config=True)

    app.config.from_object('config')
    app.config.from_pyfile('config.py')

    if config is not None:
        app.config.from_pyfile(config)
        app.logger.info('Using config file: {}'.format(config))

    db.init_app(app)

    #Security
    csrf.init_app(app)

    load_blueprints(app)

    # assets
    assets_env = Environment(app=app)
    assets_env.from_yaml('assets.yml')

    return app
Пример #4
0
def create_app(config=None):
    """ config should be a python file """
    app = Flask(__name__.split('.')[0], instance_relative_config=True)

    app.config.from_object('config')
    app.config.from_pyfile('config.py')

    if config is not None:
        app.config.from_pyfile(config)
        app.logger.info('Using config file: {}'.format(config))

    db.init_app(app)

    #Security
    csrf.init_app(app)

    load_blueprints(app)

    # assets
    assets_env = Environment(app=app)
    assets_env.from_yaml('assets.yml')

    return app
Пример #5
0
def init_app(app):

    # Initialize webassets, the asset pipeline
    assets = Environment(app)
    assets.debug = app.config['DEBUG']

    cur_path = os.path.dirname(os.path.abspath(__file__))
    assets_load_path = os.path.join(cur_path, 'static')

    if ('WEBASSETS_PATH' in app.config):
        assets_load_path = app.config['WEBASSETS_PATH']
        logger.debug('Using asset directory specified in config.')

    logger.debug('Using asset directory of: {0}.'.format(assets_load_path))

    # Output path for compiled assets
    assets.directory = os.path.join(cur_path, 'static')
    assets.url = '/static/'
    assets.from_yaml(os.path.join(cur_path, 'assets.yml'))
    assets.config['closure_compressor_optimization'] = 'SIMPLE_OPTIMIZATIONS'
    assets.config['closure_extra_args'] = ['--language_in', 'ECMASCRIPT5']
    assets.append_path(assets_load_path)

    return assets
Пример #6
0
migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)

# add commands to manage chart cache
from whiskyton.managers.charts import ChartsCommand
manager.add_command('charts', ChartsCommand)

# add command to save analytics data via FTP
from whiskyton.managers.anaytics import AnalyticsCommand
manager.add_command('analytics', AnalyticsCommand)

# enable gzip compression
Compress(app)

# scss
assets = Environment(app)
assets.load_path = [app.config['BASEDIR'].child('whiskyton')]
assets.from_yaml(app.config['BASEDIR'].child('whiskyton', 'assets.yaml'))

# register blueprints
from whiskyton.blueprints.site import site
from whiskyton.blueprints.files import files
app.register_blueprint(site)
app.register_blueprint(files)

# log errors
log_handler = StreamHandler()
app.logger.setLevel(logging.DEBUG)
app.logger.addHandler(log_handler)
Пример #7
0
def create_app(app_name, config_obj, with_api=True):
    """ Generates and configures the main shop application. All additional """
    # Launching application
    app = Flask(app_name)  # So the engine would recognize the root package

    # Load Configuration
    app.config.from_object(config_obj)

    # Loading assets
    assets = Environment(app)
    assets.from_yaml('assets.yaml')
    app.assets = assets

    # Initialize Mail
    app.mail = Mail(app)

    # Initializing login manager
    login_manager = LoginManager()
    login_manager.login_view = app.config.get('LOGIN_VIEW', 'main.index')
    # login_manager.login_message = 'You need to be logged in to access this page'
    login_manager.session_protection = 'strong'
    login_manager.setup_app(app)
    app.login_manager = login_manager

    # Initializing principal manager
    app.principal = Principal(app)

    # Initializing bcrypt password encryption
    bcrypt = Bcrypt(app)
    app.bcrypt = bcrypt

    # Initializing Database
    db = SQLAlchemy(app)
    app.db = db

    # Initializing Migrate
    migrate = Migrate(app, db, "from fitted.models import *")
    app.migrate = migrate

    photos = UploadSet('photos', IMAGES)
    archives = UploadSet('archives', ARCHIVES)

    configure_uploads(app, (photos, archives))

    patch_request_class(app,
                        2 * 1024 * 1024)  # Patches to 2MB file uploads max.

    app.photos = photos
    app.archives = archives

    # Integrate Elasticsearch

    es_config = app.config.get("ES_CONFIG", [])

    app.es = Elasticsearch(es_config)

    # Integrate sms with Twilio
    app.sms = TwilioRestClient(app.config.get("TWILIO_API_SID"),
                               app.config.get("TWILIO_API_TOKEN"))

    # Redis store for session management
    # The process running Flask needs write access to this directory:
    # store = RedisStore(redis.StrictRedis())

    # # this will replace the app's session handling
    # KVSessionExtension(store, app)

    # configure sentry
    # if not app.config.get("DEBUG", False):
    # 	sentry = Sentry(app)

    # 	app.sentry = sentry

    # inject celery into the app
    app.celery = make_celery(app)

    # injecting mongodb support
    # app.mongo = PyMongo(app)

    # flask s3 integration
    app.s3 = FlaskS3(app)

    # Facebook & Twitter Integration
    app.facebook = oauth.remote_app('facebook', app_key='FACEBOOK')

    oauth.init_app(app)

    # Initializing the restful API
    if with_api:
        api = restful.Api(app, prefix='/api/v1')
        app.api = api

    # Initialize Logging
    if not app.debug:
        import logging
        from logging.handlers import RotatingFileHandler
        file_handler = RotatingFileHandler(
            "/var/log/fitted/%s.log" %
            app.config.get("LOGFILE_NAME", app_name),
            maxBytes=500 * 1024)
        file_handler.setLevel(logging.WARNING)
        from logging import Formatter
        file_handler.setFormatter(
            Formatter('%(asctime)s %(levelname)s: %(message)s '
                      '[in %(pathname)s:%(lineno)d]'))
        app.logger.addHandler(file_handler)

    #include an api_registry to the application
    app.api_registry = []  #a simple list holding the values to be registered

    return app
Пример #8
0
# init the login manager
lm = LoginManager()
lm.init_app(app)
lm.login_view = '/login'
lm.login_message = {'type': 'info', 'text': lm.login_message}

# enable gzip compression
Compress(app)

# assets
site_path = app.config['BASEDIR'].child('findaconf', 'blueprints', 'site')
bower_path = app.config['BASEDIR'].child('findaconf', 'bower')
assets = Environment(app)
assets.config['PYSCSS_LOAD_PATHS'] = [bower_path.child('foundation', 'scss')]
assets.load_path = [site_path, bower_path]
assets.from_yaml(app.config['BASEDIR'].child('findaconf', 'assets.yml'))

# manage errors
if not app.config['DEBUG']:
    import logging
    from logging.handlers import RotatingFileHandler
    filepath = app.config['BASEDIR'].child('errors.log')
    handler = RotatingFileHandler(filepath, 'a', 1 * 1024 * 1024, 10)
    row = '%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]'
    formatter = logging.Formatter(row)
    handler.setFormatter(formatter)
    handler.setLevel(logging.INFO)
    app.logger.setLevel(logging.INFO)
    app.logger.addHandler(handler)
    app.logger.info('{} started successfully.'.format(app.config['TITLE']))
Пример #9
0
from flask import Blueprint
from flask import render_template
from flask import redirect
from flask import url_for
from flask.ext.assets import Bundle, Environment

assets = Environment()
assets.from_yaml("timerboard/static/vendor.yaml")
assets.from_yaml("timerboard/static/custom.yaml")

mod = Blueprint('assets', __name__, template_folder='templates')


@mod.route("/fonts/<path:filename>")
def fonts(filename):
    return redirect(
        url_for('static',
                filename="bower_components/font-awesome/fonts/" + filename))
Пример #10
0
migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)

# add commands to manage chart cache
from whiskyton.managers.charts import ChartsCommand
manager.add_command('charts', ChartsCommand)

# add command to save analytics data via FTP
from whiskyton.managers.anaytics import AnalyticsCommand
manager.add_command('analytics', AnalyticsCommand)

# enable gzip compression
Compress(app)

# scss
assets = Environment(app)
assets.load_path = [app.config['BASEDIR'].child('whiskyton')]
assets.from_yaml(app.config['BASEDIR'].child('whiskyton', 'assets.yaml'))

# register blueprints
from whiskyton.blueprints.site import site
from whiskyton.blueprints.files import files
app.register_blueprint(site)
app.register_blueprint(files)

# log errors
log_handler = StreamHandler()
app.logger.setLevel(logging.DEBUG)
app.logger.addHandler(log_handler)
Пример #11
0
def create_app(app_name, config_obj, with_api=True):
	""" Generates and configures the main shop application. All additional """
	# Launching application
	app = Flask(app_name) # So the engine would recognize the root package

	# Load Configuration
	app.config.from_object(config_obj)

	# Loading assets
	assets = Environment(app)
	assets.from_yaml('assets.yaml')
	app.assets = assets

	# Initialize Mail
	app.mail = Mail(app)

	# Initializing login manager
	login_manager = LoginManager()
	login_manager.login_view = app.config.get('LOGIN_VIEW', 'main.index')
	# login_manager.login_message = 'You need to be logged in to access this page'
	login_manager.session_protection = 'strong'
	login_manager.setup_app(app)
	app.login_manager = login_manager

	# Initializing principal manager
	app.principal = Principal(app)

	# Initializing bcrypt password encryption
	bcrypt = Bcrypt(app)
	app.bcrypt = bcrypt

	# Initializing Database
	db = SQLAlchemy(app)
	app.db = db

	# Initializing Migrate
	migrate = Migrate(app, db, "from fitted.models import *")
	app.migrate = migrate

	photos = UploadSet('photos', IMAGES)
	archives = UploadSet('archives', ARCHIVES)

	configure_uploads(app, (photos, archives))

	patch_request_class(app, 2 * 1024 * 1024) # Patches to 2MB file uploads max.

	app.photos = photos
	app.archives = archives

	# Integrate Elasticsearch

	es_config = app.config.get("ES_CONFIG", [])

	app.es = Elasticsearch(es_config)

	# Integrate sms with Twilio
	app.sms = TwilioRestClient(app.config.get("TWILIO_API_SID"), app.config.get("TWILIO_API_TOKEN"))


	# Redis store for session management
	# The process running Flask needs write access to this directory:
	# store = RedisStore(redis.StrictRedis())

	# # this will replace the app's session handling
	# KVSessionExtension(store, app)

	# configure sentry
	# if not app.config.get("DEBUG", False):
	# 	sentry = Sentry(app)

	# 	app.sentry = sentry

	# inject celery into the app
	app.celery = make_celery(app)

	# injecting mongodb support
	# app.mongo = PyMongo(app)

	# flask s3 integration
	app.s3 = FlaskS3(app)


	# Facebook & Twitter Integration
	app.facebook = oauth.remote_app('facebook',
		app_key='FACEBOOK'
	)


	oauth.init_app(app)



	# Initializing the restful API
	if with_api:
		api = restful.Api(app, prefix='/api/v1')
		app.api = api

	# Initialize Logging
	if not app.debug:
		import logging
		from logging.handlers import RotatingFileHandler
		file_handler = RotatingFileHandler("/var/log/fitted/%s.log" % app.config.get("LOGFILE_NAME", app_name), maxBytes=500*1024)
		file_handler.setLevel(logging.WARNING)
		from logging import Formatter
		file_handler.setFormatter(Formatter(
		    '%(asctime)s %(levelname)s: %(message)s '
		    '[in %(pathname)s:%(lineno)d]'
		))
		app.logger.addHandler(file_handler)

	#include an api_registry to the application
	app.api_registry = [] #a simple list holding the values to be registered

	return app
Пример #12
0
from flask import Blueprint
from flask import render_template
from flask import redirect
from flask import url_for
from flask.ext.assets import Bundle, Environment

assets = Environment()
assets.from_yaml("timerboard/static/vendor.yaml")
assets.from_yaml("timerboard/static/custom.yaml")

mod = Blueprint('assets', __name__, template_folder='templates')

@mod.route("/fonts/<path:filename>")
def fonts(filename):
	return redirect(url_for('static', filename="bower_components/font-awesome/fonts/"+filename))
Пример #13
0
from flask import Blueprint
from flask import render_template
from flask import redirect
from flask import url_for
from flask.ext.assets import Bundle, Environment

assets = Environment()
assets.from_yaml("static/vendor.yaml")
assets.from_yaml("static/custom.yaml")

mod = Blueprint('assets', __name__, template_folder='templates')


@mod.route("/fonts/<path:filename>")
def fonts(filename):
    return redirect(
        url_for('static',
                filename="bower_components/font-awesome/fonts/" + filename))
Пример #14
0
from flask import Blueprint
from flask import render_template
from flask import redirect
from flask import url_for
from flask.ext.assets import Bundle, Environment

assets = Environment()
assets.from_yaml("static/vendor.yaml")
assets.from_yaml("static/custom.yaml")

mod = Blueprint('assets', __name__, template_folder='templates')

@mod.route("/fonts/<path:filename>")
def fonts(filename):
	return redirect(url_for('static', filename="bower_components/font-awesome/fonts/"+filename))