"""Application. The API is a Flask application. It provides simple features such as registering a URL for specific handlers. """ from flask import Flask from flask_executor import Executor from owslogger import flask_logger, logger from owsrequest import flask_request from snowflake_connector.snowflake_conn import set_default_sessionmaker from sound_recordings import config app = Flask(config.SERVICE_NAME) exclude_paths = [config.HEALTH_CHECK_PATH] flask_logger.setup( app, config.ENVIRONMENT, config.LOGGER_NAME, config.LOGGER_LEVEL, config.SERVICE_NAME, config.SERVICE_VERSION, exclude_paths, True, True, config.LOGGER_DSN, ) logger.setup( config.ENVIRONMENT, config.LOGGER_NAME, config.LOGGER_LEVEL, "owsrequest", config.SERVICE_VERSION, None, True, config.LOGGER_DSN, ) try: import uwsgi # noqa uwsgiRunning = True except ImportError: uwsgiRunning = False flask_request.setup( app, config.ENVIRONMENT, add_request_context=True, label_profile=True, uwsgi_cache_enabled=uwsgiRunning, verify_access=True, rules_file="sound_recordings/access_rules.yml", access_log_only=config.ONLY_LOG_ACCESS_ERRORS, exclude_paths=exclude_paths, ) executor = Executor(app) sf_config = { "role": config.SNOWFLAKE_ROLE, "account": config.SNOWFLAKE_ACCOUNT, "user": config.SNOWFLAKE_USER, "password": config.SNOWFLAKE_PASSWORD, "database": config.SNOWFLAKE_DATABASE, "schema": config.SNOWFLAKE_SCHEMA, "warehouse": config.SNOWFLAKE_WAREHOUSE, "client_session_keep_alive": True, } # service-wide Snowflake connection pool settings set_default_sessionmaker( pool_size=config.SNOWFLAKE_POOL_SIZE, pool_recycle=config.SNOWFLAKE_POOL_RECYCLE, pool_pre_ping=config.SNOWFLAKE_POOL_PRE_PING, pool_reset_on_return=config.SNOWFLAKE_POOL_RESET_ON_RETURN, max_overflow=config.SNOWFLAKE_POOL_MAX_OVERFLOW, connect_args=config.SNOWFLAKE_CONNECT_ARGS, sf_config=sf_config, ) if config.ENVIRONMENT == config.DEV_ENVIRONMENT: from flasgger import Swagger app.config["SWAGGER"] = {"title": "ows-analytics-sr Documentation", "uiversion": 2} try: Swagger(app, template_file=config.SWAGGER_FILE_PATH) except FileNotFoundError: print("Could not find swagger file at {}".format(config.SWAGGER_FILE_PATH))