示例#1
0
def test_logging_records_statsd_stats_without_time(app_with_statsd,
                                                   service_id):
    app = app_with_statsd
    statsd = app_with_statsd.statsd_client
    logging.init_app(app_with_statsd, statsd)

    @app.before_request
    def record_request_details():
        g.endpoint = request.endpoint
        if service_id:
            g.service_id = "fake-service_id"

    @app.route('/')
    def homepage():
        return "ok"

    with app.app_context():
        response = app.test_client().get('/')
        assert response.status_code == 200
        if service_id:
            assert statsd.incr.call_args_list == [
                call('service-id.fake-service_id.GET.homepage.200'),
                call('GET.homepage.200'),
            ]
            statsd.timing.assert_not_called()
        else:
            assert statsd.incr.call_args_list == [call('GET.homepage.200')]
            statsd.timing.assert_not_called()
示例#2
0
def create_app(app_name=None):
    application = Flask(__name__)

    from config import configs

    application.config.from_object(configs[os.environ["NOTIFY_ENVIRONMENT"]])
    if app_name:
        application.config["NOTIFY_APP_NAME"] = app_name

    init_app(application)
    request_id.init_app(application)
    db.init_app(application)
    ma.init_app(application)
    statsd_client.init_app(application)
    logging.init_app(application, statsd_client)
    firetext_client.init_app(application, statsd_client=statsd_client)
    loadtest_client.init_app(application, statsd_client=statsd_client)
    mmg_client.init_app(application, statsd_client=statsd_client)
    aws_ses_client.init_app(application.config["AWS_REGION"], statsd_client=statsd_client)
    notify_celery.init_app(application)
    encryption.init_app(application)
    redis_store.init_app(application)
    clients.init_app(sms_clients=[firetext_client, mmg_client, loadtest_client], email_clients=[aws_ses_client])

    register_blueprint(application)
    register_v2_blueprints(application)

    return application
def create_app():
    application = Flask(__name__)

    init_app(application)

    load_config(application)

    from app.precompiled import precompiled_blueprint
    from app.preview import preview_blueprint
    from app.status import status_blueprint
    application.register_blueprint(status_blueprint)
    application.register_blueprint(preview_blueprint)
    application.register_blueprint(precompiled_blueprint)

    application.statsd_client = StatsdClient()
    application.statsd_client.init_app(application)
    application.encryption_client = Encryption()
    application.encryption_client.init_app(application)
    utils_logging.init_app(application, application.statsd_client)
    weasyprint_hack.init_app(application)
    request_helper.init_app(application)
    notify_celery.init_app(application)

    application.cache = init_cache(application)

    @auth.verify_token
    def verify_token(token):
        return token in application.config['TEMPLATE_PREVIEW_INTERNAL_SECRETS']

    return application
示例#4
0
def test_logging_records_statsd_stats(app_with_statsd, service_id):
    app = app_with_statsd
    statsd = app_with_statsd.statsd_client
    logging.init_app(app_with_statsd, statsd)

    @app.before_request
    def record_request_details():
        g.start = monotonic()
        g.endpoint = request.endpoint
        if service_id:
            g.service_id = "fake-service_id"

    @app.route('/')
    def homepage():
        return "ok"

    with app.app_context():
        response = app.test_client().get('/')
        assert response.status_code == 200
        if service_id:
            assert statsd.incr.call_args_list == [
                call('service-id.fake-service_id.GET.homepage.200'),
                call('GET.homepage.200'),
            ]
            assert statsd.timing.call_count == 2
        else:
            assert statsd.incr.call_args_list == [call('GET.homepage.200')]
            assert statsd.timing.call_count == 1
            args, _ = statsd.timing.call_args_list[0]
            time_ms = args[1]
            assert time_ms >= 0.1
示例#5
0
def create_app(application):
    application.config.from_object(configs[os.environ['NOTIFY_ENVIRONMENT']])

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

    babel = Babel(application)

    @babel.localeselector
    def get_locale():
        return get_current_locale(application)

    init_app(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)
