def test_init_govuk_frontend(app):
    init_govuk_frontend(app)
    env = app.jinja_env

    assert (env.undefined == govuk_frontend_jinja.templates.NunjucksUndefined)
    assert ("govuk_frontend_jinja.templates.NunjucksExtension"
            in env.extensions)
Example #2
0
def create_app(config_name):

    application = Flask(__name__,
                        static_folder='static/',
                        static_url_path=configs[config_name].STATIC_URL_PATH)

    # allow using govuk-frontend Nunjucks templates
    init_govuk_frontend(application)

    init_app(
        application,
        configs[config_name],
        data_api_client=data_api_client,
        login_manager=login_manager,
    )

    # replace placeholder _content_loader_factory with properly initialized one
    global _content_loader_factory
    _content_loader_factory = _make_content_loader_factory(
        application,
        data_api_client.find_frameworks().get('frameworks'),
    )

    from .metrics import metrics as metrics_blueprint, gds_metrics
    from .main import main as main_blueprint
    from .main import public as public_blueprint
    from .status import status as status_blueprint
    from dmutils.external import external as external_blueprint

    application.register_blueprint(metrics_blueprint, url_prefix='/admin')
    application.register_blueprint(status_blueprint, url_prefix='/admin')
    application.register_blueprint(main_blueprint, url_prefix='/admin')
    application.register_blueprint(public_blueprint, url_prefix='/admin')

    # Must be registered last so that any routes declared in the app are registered first (i.e. take precedence over
    # the external NotImplemented routes in the dm-utils external blueprint).
    application.register_blueprint(external_blueprint)

    login_manager.login_message = None  # don't flash message to user
    login_manager.login_view = '/user/login'
    main_blueprint.config = application.config.copy()

    # Should be incorporated into digitalmarketplace-utils as well
    gds_metrics.init_app(application)
    csrf.init_app(application)

    @application.before_request
    def remove_trailing_slash():
        if request.path != '/' and request.path.endswith('/'):
            return redirect(request.path[:-1], code=301)

    @application.before_request
    def refresh_session():
        session.permanent = True
        session.modified = True

    application.add_template_filter(parse_document_upload_time)

    return application
def create_app(config_name):
    application = Flask(__name__,
                        static_folder='static/',
                        static_url_path=configs[config_name].STATIC_URL_PATH)

    # allow using govuk-frontend Nunjucks templates
    init_govuk_frontend(application)

    init_app(
        application,
        configs[config_name],
        data_api_client=data_api_client,
        login_manager=login_manager,
    )

    from .metrics import metrics as metrics_blueprint, gds_metrics
    from .create_buyer.views.create_buyer import create_buyer as create_buyer_blueprint
    from .main import dos as dos_blueprint
    from dmutils.external import external as external_blueprint
    from .main import main as main_blueprint
    from .status import status as status_blueprint

    application.register_blueprint(metrics_blueprint, url_prefix='/buyers')
    application.register_blueprint(create_buyer_blueprint,
                                   url_prefix='/buyers')
    application.register_blueprint(dos_blueprint, url_prefix='/buyers')
    application.register_blueprint(main_blueprint, url_prefix='/buyers')
    application.register_blueprint(status_blueprint, url_prefix='/buyers')

    # Must be registered last so that any routes declared in the app are registered first (i.e. take precedence over
    # the external NotImplemented routes in the dm-utils external blueprint).
    application.register_blueprint(external_blueprint)

    login_manager.login_view = 'external.render_login'
    login_manager.login_message = None  # don't flash message to user
    gds_metrics.init_app(application)
    csrf.init_app(application)

    # We want to be able to access this function from within all templates
    application.jinja_env.globals["render_question"] = (
        dmcontent.govuk_frontend.render_question)

    @application.before_request
    def remove_trailing_slash():
        if request.path != '/' and request.path.endswith('/'):
            if request.query_string:
                return redirect('{}?{}'.format(
                    request.path[:-1], request.query_string.decode('utf-8')),
                                code=301)
            else:
                return redirect(request.path[:-1], code=301)

    @application.before_request
    def refresh_session():
        session.permanent = True
        session.modified = True

    return application
