예제 #1
0
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
예제 #2
0
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
예제 #3
0
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
예제 #4
0
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
예제 #5
0
파일: __init__.py 프로젝트: sungitly/isr
def init_i18n(app):
    from flask.ext.babel import Babel

    babel = Babel(app)
    babel.init_app(app)
예제 #6
0
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 *
예제 #7
0
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'))
예제 #8
0
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