示例#6
0
def create_app(application):
    from app.config import configs

    notify_environment = os.getenv("NOTIFY_ENVIRONMENT", "development")

    application.config.from_object(configs[notify_environment])

    application.config["NOTIFY_APP_NAME"] = application.name
    init_app(application)
    request_helper.init_app(application)
    db.init_app(application)
    migrate.init_app(application, db=db)
    ma.init_app(application)
    zendesk_client.init_app(application)
    statsd_client.init_app(application)
    logging.init_app(application, statsd_client)
    aws_sns_client.init_app(application, statsd_client=statsd_client)
    aws_ses_client.init_app(application.config["AWS_REGION"], statsd_client=statsd_client)
    notify_celery.init_app(application)
    encryption.init_app(application)
    redis_store.init_app(application)
    performance_platform_client.init_app(application)
    document_download_client.init_app(application)
    clients.init_app(sms_clients=[aws_sns_client], email_clients=[aws_ses_client])

    register_blueprint(application)
    register_v2_blueprints(application)

    # avoid circular imports by importing this file later
    from app.commands import setup_commands

    setup_commands(application)

    return application
示例#7
0
def create_app(application):
    from app.config import configs

    notify_environment = os.getenv('NOTIFY_ENVIRONMENT', 'development')

    application.config.from_object(configs[notify_environment])

    application.config['NOTIFY_APP_NAME'] = application.name
    init_app(application)
    request_helper.init_app(application)
    db.init_app(application)
    migrate.init_app(application, db=db)
    ma.init_app(application)
    zendesk_client.init_app(application)
    statsd_client.init_app(application)
    logging.init_app(application, statsd_client)
    firetext_client.init_app(application, statsd_client=statsd_client)
    loadtest_client.init_app(application, statsd_client=statsd_client)
    mmg_client.init_app(application, statsd_client=statsd_client)
    aws_sns_client.init_app(application, statsd_client=statsd_client)
    aws_pinpoint_client.init_app(application, statsd_client=statsd_client)
    aws_ses_client.init_app(application.config['AWS_SES_REGION'],
                            statsd_client=statsd_client)
    send_grid_client.init_app(application.config['SENDGRID_API_KEY'],
                              statsd_client=statsd_client)
    twilio_sms_client.init_app(
        logger=application.logger,
        callback_notify_url_host=application.config["API_HOST_NAME"])
    sinch_sms_client.init_app(
        logger=application.logger,
        callback_notify_url_host=application.config["API_HOST_NAME"],
        statsd_client=statsd_client)
    notify_celery.init_app(application)
    encryption.init_app(application)
    redis_store.init_app(application)
    performance_platform_client.init_app(application)
    document_download_client.init_app(application)
    clients.init_app(sms_clients=[
        firetext_client,
        mmg_client,
        aws_sns_client,
        aws_pinpoint_client,
        loadtest_client,
        twilio_sms_client,
        sinch_sms_client,
    ],
                     email_clients=[aws_ses_client, send_grid_client])

    register_blueprint(application)
    register_v2_blueprints(application)

    # avoid circular imports by importing this file later
    from app.commands import setup_commands
    setup_commands(application)

    return application
示例#8
0
def create_app(application):
    from app.config import configs

    notify_environment = os.environ['NOTIFY_ENVIRONMENT']

    application.config.from_object(configs[notify_environment])

    application.config['NOTIFY_APP_NAME'] = application.name
    init_app(application)

    # Metrics intentionally high up to give the most accurate timing and reliability that the metric is recorded
    metrics.init_app(application)
    request_helper.init_app(application)
    db.init_app(application)
    migrate.init_app(application, db=db)
    ma.init_app(application)
    zendesk_client.init_app(application)
    statsd_client.init_app(application)
    logging.init_app(application, statsd_client)
    firetext_client.init_app(application, statsd_client=statsd_client)
    mmg_client.init_app(application, statsd_client=statsd_client)
    twilio_client.init_app(application, statsd_client=statsd_client)

    aws_ses_client.init_app(application.config['AWS_REGION'],
                            statsd_client=statsd_client)
    aws_ses_stub_client.init_app(application.config['AWS_REGION'],
                                 statsd_client=statsd_client,
                                 stub_url=application.config['SES_STUB_URL'])
    # If a stub url is provided for SES, then use the stub client rather than the real SES boto client
    email_clients = [
        aws_ses_stub_client
    ] if application.config['SES_STUB_URL'] else [aws_ses_client]
    notification_provider_clients.init_app(
        sms_clients=[firetext_client, mmg_client, twilio_client],
        email_clients=email_clients)

    notify_celery.init_app(application)
    encryption.init_app(application)
    redis_store.init_app(application)
    performance_platform_client.init_app(application)
    document_download_client.init_app(application)

    cbc_proxy_client.init_app(application)

    register_blueprint(application)
    register_v2_blueprints(application)

    # avoid circular imports by importing this file later
    from app.commands import setup_commands
    setup_commands(application)

    # set up sqlalchemy events
    setup_sqlalchemy_events(application)

    return application