Example #4
0
def create_app(config_name):
    application = Flask(__name__,
                        static_folder='static/',
                        static_url_path=configs[config_name].STATIC_URL_PATH)

    # allow using govuk-frontend Nunjucks templates
    init_govuk_frontend(application)

    init_app(
        application,
        configs[config_name],
        data_api_client=data_api_client,
        login_manager=login_manager,
    )

    from .main import main as main_blueprint
    from .main import public as public_blueprint
    from .status import status as status_blueprint
    from .metrics import metrics as metrics_blueprint, gds_metrics

    application.register_blueprint(status_blueprint,
                                   url_prefix='/suppliers/opportunities')
    application.register_blueprint(metrics_blueprint,
                                   url_prefix='/suppliers/opportunities')
    application.register_blueprint(main_blueprint,
                                   url_prefix='/suppliers/opportunities')
    application.register_blueprint(public_blueprint,
                                   url_prefix='/suppliers/opportunities')

    # Must be registered last so that any routes declared in the app are registered first (i.e. take precedence over
    # the external NotImplemented routes in the dm-utils external blueprint).
    application.register_blueprint(external_blueprint)

    login_manager.login_message = None  # don't flash message to user
    login_manager.login_view = 'external.render_login'
    main_blueprint.config = application.config.copy()

    # Metrics initialisation is required to be above CSRF initialisation. See
    # https://github.com/alphagov/gds_metrics_python/issues/4
    gds_metrics.init_app(application)
    csrf.init_app(application)

    # We want to be able to access this function from within all templates
    application.jinja_env.globals["render_question"] = (
        dmcontent.govuk_frontend.render_question)

    @application.before_request
    def remove_trailing_slash():
        if request.path.endswith('/'):
            return redirect(request.path[:-1], code=301)

    @application.before_request
    def refresh_session():
        session.permanent = True
        session.modified = True

    return application
Example #5
0
def create_app(config_name):
    application = Flask(__name__,
                        static_folder='static/',
                        static_url_path=configs[config_name].STATIC_URL_PATH)

    # allow using govuk-frontend Nunjucks templates
    init_govuk_frontend(application)

    init_app(
        application,
        configs[config_name],
        data_api_client=data_api_client,
        login_manager=login_manager,
    )

    from .metrics import metrics as metrics_blueprint, gds_metrics
    from .main import main as main_blueprint

    application.register_blueprint(metrics_blueprint, url_prefix='/user')
    application.register_blueprint(main_blueprint, url_prefix='/user')

    # Must be registered last so that any routes declared in the app are registered first (i.e. take precedence over
    # the external NotImplemented routes in the dm-utils external blueprint).
    application.register_blueprint(external_blueprint)

    login_manager.login_view = 'main.render_login'
    login_manager.login_message_category = "must_login"
    gds_metrics.init_app(application)
    csrf.init_app(application)

    @application.before_request
    def remove_trailing_slash():
        if request.path != '/' and request.path.endswith('/'):
            if request.query_string:
                return redirect(
                    '{}?{}'.format(
                        request.path[:-1],
                        request.query_string.decode('utf-8')
                    ),
                    code=301
                )
            else:
                return redirect(request.path[:-1], code=301)

    @application.before_request
    def refresh_session():
        session.permanent = True
        session.modified = True

    return application
