"""Application. The API application is a `flask` application. It provides simple features such as registering a url for a specific handlers. """ from typing import Any import connector_neo4j import owsclient from flask import Flask, g from owslogger import flask_logger from owsrequest import flask_request from owsrequest.ows_client import correlation_id_getter, request_context_getter from pythonfeatures import pythonfeatures from pythonfeatures.constants import split as split_constants from notifications import config app = Flask(config.SERVICE_NAME) flask_logger.setup( app, config.ENVIRONMENT, config.LOGGER_NAME, config.LOGGER_LEVEL, config.SERVICE_NAME, config.SERVICE_VERSION, exclude_paths=[config.HEALTH_CHECK], ) def _add_log_tags(**tags: Any) -> None: """Add tags to log resources.""" g.log_tags.update(**tags) @app.before_request def init_log_tags() -> None: """Initialize logging tags to trace notifications.""" g.log_tags = {} g.add_log_tags = _add_log_tags try: import uwsgi # noqa # ty: ignore[unresolved-import] uwsgiRunning = True except ImportError: uwsgiRunning = False flask_request.setup( app, config.ENVIRONMENT, uwsgi_cache_enabled=uwsgiRunning, add_request_context=True, label_profile=True, verify_access=True, rules_file='notifications/access_rules.yml', access_log_only=config.ONLY_LOG_ACCESS_ERRORS, exclude_paths=[config.HEALTH_CHECK, config.PERMISSIONS_UPDATED_URL], ) is_enabled = ( pythonfeatures.get_single_feature_by_attributes('neo4j_aura', {'service': config.SERVICE_NAME}) ).message == split_constants.FEATURE_ENABLED if is_enabled: neo4j_username = config.NEO4J_AURA_USERNAME neo4j_password = config.NEO4J_AURA_PASSWORD neo4j_url = config.NEO4J_AURA_URL else: neo4j_username = config.NEO4J_USERNAME neo4j_password = config.NEO4J_PASSWORD neo4j_url = config.NEO4J_URL connector_neo4j.configure( neo4j_url, neo4j_username, neo4j_password, max_transaction_retry_time=config.NEO4J_MAX_RETRY_TIME, ) # Set up owsclient ows_client = owsclient.OwsClient( service_name=config.SERVICE_NAME, environment=config.ENVIRONMENT, correlation_id_getter=correlation_id_getter, request_context_getter=request_context_getter, )