示例#9
0
def create_app(application):
    setup_commands(application)

    notify_environment = os.environ['NOTIFY_ENVIRONMENT']

    application.config.from_object(configs[notify_environment])

    init_app(application)
    statsd_client.init_app(application)
    deskpro_client.init_app(application)
    logging.init_app(application, statsd_client)
    csrf.init_app(application)
    request_helper.init_app(application)

    service_api_client.init_app(application)
    user_api_client.init_app(application)
    api_key_api_client.init_app(application)
    job_api_client.init_app(application)
    notification_api_client.init_app(application)
    support_api_client.init_app(application)
    status_api_client.init_app(application)
    invite_api_client.init_app(application)
    org_invite_api_client.init_app(application)
    template_statistics_client.init_app(application)
    events_api_client.init_app(application)
    provider_client.init_app(application)
    email_branding_client.init_app(application)
    organisations_client.init_app(application)
    letter_jobs_client.init_app(application)
    inbound_number_client.init_app(application)
    billing_api_client.init_app(application)
    complaint_api_client.init_app(application)
    platform_stats_api_client.init_app(application)

    login_manager.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

    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)

    proxy_fix.init_app(application)

    add_template_filters(application)

    register_errorhandlers(application)

    setup_event_handlers()
示例#10
0
def create_app(application):
    from app.config import configs

    notify_environment = os.environ['NOTIFY_ENVIRONMENT']

    application.config.from_object(configs[notify_environment])

    notify_celery.init_app(application)
    statsd_client.init_app(application)
    logging.init_app(application, statsd_client)
    ftp_client.init_app(application, statsd_client)

    return application
示例#11
0
def create_app():
    application = Flask('app', static_folder=None)
    application.config.from_object(configs[os.environ['NOTIFY_ENVIRONMENT']])

    request_helper.init_app(application)
    logging.init_app(application)

    document_store.init_app(application)
    antivirus_client.init_app(application)

    application.register_blueprint(download_blueprint)
    application.register_blueprint(upload_blueprint)
    application.register_blueprint(healthcheck_blueprint)

    return application
def create_app():
    application = Flask('app')
    application.config.from_object(configs[application.env])

    request_helper.init_app(application)
    logging.init_app(application)

    document_store.init_app(application)
    antivirus_client.init_app(application)
    metrics.init_app(application)

    application.register_blueprint(download_blueprint)
    application.register_blueprint(upload_blueprint)

    return application
示例#13
0
文件: __init__.py 项目: malimu/notify
def create_app(application):
    from app.config import configs

    notify_environment = os.environ['NOTIFY_ENVIRONMENT']

    application.config.from_object(configs[notify_environment])

    application.config['NOTIFY_APP_NAME'] = application.name

    init_app(application)
    request_helper.init_app(application)
    db.init_app(application)
    migrate.init_app(application, db=db)
    ma.init_app(application)
    deskpro_client.init_app(application)
    statsd_client.init_app(application)
    logging.init_app(application, statsd_client)
    telstra_sms_client.init_app(
        logger=application.logger,
        callback_notify_url_host=application.config["API_HOST_NAME"])
    twilio_sms_client.init_app(
        logger=application.logger,
        callback_notify_url_host=application.config["API_HOST_NAME"])
    aws_ses_client.init_app(application.config['AWS_SES_REGION'],
                            application.config['AWS_SES_ACCESS_KEY_ID'],
                            application.config['AWS_SES_SECRET_ACCESS_KEY'],
                            statsd_client=statsd_client)
    smtp_client.init_app(application, statsd_client=statsd_client)
    notify_celery.init_app(application)
    encryption.init_app(application)
    redis_store.init_app(application)
    performance_platform_client.init_app(application)
    clients.init_app(sms_clients=[twilio_sms_client, telstra_sms_client],
                     email_clients=[aws_ses_client, smtp_client])

    register_blueprint(application)
    register_v2_blueprints(application)

    # avoid circular imports by importing this file later
    from app.commands import setup_commands
    setup_commands(application)

    return application