def create_app(config_name):
    application = Flask(__name__,
                        static_folder='static/',
                        static_url_path=configs[config_name].STATIC_URL_PATH)

    # Allow using GOV.UK Frontend Nunjucks templates
    init_govuk_frontend(application)

    init_app(
        application,
        configs[config_name],
        data_api_client=data_api_client,
        login_manager=login_manager,
    )

    from .metrics import metrics as metrics_blueprint, gds_metrics
    from .main import main as main_blueprint
    from .status import status as status_blueprint
    from dmutils.external import external as external_blueprint

    application.register_blueprint(metrics_blueprint, url_prefix='/suppliers')
    application.register_blueprint(main_blueprint, url_prefix='/suppliers')
    application.register_blueprint(status_blueprint, url_prefix='/suppliers')

    # Must be registered last so that any routes declared in the app are registered first (i.e. take precedence over
    # the external NotImplemented routes in the dm-utils external blueprint).
    application.register_blueprint(external_blueprint)

    login_manager.login_message = None  # don't flash message to user
    main_blueprint.config = application.config.copy()

    gds_metrics.init_app(application)
    csrf.init_app(application)

    @application.before_request
    def remove_trailing_slash():
        if request.path.endswith('/'):
            return redirect(request.path[:-1], code=301)

    @application.before_request
    def refresh_session():
        session.permanent = True
        session.modified = True

    application.add_template_filter(question_references)
    application.add_template_filter(parse_document_upload_time)

    return application
Example #7
0
def create_app(application):
    application.config.from_object(configs[application.env])

    application.url_map.converters['base64_uuid'] = Base64UUIDConverter

    init_app(application)
    init_govuk_frontend(application)
    init_jinja(application)
    statsd_client.init_app(application)
    logging.init_app(application, statsd_client)
    csrf.init_app(application)
    request_helper.init_app(application)

    from app.main import main as main_blueprint
    application.register_blueprint(main_blueprint)

    # from .status import status as status_blueprint
    # application.register_blueprint(status_blueprint)

    # add_template_filters(application)

    register_errorhandlers(application)

    service_api_client.init_app(application)
def test_render_template(app, loader):
    init_govuk_frontend(app)
    app.jinja_loader = loader

    with app.app_context():
        flask.render_template("template.njk")
Example #9
0
def create_app(application):
    setup_commands(application)

    notify_environment = os.environ['NOTIFY_ENVIRONMENT']

    application.config.from_object(configs[notify_environment])
    asset_fingerprinter._asset_root = application.config['ASSET_PATH']

    init_app(application)

    init_govuk_frontend(application)
    init_jinja(application)

    for client in (
        # Gubbins
        # Note, metrics purposefully first so we start measuring response times as early as possible before any
        # other `app.before_request` handlers (introduced by any of these clients) are processed (which would
        # otherwise mean we aren't measuring the full response time)
        metrics,
        csrf,
        login_manager,
        proxy_fix,
        request_helper,

        # API clients
        api_key_api_client,
        billing_api_client,
        broadcast_message_api_client,
        contact_list_api_client,
        complaint_api_client,
        email_branding_client,
        events_api_client,
        inbound_number_client,
        invite_api_client,
        job_api_client,
        letter_branding_client,
        letter_jobs_client,
        notification_api_client,
        org_invite_api_client,
        organisations_client,
        platform_stats_api_client,
        provider_client,
        service_api_client,
        status_api_client,
        template_folder_api_client,
        template_statistics_client,
        upload_api_client,
        user_api_client,

        # External API clients
        antivirus_client,
        redis_client,
        zendesk_client,

    ):
        client.init_app(application)

    logging.init_app(application)

    login_manager.login_view = 'main.sign_in'
    login_manager.login_message_category = 'default'
    login_manager.session_protection = None
    login_manager.anonymous_user = AnonymousUser

    # make sure we handle unicode correctly
    redis_client.redis_store.decode_responses = True

    setup_blueprints(application)

    add_template_filters(application)

    register_errorhandlers(application)

    setup_event_handlers()
app.register_blueprint(dashboard, )
app.register_blueprint(
    services,
    url_prefix='/services',
)
app.register_blueprint(
    transactions,
    url_prefix='/transactions',
)
app.register_blueprint(
    pay,
    url_prefix='/pay',
)
app.register_blueprint(
    settings,
    url_prefix='/settings',
)
app.register_blueprint(
    payment_links,
    url_prefix='/payment-links',
)

repo_root = os.path.abspath(os.path.join(os.path.dirname(__file__)))
app.jinja_loader = jinja2.FileSystemLoader([
    os.path.join(repo_root, 'templates/vendor/govuk'),
    os.path.join(repo_root, 'templates'),
])

