def create_app(config): """A factory that returns an application object from the passed config. The factory accepts further configuration from ENV variables. Some simple checks for core configuration settings are made to raise errors early if vital information is missing. """ import os from flask import Flask from flask.ext.babel import Babel from flask.ext.cors import CORS from flask.ext.markdown import Markdown # from flask.ext.assets import Environment, Bundle from .components import api, pages from .components.commons import context_processors, encoders app_label = 'web' # Get the static and template folder for the passed theme static_folder = os.path.join('theme', 'static') template_folder = os.path.join('theme', 'templates') # Construct app and service objects app = Flask(app_label, template_folder=template_folder, static_folder=static_folder, static_url_path='/static') trans = Babel() cors = CORS(resources=r'/api/*', allow_headers='Content-Type') # assets = Environment() # Configure the app with defaults app.config.from_object(config) # Set app core services trans.init_app(app) cors.init_app(app) # assets.init_app(app) Markdown(app) # Register routable components app.register_blueprint(api.blueprint) app.register_blueprint(pages.blueprint) # Set additional jinja2 extensions app.jinja_env.add_extension('jinja2.ext.do') # Set custom context processors app.context_processor(context_processors.inject_app_data) # Set custom encoders app.json_encoder = encoders.JSONEncoder # Register webassets bundles # sass = Bundle('css/base.scss', filters='pyscss', output='css/base.css') # assets.register('sass', sass) return app
def register_babel(app): babel = Babel(app) babel.init_app(app) app.babel = babel locales = app.config.locales_available ensure_translations_exist(locales) @app.before_request def append_session_globals(): """ Add two-character and three-char session locale to global template contexts: session_locale, session_locale_long_iso. """ from i18n.utils import iso_filter from itertools import izip_longest loc = get_locale() app.jinja_env.globals['session_locale'] = loc app.jinja_env.globals['zip'] = zip app.jinja_env.globals['izip_longest'] = izip_longest app.jinja_env.globals['session_locale_long_iso'] = iso_filter(loc) @app.babel.localeselector def get_locale(): """ This function defines the behavior involved in selecting a locale. """ # TODO: redo this method such that it receives the language from: # 1. language requested in the query string # 2. language associated with the session # 3. guess from Accept-Language header: # >>> request.accept_languages.best_match(['crk-Macr', 'crk-Cans', 'crk', 'en']) # Does the locale exist already? ses_lang = session.get('locale', None) forced_ses_lang = session.get('force_locale', None) if forced_ses_lang is not None: return forced_ses_lang elif ses_lang is not None: return ses_lang else: # Is there a default locale specified in config file? ses_lang = app.config.default_locale if not app.config.default_locale: # Guess the locale based on some magic that babel performs # on request headers. ses_lang = request.accept_languages.best_match(locales) # Append to session session.locale = ses_lang app.jinja_env.globals['session'] = session return ses_lang return app
def babel_init(app): babel = Babel() babel.init_app(app) @babel.timezoneselector def get_timezone(): timezone = request.cookies.get('timezone') if timezone is not None: timezone = unquote(timezone) return timezone
def register_babel(app): babel = Babel(app) babel.init_app(app) app.babel = babel @app.before_request def append_session_globals(): """ Add two-character and three-char session locale to global template contexts: session_locale, session_locale_long_iso. """ loc = get_locale() app.jinja_env.globals['session_locale'] = loc @babel.localeselector def get_locale(): """ This function defines the behavior involved in selecting a locale. """ default_locale = 'nb' # Does the locale exist already? ses_lang = session.get('locale', None) if ses_lang is not None: return ses_lang else: # Is there a default locale specified in config file? ses_lang = default_locale session.locale = ses_lang session['locale'] = ses_lang app.jinja_env.globals['session'] = session return ses_lang return app
def init_i18n(app): from flask.ext.babel import Babel babel = Babel(app) babel.init_app(app)
try: from wtforms.fields import HiddenField except ImportError: def is_hidden_field_filter(field): raise RuntimeError('WTForms is not installed.') else: def is_hidden_field_filter(field): return isinstance(field, HiddenField) login_manager = LoginManager() babel = Babel() app = Flask(__name__) login_manager.init_app(app) babel.init_app(app) app.jinja_env.globals['bootstrap_is_hidden_field'] =\ is_hidden_field_filter # in a real app, these should be configured through Flask-Appconfig app.config['SECRET_KEY'] = 'devkey' app.config['RECAPTCHA_PUBLIC_KEY'] = \ '6Lfol9cSAAAAADAkodaYl9wvQCwBMr3qGR_PPHcw' # import all files inside the view module from domogik.admin.views.index import * from domogik.admin.views.login import * from domogik.admin.views.clients import * from domogik.admin.views.orphans import *
import ldap.resiter import ldappool import passlib.hash from werkzeug.datastructures import WWWAuthenticate import wrapt from wtforms import (PasswordField, SelectMultipleField, StringField, TextAreaField) from wtforms.validators import DataRequired, Email, EqualTo, Length app = Flask('adminldap') app.config.from_object('adminldap.defaults.Settings') app.config.from_envvar('ADMINLDAP_SETTINGS', silent=True) login_manager = LoginManager() login_manager.init_app(app) babel = Babel() babel.init_app(app) app.jinja_env.globals['OrderedDict'] = collections.OrderedDict USER_DISPLAY_ATTRIBUTES = [ 'uid', 'givenName', 'sn', 'mail', 'mobile', 'createTimestamp', 'modifyTimestamp' ] GROUP_DISPLAY_ATTRIBUTES = [ 'cn', 'description', 'createTimestamp', 'modifyTimestamp' ] LDAP_TIME_FORMAT = '%Y%m%d%H%M%SZ' User = collections.namedtuple( 'User', ('dn', 'uid', 'givenName', 'sn', 'userPassword', 'mail', 'mobile', 'createTimestamp', 'modifyTimestamp'))
def make_app(): babel = Babel() security = Security() social = Social() user_datastore = SQLAlchemyUserDatastore(mdl.DB, mdl.User, mdl.Role) app = Flask(__name__) @login_failed.connect_via(app) def auto_add_user(sender, provider, oauth_response): connection_values = get_connection_values_from_oauth_response( provider, oauth_response) email = connection_values['email'] if not email or not email.strip(): email = '' if provider.name.lower() == 'facebook': fname = connection_values['full_name'] email = fb.get_email(oauth_response) elif provider.name.lower() == 'twitter': fname = connection_values['display_name'][1:] # cut off leading @ else: fname = connection_values['display_name'] user = user_datastore.create_user( email=email, name=fname, active=True, confirmed_at=datetime.now(), ) role_query = mdl.DB.session.query(mdl.Role).filter_by( name='authenticated') try: role = role_query.one() except NoResultFound: role = mdl.Role(name='authenticated') user.roles.append(role) user_datastore.commit() connection_values['user_id'] = user.id connect_handler(connection_values, provider) login_user(user) mdl.DB.session.commit() flash(gettext( 'Successfully linked login with {}. ' 'Ignore the message saying: "{}"').format( provider.name, '... account not associated with an existing user'), 'info') return redirect(url_for('root.profile')) app.user_datastore = user_datastore app.localconf = lconf = Config('mamerwiselen', 'lost-tracker', version='2.0', require_load=True) app.config['SECRET_KEY'] = lconf.get('app', 'secret_key') app.config['SQLALCHEMY_DATABASE_URI'] = lconf.get('db', 'dsn') mdl.DB.init_app(app) # Social connections social_connections = {} _add_social_params(social_connections, 'facebook', app.localconf) _add_social_params(social_connections, 'twitter', app.localconf) _add_social_params(social_connections, 'google', app.localconf) if len(social_connections) < 1: LOG.error('No Social/OAuth providers defined! Users will not be ' 'able to log-in!') app.config.update(social_connections) social.init_app(app, SQLAlchemyConnectionDatastore(mdl.DB, mdl.Connection)) security.init_app(app, user_datastore) app.register_blueprint(COMMENT, url_prefix=COMMENT_PREFIX) app.register_blueprint(GROUP, url_prefix=GROUP_PREFIX) app.register_blueprint(PHOTO, url_prefix=PHOTO_PREFIX) app.register_blueprint(QR, url_prefix=QR_PREFIX) app.register_blueprint(REGISTRATION, url_prefix=REGISTRATION_PREFIX) app.register_blueprint(ROOT) app.register_blueprint(STATION, url_prefix=STATION_PREFIX) app.register_blueprint(TABULAR, url_prefix=TABULAR_PREFIX) app.register_blueprint(USER, url_prefix=USER_PREFIX) babel.init_app(app) babel.localeselector(get_locale) return app