示例#14
0
def create_app(application):
    setup_commands(application)

    from app.config import configs
    from app.views import main_blueprint

    notify_environment = os.environ['NOTIFY_ENVIRONMENT']

    application.config.from_object(configs[notify_environment])

    init_app(application)

    statsd_client.init_app(application)
    logging.init_app(application, statsd_client)
    request_helper.init_app(application)
    notify_celery.init_app(application)

    application.register_blueprint(main_blueprint)

    return application
def create_app():
    application = Flask(
        __name__,
        static_folder=str(DIST),
    )

    from app.config import configs
    environment = os.getenv('NOTIFY_ENVIRONMENT', 'development')
    application.config.from_object(configs[environment])

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

    from app.commands import setup_commands
    setup_commands(application)

    statsd_client.init_app(application)
    logging.init_app(application, statsd_client)
    notify_celery.init_app(application)
    alerts_api_client.init_app(application)

    return application
示例#16
0
def create_app():
    application = Flask(__name__)

    init_app(application)

    load_config(application)

    notify_celery.init_app(application)

    from app.preview import preview_blueprint
    from app.status import status_blueprint
    from app.precompiled import precompiled_blueprint
    application.register_blueprint(status_blueprint)
    application.register_blueprint(preview_blueprint)
    application.register_blueprint(precompiled_blueprint)

    application.statsd_client = StatsdClient()
    application.statsd_client.init_app(application)
    application.encryption_client = Encryption()
    application.encryption_client.init_app(application)
    utils_logging.init_app(application, application.statsd_client)

    def evil_error(msg, *args, **kwargs):
        if msg.startswith('Failed to load image'):
            application.logger.exception(msg % tuple(args))
            abort(502)
        else:
            return weasyprint_logs.log(logging.ERROR, msg, *args, **kwargs)

    weasyprint_logs.error = evil_error

    application.cache = init_cache(application)

    @auth.verify_token
    def verify_token(token):
        return token in application.config['TEMPLATE_PREVIEW_INTERNAL_SECRETS']

    return application
