def create_app(config_name): application = Flask(__name__, static_folder='static/', static_url_path=configs[config_name].ASSET_PATH) init_app( application, configs[config_name], bootstrap=bootstrap, data_api_client=data_api_client, login_manager=login_manager ) application.permanent_session_lifetime = timedelta(hours=1) from .main import main as main_blueprint from .status import status as status_blueprint url_prefix = application.config['URL_PREFIX'] application.register_blueprint(status_blueprint, url_prefix=url_prefix) application.register_blueprint(main_blueprint, url_prefix=url_prefix) login_manager.login_view = 'main.render_login' main_blueprint.config = application.config.copy() init_frontend_app(application, data_api_client, login_manager) application.add_template_filter(parse_document_upload_time) @application.context_processor def extra_template_variables(): return { 'generic_contact_email': application.config['GENERIC_CONTACT_EMAIL'], } return application
def create_app(config_name): application = Flask(__name__, static_folder='static/', static_url_path=configs[config_name].STATIC_URL_PATH) init_app(application, configs[config_name], bootstrap=bootstrap, data_api_client=data_api_client, feature_flags=feature_flags, login_manager=login_manager) # Should be incorporated into digitalmarketplace-utils as well csrf.init_app(application) application.permanent_session_lifetime = timedelta(hours=1) from .main import main as main_blueprint from .status import status as status_blueprint application.register_blueprint(status_blueprint, url_prefix='/admin') application.register_blueprint(main_blueprint, url_prefix='/admin') login_manager.login_view = 'main.render_login' main_blueprint.config = application.config.copy() @application.before_request def remove_trailing_slash(): if request.path != '/' and request.path.endswith('/'): return redirect(request.path[:-1], code=301) 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) init_app( application, configs[config_name], bootstrap=bootstrap, data_api_client=data_api_client, feature_flags=feature_flags, login_manager=login_manager ) # Should be incorporated into digitalmarketplace-utils as well csrf.init_app(application) application.permanent_session_lifetime = timedelta(hours=1) from .main import main as main_blueprint from .status import status as status_blueprint application.register_blueprint(status_blueprint, url_prefix='/admin') application.register_blueprint(main_blueprint, url_prefix='/admin') login_manager.login_view = 'main.render_login' main_blueprint.config = application.config.copy() @application.before_request def remove_trailing_slash(): if request.path != '/' and request.path.endswith('/'): return redirect(request.path[:-1], code=301) application.add_template_filter(parse_document_upload_time) return application
def create_app(config_name): application = Flask(__name__) init_app( application, configs[config_name], data_api_client=data_api_client, order_api_client=order_api_client, feature_flags=feature_flags, login_manager=login_manager, search_api_client=search_api_client ) from .main import main as main_blueprint from .status import status as status_blueprint from .buyers import buyers as buyers_blueprint application.register_blueprint(status_blueprint) application.register_blueprint(main_blueprint) application.register_blueprint(buyers_blueprint) login_manager.login_view = 'main.render_login' login_manager.login_message_category = "must_login" csrf.init_app(application) @csrf.error_handler def csrf_handler(reason): if 'user_id' not in session: application.logger.info( u'csrf.session_expired: Redirecting user to log in page' ) return application.login_manager.unauthorized() application.logger.info( u'csrf.invalid_token: Aborting request, user_id: {user_id}', extra={'user_id': session['user_id']}) abort(400, reason) @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__) application.config["DM_ENVIRONMENT"] = config_name init_app( application, configs[config_name], bootstrap=bootstrap, db=db, feature_flags=feature_flags, search_api_client=search_api_client, ) from .main import main as main_blueprint application.register_blueprint(main_blueprint) from .status import status as status_blueprint application.register_blueprint(status_blueprint) if application.config["ALLOW_EXPLORER"]: from .explorer import explorer as explorer_blueprint application.register_blueprint(explorer_blueprint) return application
def create_app(config_name): application = Flask(__name__) application.config['DM_ENVIRONMENT'] = config_name init_app(application, configs[config_name], bootstrap=bootstrap, db=db, feature_flags=feature_flags, search_api_client=search_api_client) if not application.config['DM_API_AUTH_TOKENS']: raise Exception("No DM_API_AUTH_TOKENS provided") if application.config['VCAP_SERVICES']: cf_services = json.loads(application.config['VCAP_SERVICES']) application.config['SQLALCHEMY_DATABASE_URI'] = cf_services[ 'postgres'][0]['credentials']['uri'] from .main import main as main_blueprint application.register_blueprint(main_blueprint) from .status import status as status_blueprint application.register_blueprint(status_blueprint) if application.config['ALLOW_EXPLORER']: from .explorer import explorer as explorer_blueprint application.register_blueprint(explorer_blueprint) return application
def create_app(config_name): application = Flask(__name__) application.config['DM_ENVIRONMENT'] = config_name init_app(application, configs[config_name], db=db, feature_flags=feature_flags, search_api_client=search_api_client) if not application.config['DM_API_AUTH_TOKENS']: raise Exception("No DM_API_AUTH_TOKENS provided") if application.config['VCAP_SERVICES']: cf_services = json.loads(application.config['VCAP_SERVICES']) application.config['SQLALCHEMY_DATABASE_URI'] = cf_services[ 'postgres'][0]['credentials']['uri'] from .main import main as main_blueprint from .status import status as status_blueprint from .callbacks import callbacks as callbacks_blueprint application.register_blueprint(main_blueprint) application.register_blueprint(callbacks_blueprint, url_prefix='/callbacks') application.register_blueprint(status_blueprint) return application
def create_app(config_name): application = Flask(__name__) application.config['DM_ENVIRONMENT'] = config_name init_app( application, configs[config_name], bootstrap=bootstrap, db=db, feature_flags=feature_flags, search_api_client=search_api_client ) if not application.config['DM_API_AUTH_TOKENS']: raise Exception("No DM_API_AUTH_TOKENS provided") from .main import main as main_blueprint application.register_blueprint(main_blueprint) from .status import status as status_blueprint application.register_blueprint(status_blueprint) if application.config['ALLOW_EXPLORER']: from .explorer import explorer as explorer_blueprint application.register_blueprint(explorer_blueprint) 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, ) # 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
def create_app(config_name): application = Flask(__name__, static_folder='static/', static_url_path=configs[config_name].ASSET_PATH) init_app(application, configs[config_name], bootstrap=bootstrap, data_api_client=data_api_client, login_manager=login_manager) if application.config['REDIS_SESSIONS']: vcap_services = parse_vcap_services() redis_opts = { 'ssl': application.config['REDIS_SSL'], 'ssl_ca_certs': application.config['REDIS_SSL_CA_CERTS'], 'ssl_cert_reqs': application.config['REDIS_SSL_HOST_REQ'] } if vcap_services and 'redis' in vcap_services: redis_opts['host'] = vcap_services['redis'][0]['credentials'][ 'hostname'] redis_opts['port'] = vcap_services['redis'][0]['credentials'][ 'port'] redis_opts['password'] = vcap_services['redis'][0]['credentials'][ 'password'] else: redis_opts['host'] = application.config['REDIS_SERVER_HOST'] redis_opts['port'] = application.config['REDIS_SERVER_PORT'] redis_opts['password'] = application.config[ 'REDIS_SERVER_PASSWORD'] session_store = RedisStore(redis.StrictRedis(**redis_opts)) KVSessionExtension(session_store, application) application.permanent_session_lifetime = timedelta(hours=12) from .main import main as main_blueprint from .status import status as status_blueprint url_prefix = application.config['URL_PREFIX'] application.register_blueprint(status_blueprint, url_prefix=url_prefix) application.register_blueprint(main_blueprint, url_prefix=url_prefix) login_manager.login_view = 'main.render_login' main_blueprint.config = application.config.copy() init_frontend_app(application, data_api_client, login_manager) application.add_template_filter(parse_document_upload_time) @application.context_processor def extra_template_variables(): return { 'generic_contact_email': application.config['GENERIC_CONTACT_EMAIL'], } 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 .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
def create_app(config_name): application = Flask(__name__, static_folder='static/', static_url_path=configs[config_name].STATIC_URL_PATH) init_app( application, configs[config_name], data_api_client=data_api_client, feature_flags=feature_flags, login_manager=login_manager, ) from .main import main as main_blueprint from .status import status as status_blueprint application.register_blueprint(status_blueprint, url_prefix='/suppliers') application.register_blueprint(main_blueprint, url_prefix='/suppliers') login_manager.login_message_category = "must_login" main_blueprint.config = application.config.copy() csrf.init_app(application) @csrf.error_handler def csrf_handler(reason): if 'user_id' not in session: application.logger.info( u'csrf.session_expired: Redirecting user to log in page' ) return application.login_manager.unauthorized() application.logger.info( u'csrf.invalid_token: Aborting request, user_id: {user_id}', extra={'user_id': session['user_id']}) abort(400, reason) @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
def create_app(config_name): application = Flask(__name__, static_folder='static/', static_url_path=configs[config_name].STATIC_URL_PATH) init_app( application, configs[config_name], data_api_client=data_api_client, feature_flags=feature_flags, login_manager=login_manager, ) from .main import main as main_blueprint from .status import status as status_blueprint from .external.views.external import external as external_blueprint application.register_blueprint(status_blueprint, url_prefix='/suppliers/opportunities') application.register_blueprint(main_blueprint, url_prefix='/suppliers/opportunities') application.register_blueprint(external_blueprint) login_manager.login_message_category = "must_login" main_blueprint.config = application.config.copy() csrf.init_app(application) @csrf.error_handler def csrf_handler(reason): if 'user_id' not in session: application.logger.info( u'csrf.session_expired: Redirecting user to log in page') return application.login_manager.unauthorized() application.logger.info( u'csrf.invalid_token: Aborting request, user_id: {user_id}', extra={'user_id': session['user_id']}) abort(400, reason) @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
def create_app(config_name): asset_path = os.environ.get('ASSET_PATH', configs[config_name].ASSET_PATH) application = Flask(__name__, static_folder='static/', static_url_path=asset_path) init_app( application, configs[config_name], data_api_client=data_api_client, login_manager=login_manager, ) from .main import main as main_blueprint from .status import status as status_blueprint url_prefix = application.config['URL_PREFIX'] application.register_blueprint(status_blueprint, url_prefix=url_prefix) application.register_blueprint(main_blueprint, url_prefix=url_prefix) login_manager.login_message_category = "must_login" main_blueprint.config = application.config.copy() application.add_template_filter(question_references) application.add_template_filter(parse_document_upload_time) init_frontend_app(application, data_api_client, login_manager) @application.context_processor def extra_template_variables(): return { 'marketplace_home': urlparse.urljoin('/', application.config['BASE_PREFIX']), 'generic_contact_email': application.config['GENERIC_CONTACT_EMAIL'], } def component_filter(x, thing, *args, **kwargs): from jinja2 import Markup # , escape from flask import current_app COMPONENTS = 'components' EXTENSION = '.html' t = current_app.jinja_env.get_template( COMPONENTS + '/' + thing + EXTENSION) return Markup(t.render(x=x, **kwargs)) application.jinja_env.filters['as'] = component_filter application.jinja_env.globals.update(render_component=render_component) return application
def create_app(config_name): asset_path = os.environ.get('ASSET_PATH', configs[config_name].ASSET_PATH) application = Flask(__name__, static_url_path=asset_path) init_app( application, configs[config_name], data_api_client=data_api_client, login_manager=login_manager, cache=cache, ) from .main import main as main_blueprint from .status import status as status_blueprint from .buyers import buyers as buyers_blueprint url_prefix = application.config['URL_PREFIX'] application.register_blueprint(status_blueprint, url_prefix=url_prefix) application.register_blueprint(main_blueprint, url_prefix=url_prefix) application.register_blueprint(buyers_blueprint, url_prefix=url_prefix) login_manager.login_view = 'main.render_login' login_manager.login_message_category = "must_login" init_frontend_app(application, data_api_client, login_manager) @login_manager.user_loader def load_user(user_id): if request.path.startswith(asset_path): return return User.load_user(data_api_client, user_id) terms_manager = TermsManager() terms_manager.init_app(application) def component_filter(x, thing, *args, **kwargs): from jinja2 import Markup # , escape from flask import current_app COMPONENTS = 'components' EXTENSION = '.html' t = current_app.jinja_env.get_template( COMPONENTS + '/' + thing + EXTENSION) return Markup(t.render(x=x, **kwargs)) application.jinja_env.filters['as'] = component_filter application.jinja_env.globals.update(render_component=render_component) 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 .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
def create_app(config_name): application = Flask(__name__) application.config['DM_ENVIRONMENT'] = config_name init_app( application, configs[config_name], db=db, search_api_client=search_api_client ) if not application.config['DM_API_AUTH_TOKENS']: raise Exception("No DM_API_AUTH_TOKENS provided") # FIXME: The service broker adds a 'reconnect' parameter that's rejected by Postgres and # doesn't seem to be in the Postgres documentation anyway. We need to patch the broker to fix # the username stability issue anyway. import os if 'DATABASE_URL' in os.environ: application.config['SQLALCHEMY_DATABASE_URI'] = os.environ['DATABASE_URL'].replace('reconnect=true', '') url_prefix = application.config['URL_PREFIX'] url_prefix_v2 = application.config['URL_PREFIX_V2'] from .main import main as main_blueprint application.register_blueprint(main_blueprint, url_prefix=url_prefix) from .status import status as status_blueprint application.register_blueprint(status_blueprint, url_prefix=url_prefix) from .api import api as api_blueprint application.register_blueprint(api_blueprint, url_prefix=url_prefix_v2) from .admin import blueprint as admin_blueprint application.register_blueprint(admin_blueprint.admin) application.json_encoder = CustomEncoder # maximum POST request length http://flask.pocoo.org/docs/0.12/patterns/fileuploads/#improving-uploads application.config['MAX_CONTENT_LENGTH'] = 32 * 1024 * 1024 # 32 megabytes swag.init_app(application) if application.config['DEBUG']: # enable raise to raise exception on ORM misconfigured queries # application.config['NPLUSONE_RAISE'] = True application.config['NPLUSONE_LOGGER'] = logging.getLogger('app.nplusone') application.config['NPLUSONE_LOG_LEVEL'] = logging.ERROR NPlusOne(application) application.wsgi_app = SQLTapMiddleware(application.wsgi_app) return application
def create_app(config_name): asset_path = os.environ.get('ASSET_PATH', configs[config_name].ASSET_PATH) application = Flask(__name__, static_url_path=asset_path) init_app( application, configs[config_name], data_api_client=data_api_client, login_manager=login_manager, cache=cache, ) from .main import main as main_blueprint from .status import status as status_blueprint from .buyers import buyers as buyers_blueprint url_prefix = application.config['URL_PREFIX'] application.register_blueprint(status_blueprint, url_prefix=url_prefix) application.register_blueprint(main_blueprint, url_prefix=url_prefix) application.register_blueprint(buyers_blueprint, url_prefix=url_prefix) login_manager.login_view = 'main.render_login' login_manager.login_message_category = "must_login" init_frontend_app(application, data_api_client, login_manager) terms_manager = TermsManager() terms_manager.init_app(application) def component_filter(x, thing, *args, **kwargs): from jinja2 import Markup # , escape from flask import current_app COMPONENTS = 'components' EXTENSION = '.html' t = current_app.jinja_env.get_template( COMPONENTS + '/' + thing + EXTENSION) return Markup(t.render(x=x, **kwargs)) application.jinja_env.filters['as'] = component_filter application.jinja_env.globals.update(render_component=render_component) return application
def create_app(config_name): application = Flask(__name__) application.config['DM_ENVIRONMENT'] = config_name init_app( application, configs[config_name], ) if not application.config['DM_AV_AUTH_TOKENS']: raise Exception("No DM_AV_AUTH_TOKENS provided") from .main import main as main_blueprint from .status import status as status_blueprint application.register_blueprint(main_blueprint) application.register_blueprint(status_blueprint) return application
def create_app(config_name): application = Flask(__name__, static_folder="static/", static_url_path=configs[config_name].STATIC_URL_PATH) init_app( application, configs[config_name], bootstrap=bootstrap, data_api_client=data_api_client, feature_flags=feature_flags, login_manager=login_manager, ) # Should be incorporated into digitalmarketplace-utils as well csrf.init_app(application) application.permanent_session_lifetime = timedelta(hours=1) from .main import main as main_blueprint from .status import status as status_blueprint application.register_blueprint(status_blueprint, url_prefix="/admin") application.register_blueprint(main_blueprint, url_prefix="/admin") login_manager.login_view = "main.render_login" main_blueprint.config = application.config.copy() @application.before_request def remove_trailing_slash(): if request.path != "/" and request.path.endswith("/"): return redirect(request.path[:-1], code=301) @application.template_filter("timeformat") def timeformat(value): return datetime.strptime(value, formats.DATETIME_FORMAT).strftime(DISPLAY_TIME_FORMAT) @application.template_filter("dateformat") def dateformat(value): return datetime.strptime(value, formats.DATETIME_FORMAT).strftime(DISPLAY_DATE_FORMAT) @application.template_filter("displaydateformat") def display_date_format(value): return value.strftime(DISPLAY_DATE_FORMAT) return application
def create_app(config_name): application = Flask(__name__) init_app(application, configs[config_name], bootstrap=bootstrap, feature_flags=feature_flags) elasticsearch_client.init_app(application) from .main import main as main_blueprint from .status import status as status_blueprint application.register_blueprint(status_blueprint) application.register_blueprint(main_blueprint) if configs[config_name].ALLOW_EXPLORER: from .explorer import explorer as explorer_blueprint application.register_blueprint(explorer_blueprint) return application
def create_app(config_name): application = Flask(__name__) application.config['DM_ENVIRONMENT'] = config_name init_app(application, configs[config_name], bootstrap=bootstrap, db=db, feature_flags=feature_flags, search_api_client=search_api_client) from .main import main as main_blueprint application.register_blueprint(main_blueprint) from .status import status as status_blueprint application.register_blueprint(status_blueprint) if application.config['ALLOW_EXPLORER']: from .explorer import explorer as explorer_blueprint application.register_blueprint(explorer_blueprint) return application
def create_app(config_name): application = Flask(__name__) init_app( application, configs[config_name], bootstrap=bootstrap, feature_flags=feature_flags ) elasticsearch_client.init_app(application) from .main import main as main_blueprint from .status import status as status_blueprint application.register_blueprint(status_blueprint) application.register_blueprint(main_blueprint) if configs[config_name].ALLOW_EXPLORER: from .explorer import explorer as explorer_blueprint application.register_blueprint(explorer_blueprint) return application
def create_app(config_name): application = Flask(__name__) init_app( application, configs[config_name], bootstrap=bootstrap, data_api_client=data_api_client, feature_flags=feature_flags, search_api_client=search_api_client ) from .main import main as main_blueprint from .status import status as status_blueprint application.register_blueprint(status_blueprint) application.register_blueprint(main_blueprint) main_blueprint.config = { 'BASE_TEMPLATE_DATA': application.config['BASE_TEMPLATE_DATA'], } @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) return application
def create_app(config_name): application = Flask(__name__, static_folder='static/', static_url_path=configs[config_name].STATIC_URL_PATH) init_app( application, configs[config_name], data_api_client=data_api_client, feature_flags=feature_flags, login_manager=login_manager, ) application.permanent_session_lifetime = timedelta(hours=1) from .main import main as main_blueprint from .status import status as status_blueprint application.register_blueprint(status_blueprint, url_prefix='/suppliers') application.register_blueprint(main_blueprint, url_prefix='/suppliers') login_manager.login_view = 'main.render_login' main_blueprint.config = application.config.copy() 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 return application
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
def create_app(config_name): asset_path = os.environ.get('ASSET_PATH', configs[config_name].ASSET_PATH) application = Flask(__name__, static_folder='static/', static_url_path=asset_path) init_app( application, configs[config_name], data_api_client=data_api_client, login_manager=login_manager, ) if application.config['REDIS_SESSIONS']: vcap_services = parse_vcap_services() redis_opts = { 'ssl': application.config['REDIS_SSL'], 'ssl_ca_certs': application.config['REDIS_SSL_CA_CERTS'], 'ssl_cert_reqs': application.config['REDIS_SSL_HOST_REQ'] } if vcap_services and 'redis' in vcap_services: redis_opts['host'] = vcap_services['redis'][0]['credentials'][ 'hostname'] redis_opts['port'] = vcap_services['redis'][0]['credentials'][ 'port'] redis_opts['password'] = vcap_services['redis'][0]['credentials'][ 'password'] else: redis_opts['host'] = application.config['REDIS_SERVER_HOST'] redis_opts['port'] = application.config['REDIS_SERVER_PORT'] redis_opts['password'] = application.config[ 'REDIS_SERVER_PASSWORD'] session_store = RedisStore(redis.StrictRedis(**redis_opts)) KVSessionExtension(session_store, application) from .main import main as main_blueprint from .status import status as status_blueprint url_prefix = application.config['URL_PREFIX'] application.register_blueprint(status_blueprint, url_prefix=url_prefix) application.register_blueprint(main_blueprint, url_prefix=url_prefix) login_manager.login_message_category = "must_login" main_blueprint.config = application.config.copy() application.add_template_filter(question_references) application.add_template_filter(parse_document_upload_time) init_frontend_app(application, data_api_client, login_manager) @application.context_processor def extra_template_variables(): return { 'marketplace_home': urlparse.urljoin('/', application.config['BASE_PREFIX']), 'generic_contact_email': application.config['GENERIC_CONTACT_EMAIL'], } def component_filter(x, thing, *args, **kwargs): from jinja2 import Markup # , escape from flask import current_app COMPONENTS = 'components' EXTENSION = '.html' t = current_app.jinja_env.get_template(COMPONENTS + '/' + thing + EXTENSION) return Markup(t.render(x=x, **kwargs)) application.jinja_env.filters['as'] = component_filter application.jinja_env.globals.update(render_component=render_component) return application
def create_app(config_name): asset_path = os.environ.get('ASSET_PATH', configs[config_name].ASSET_PATH) application = Flask(__name__, static_url_path=asset_path) init_app( application, configs[config_name], data_api_client=data_api_client, login_manager=login_manager, cache=cache, ) if application.config['REDIS_SESSIONS']: vcap_services = parse_vcap_services() redis_opts = { 'ssl': application.config['REDIS_SSL'], 'ssl_ca_certs': application.config['REDIS_SSL_CA_CERTS'], 'ssl_cert_reqs': application.config['REDIS_SSL_HOST_REQ'] } if vcap_services and 'redis' in vcap_services: redis_opts['host'] = vcap_services['redis'][0]['credentials'][ 'hostname'] redis_opts['port'] = vcap_services['redis'][0]['credentials'][ 'port'] redis_opts['password'] = vcap_services['redis'][0]['credentials'][ 'password'] else: redis_opts['host'] = application.config['REDIS_SERVER_HOST'] redis_opts['port'] = application.config['REDIS_SERVER_PORT'] redis_opts['password'] = application.config[ 'REDIS_SERVER_PASSWORD'] session_store = RedisStore(redis.StrictRedis(**redis_opts)) KVSessionExtension(session_store, application) from .main import main as main_blueprint from .status import status as status_blueprint from .buyers import buyers as buyers_blueprint url_prefix = application.config['URL_PREFIX'] application.register_blueprint(status_blueprint, url_prefix=url_prefix) application.register_blueprint(main_blueprint, url_prefix=url_prefix) application.register_blueprint(buyers_blueprint, url_prefix=url_prefix) login_manager.login_view = 'main.render_login' login_manager.login_message_category = "must_login" init_frontend_app(application, data_api_client, login_manager) @application.before_request def force_logout(): if current_user.is_authenticated and request.endpoint not in [ 'main.logout', 'static' ]: return redirect(url_for('main.logout')) @application.after_request def allow_iframe(response): if '/static/media/documents/digital-marketplace-master-agreement' in request.path: response.headers["X-Frame-Options"] = "SAMEORIGIN" return response @login_manager.user_loader def load_user(user_id): if request.path.startswith(asset_path): return return User.load_user(data_api_client, user_id) terms_manager = TermsManager() terms_manager.init_app(application) def component_filter(x, thing, *args, **kwargs): from jinja2 import Markup # , escape from flask import current_app COMPONENTS = 'components' EXTENSION = '.html' t = current_app.jinja_env.get_template(COMPONENTS + '/' + thing + EXTENSION) return Markup(t.render(x=x, **kwargs)) application.jinja_env.filters['as'] = component_filter application.jinja_env.globals.update(render_component=render_component) return application
def create_app(config_name): application = Flask(__name__) application.config['DM_ENVIRONMENT'] = config_name init_app(application, configs[config_name], db=db, search_api_client=search_api_client) if application.config['REDIS_SESSIONS']: vcap_services = parse_vcap_services() redis_opts = { 'ssl': application.config['REDIS_SSL'], 'ssl_ca_certs': application.config['REDIS_SSL_CA_CERTS'], 'ssl_cert_reqs': application.config['REDIS_SSL_HOST_REQ'] } if vcap_services and 'redis' in vcap_services: redis_opts['host'] = vcap_services['redis'][0]['credentials'][ 'hostname'] redis_opts['port'] = vcap_services['redis'][0]['credentials'][ 'port'] redis_opts['password'] = vcap_services['redis'][0]['credentials'][ 'password'] else: redis_opts['host'] = application.config['REDIS_SERVER_HOST'] redis_opts['port'] = application.config['REDIS_SERVER_PORT'] redis_opts['password'] = application.config[ 'REDIS_SERVER_PASSWORD'] session_store = RedisStore(redis.StrictRedis(**redis_opts)) KVSessionExtension(session_store, application) if not application.config['DM_API_AUTH_TOKENS']: raise Exception("No DM_API_AUTH_TOKENS provided") # FIXME: The service broker adds a 'reconnect' parameter that's rejected by Postgres and # doesn't seem to be in the Postgres documentation anyway. We need to patch the broker to fix # the username stability issue anyway. import os if 'DATABASE_URL' in os.environ: application.config['SQLALCHEMY_DATABASE_URI'] = os.environ[ 'DATABASE_URL'].replace('reconnect=true', '') url_prefix = application.config['URL_PREFIX'] url_prefix_v2 = application.config['URL_PREFIX_V2'] from .main import main as main_blueprint application.register_blueprint(main_blueprint, url_prefix=url_prefix) from .status import status as status_blueprint application.register_blueprint(status_blueprint, url_prefix=url_prefix) from .api import api as api_blueprint application.register_blueprint(api_blueprint, url_prefix=url_prefix_v2) from .admin import blueprint as admin_blueprint application.register_blueprint(admin_blueprint.admin) application.json_encoder = CustomEncoder # maximum POST request length http://flask.pocoo.org/docs/0.12/patterns/fileuploads/#improving-uploads application.config['MAX_CONTENT_LENGTH'] = 32 * 1024 * 1024 # 32 megabytes swag.init_app(application) if application.config['DEBUG']: # enable raise to raise exception on ORM misconfigured queries # application.config['NPLUSONE_RAISE'] = True application.config['NPLUSONE_LOGGER'] = logging.getLogger( 'app.nplusone') application.config['NPLUSONE_LOG_LEVEL'] = logging.ERROR NPlusOne(application) application.wsgi_app = SQLTapMiddleware(application.wsgi_app) return application