init_govuk_frontend(app)
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
Example #11
0
def create_app(config_name):
    application = Flask(__name__)

    # allow using govuk-frontend Nunjucks templates
    init_govuk_frontend(application)

    init_app(
        application,
        configs[config_name],
        data_api_client=data_api_client,
        login_manager=login_manager,
        search_api_client=search_api_client,
    )

    # replace placeholder _content_loader_factory with properly initialized one
    global _content_loader_factory
    _content_loader_factory = _make_content_loader_factory(
        application,
        data_api_client.find_frameworks().get('frameworks'),
    )

    from .metrics import metrics as metrics_blueprint, gds_metrics
    from .main import main as main_blueprint
    from .main import direct_award as direct_award_blueprint
    from .main import direct_award_public as direct_award_public_blueprint
    from .status import status as status_blueprint

    application.register_blueprint(metrics_blueprint)
    application.register_blueprint(status_blueprint)
    application.register_blueprint(main_blueprint)
    application.register_blueprint(direct_award_blueprint)
    # direct_award_blueprint and direct_award_public_blueprint cover the same url prefix - direct_award_blueprint takes
    # precedence
    application.register_blueprint(direct_award_public_blueprint)

    # Must be registered last so that any routes declared in the app are registered first (i.e. take precedence over
    # the external NotImplemented routes in the dm-utils external blueprint).
    application.register_blueprint(external_blueprint)

    login_manager.login_view = '/user/login'
    login_manager.login_message = None  # don't flash message to user
    gds_metrics.init_app(application)
    csrf.init_app(application)

    @application.before_request
    def remove_trailing_slash():
        if request.path != '/' and request.path.endswith('/'):
            if request.query_string:
                return redirect(
                    '{}?{}'.format(
                        request.path[:-1],
                        request.query_string.decode('utf-8')
                    ),
                    code=301
                )
            else:
                return redirect(request.path[:-1], code=301)

    @application.before_request
    def refresh_session():
        session.permanent = True
        session.modified = True

    @application.context_processor
    def inject_saved_search_temp_message_statuses():
        return {state.name: state.value for state in SavedSearchStateEnum}

    return application
Example #12
0
def create_app(application):
    setup_commands(application)

    notify_environment = os.environ['NOTIFY_ENVIRONMENT']

    application.config.from_object(configs[notify_environment])
    asset_fingerprinter._asset_root = application.config['ASSET_PATH']

    init_app(application)

    init_govuk_frontend(application)
    init_jinja(application)

    for client in (

            # Gubbins
            csrf,
            login_manager,
            proxy_fix,
            request_helper,

            # API clients
            api_key_api_client,
            billing_api_client,
            complaint_api_client,
            email_branding_client,
            events_api_client,
            inbound_number_client,
            invite_api_client,
            job_api_client,
            letter_branding_client,
            letter_jobs_client,
            notification_api_client,
            org_invite_api_client,
            organisations_client,
            platform_stats_api_client,
            provider_client,
            service_api_client,
            status_api_client,
            template_folder_api_client,
            template_statistics_client,
            user_api_client,

            # External API clients
            antivirus_client,
            statsd_client,
            zendesk_client,
            redis_client):
        client.init_app(application)

    logging.init_app(application, statsd_client)

    login_manager.login_view = 'main.sign_in'
    login_manager.login_message_category = 'default'
    login_manager.session_protection = None
    login_manager.anonymous_user = AnonymousUser

    # make sure we handle unicode correctly
    redis_client.redis_store.decode_responses = True

    from app.main import main as main_blueprint
    application.register_blueprint(main_blueprint)

    from .status import status as status_blueprint
    application.register_blueprint(status_blueprint)

    add_template_filters(application)

    register_errorhandlers(application)

    setup_event_handlers()
def app(loader):
    app = flask.Flask("test_flask_ext")
    init_govuk_frontend(app)
    app.jinja_loader = loader
    return app