示例#17
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)
示例#18
0
def create_app(application):
    from app.config import configs

    notify_environment = os.getenv('NOTIFY_ENVIRONMENT', 'development')

    application.config.from_object(configs[notify_environment])

    application.config['NOTIFY_APP_NAME'] = application.name
    init_app(application)
    request_helper.init_app(application)
    db.init_app(application)
    migrate.init_app(application, db=db)
    ma.init_app(application)
    zendesk_client.init_app(application)
    statsd_client.init_app(application)
    logging.init_app(application, statsd_client)
    firetext_client.init_app(application, statsd_client=statsd_client)
    loadtest_client.init_app(application, statsd_client=statsd_client)
    mmg_client.init_app(application, statsd_client=statsd_client)
    aws_sns_client.init_app(aws_region=application.config['AWS_REGION'],
                            statsd_client=statsd_client,
                            logger=application.logger)
    aws_ses_client.init_app(
        application.config['AWS_REGION'],
        logger=application.logger,
        statsd_client=statsd_client,
        email_from_domain=application.config['AWS_SES_EMAIL_FROM_DOMAIN'],
        email_from_user=application.config['AWS_SES_EMAIL_FROM_USER'],
        default_reply_to=application.config['AWS_SES_DEFAULT_REPLY_TO'],
        configuration_set=application.config['AWS_SES_CONFIGURATION_SET'],
        endpoint_url=application.config['AWS_SES_ENDPOINT_URL'])
    send_grid_client.init_app(application.config['SENDGRID_API_KEY'],
                              statsd_client=statsd_client)
    govdelivery_client.init_app(application.config['GRANICUS_TOKEN'],
                                application.config['GRANICUS_URL'],
                                statsd_client)
    twilio_sms_client.init_app(
        logger=application.logger,
        callback_notify_url_host=application.config["API_HOST_NAME"])
    aws_pinpoint_client.init_app(application.config['AWS_PINPOINT_APP_ID'],
                                 application.config['AWS_REGION'],
                                 application.logger,
                                 application.config['FROM_NUMBER'],
                                 statsd_client)
    va_profile_client.init_app(application.logger,
                               application.config['VA_PROFILE_URL'],
                               application.config['VANOTIFY_SSL_CERT_PATH'],
                               application.config['VANOTIFY_SSL_KEY_PATH'],
                               statsd_client)
    mpi_client.init_app(application.logger, application.config['MPI_URL'],
                        application.config['VANOTIFY_SSL_CERT_PATH'],
                        application.config['VANOTIFY_SSL_KEY_PATH'],
                        statsd_client)

    notify_celery.init_app(application)
    encryption.init_app(application)
    redis_store.init_app(application)
    performance_platform_client.init_app(application)
    document_download_client.init_app(application)
    clients.init_app(
        sms_clients=[
            firetext_client, mmg_client, aws_sns_client, loadtest_client,
            twilio_sms_client, aws_pinpoint_client
        ],
        email_clients=[aws_ses_client, send_grid_client, govdelivery_client])

    provider_service.init_app(
        email_provider_selection_strategy_label=application.
        config['EMAIL_PROVIDER_SELECTION_STRATEGY_LABEL'],
        sms_provider_selection_strategy_label=application.
        config['SMS_PROVIDER_SELECTION_STRATEGY_LABEL'])

    oauth_registry.init_app(application)

    jwt.init_app(application)

    register_blueprint(application)
    register_v2_blueprints(application)

    # avoid circular imports by importing this file later
    from app.commands import setup_commands
    setup_commands(application)

    CORS(application)

    return application
示例#19
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()
示例#20
0
def create_app(application):
    setup_commands(application)

    notify_environment = os.environ['NOTIFY_ENVIRONMENT']

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

    application.config["BABEL_DEFAULT_LOCALE"] = "en"
    babel = Babel(application)

    @babel.localeselector
    def get_locale():
        return get_current_locale(application)

    init_app(application)

    for client in (

        # Gubbins
        csrf,
        login_manager,
        proxy_fix,
        request_helper,
        cache,

        # 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,
        template_api_prefill_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()
示例#21
0
def create_app():
    from config import configs

    application = Flask(__name__)

    application.config.from_object(configs[os.environ["NOTIFY_ENVIRONMENT"]])

    init_app(application)
    statsd_client.init_app(application)
    logging.init_app(application, statsd_client)
    init_csrf(application)
    request_id.init_app(application)

    service_api_client.init_app(application)
    user_api_client.init_app(application)
    api_key_api_client.init_app(application)
    job_api_client.init_app(application)
    notification_api_client.init_app(application)
    status_api_client.init_app(application)
    invite_api_client.init_app(application)
    template_statistics_client.init_app(application)
    events_api_client.init_app(application)
    provider_client.init_app(application)
    organisations_client.init_app(application)

    login_manager.init_app(application)
    login_manager.login_view = "main.sign_in"
    login_manager.login_message_category = "default"
    login_manager.session_protection = None

    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)

    proxy_fix.init_app(application)

    application.session_interface = ItsdangerousSessionInterface()

    application.add_template_filter(format_datetime)
    application.add_template_filter(format_datetime_24h)
    application.add_template_filter(format_datetime_normal)
    application.add_template_filter(format_datetime_short)
    application.add_template_filter(format_time)
    application.add_template_filter(syntax_highlight_json)
    application.add_template_filter(valid_phone_number)
    application.add_template_filter(linkable_name)
    application.add_template_filter(format_date)
    application.add_template_filter(format_date_normal)
    application.add_template_filter(format_date_short)
    application.add_template_filter(format_datetime_relative)
    application.add_template_filter(format_delta)
    application.add_template_filter(format_notification_status)
    application.add_template_filter(format_notification_status_as_time)
    application.add_template_filter(format_notification_status_as_field_status)
    application.add_template_filter(format_notification_status_as_url)

    application.after_request(useful_headers_after_request)
    application.after_request(save_service_after_request)
    application.before_request(load_service_before_request)

    @application.context_processor
    def _attach_current_service():
        return {"current_service": current_service}

    register_errorhandlers(application)

    setup_event_handlers()

    return application
