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;'
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
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
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
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)
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
# 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']))
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))
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
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))
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))
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))