示例#22
0
def create_app():
    from config import configs

    application = Flask(__name__)

    application.config.from_object(configs[os.environ['NOTIFY_ENVIRONMENT']])

    init_app(application)
    logging.init_app(application)
    init_csrf(application)

    service_api_client.init_app(application)
    user_api_client.init_app(application)
    api_key_api_client.init_app(application)
    job_api_client.init_app(application)
    notification_api_client.init_app(application)
    status_api_client.init_app(application)
    invite_api_client.init_app(application)
    template_statistics_client.init_app(application)
    events_api_client.init_app(application)
    provider_client.init_app(application)
    organisations_client.init_app(application)

    login_manager.init_app(application)
    login_manager.login_view = 'main.sign_in'
    login_manager.login_message_category = 'default'

    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)

    proxy_fix.init_app(application)

    application.session_interface = ItsdangerousSessionInterface()

    application.add_template_filter(nl2br)
    application.add_template_filter(format_datetime)
    application.add_template_filter(format_datetime_24h)
    application.add_template_filter(format_datetime_normal)
    application.add_template_filter(format_datetime_short)
    application.add_template_filter(format_time)
    application.add_template_filter(syntax_highlight_json)
    application.add_template_filter(valid_phone_number)
    application.add_template_filter(linkable_name)
    application.add_template_filter(format_date)
    application.add_template_filter(format_date_normal)
    application.add_template_filter(format_date_short)
    application.add_template_filter(format_delta)
    application.add_template_filter(format_notification_status)
    application.add_template_filter(format_notification_status_as_time)
    application.add_template_filter(format_notification_status_as_field_status)
    application.add_template_filter(format_notification_status_as_url)

    application.after_request(useful_headers_after_request)
    application.after_request(save_service_after_request)
    application.before_request(load_service_before_request)

    def _attach_current_service():
        return {'current_service': current_service}

    application.context_processor(_attach_current_service)
    register_errorhandlers(application)

    setup_event_handlers()

    return application
示例#23
0
def create_app(application):
    setup_commands(application)

    notify_environment = os.environ["NOTIFY_ENVIRONMENT"]

    application.config.from_object(configs[notify_environment])
    asset_fingerprinter._cdn_domain = application.config["ASSET_DOMAIN"]
    asset_fingerprinter._asset_root = urljoin(
        application.config["ADMIN_BASE_URL"], application.config["ASSET_PATH"])

    application.config["BABEL_DEFAULT_LOCALE"] = "en"
    babel = Babel(application)

    @babel.localeselector
    def get_locale():
        return get_current_locale(application)

    init_app(application)

    for client in (
            # Gubbins
            csrf,
            login_manager,
            proxy_fix,
            request_helper,
            cache,
            # 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,
            template_api_prefill_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)

    # Log a warning message if Redis is not enabled
    if not application.config["REDIS_ENABLED"]:
        application.logger.warning(
            "Redis is not enabled. Some features may not be supported. "
            "If you want to enable Redis, look at REDIS_* config variables.")

    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()
示例#24
0
def create_app(application):
    setup_commands(application)

    notify_environment = os.environ['NOTIFY_ENVIRONMENT']

    application.config.from_object(configs[notify_environment])

    init_app(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_jobs_client,
            notification_api_client,
            org_invite_api_client,
            organisations_client,
            platform_stats_api_client,
            provider_client,
            service_api_client,
            status_api_client,
            support_api_client,
            template_statistics_client,
            user_api_client,
            callback_failures_client,

            # External API clients
            statsd_client,
            deskpro_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

    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()
示例#25
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

    setup_blueprints(application)

    add_template_filters(application)

    register_errorhandlers(application)

    setup_event_handlers()