"""Application. The API application is a `flask` application. It provides simple features such as registering a url for a specific handlers. """ import connector_neo4j from flask import Flask from owsclient import OwsClient from owslogger import flask_logger from owsrequest import flask_request from owsrequest.ows_client import correlation_id_getter, request_context_getter from python_pdp_sdk.backends.authorization_backend import AuthorizationBackend, PdpAuthorizationBackend from python_pdp_sdk.connectors.ows_pdp.ows_pdp import OwsPdpClient from product_digital import config from product_digital.connectors import sentry app = Flask(config.SERVICE_NAME) flask_logger.setup( app=app, environment=config.ENVIRONMENT, logger_name=config.LOGGER_NAME, logger_level=config.LOGGER_LEVEL, service_name=config.SERVICE_NAME, service_version=config.SERVICE_VERSION, exclude_paths=[config.HEALTH_CHECK] ) if config.SENTRY: sentry.init_sentry(config.SENTRY) try: import uwsgi # noqa uwsgiRunning = True except ImportError: uwsgiRunning = False flask_request.setup(app, config.ENVIRONMENT, add_request_context=True, uwsgi_cache_enabled=uwsgiRunning, label_profile=True, verify_access=True, rules_file='product_digital/access_rules.yml', access_log_only=config.ONLY_LOG_ACCESS_ERRORS, exclude_paths=config.EXCLUDE_PATH) connector_neo4j.configure( config.NEO4J_URL, config.NEO4J_USERNAME, config.NEO4J_PASSWORD, max_transaction_retry_time=config.NEO4J_MAX_RETRY_TIME, ) def setup_ows_client() -> OwsClient: """Create and return a configured OwsClient instance.""" return OwsClient( config.ENVIRONMENT, config.SERVICE_NAME, correlation_id_getter=correlation_id_getter, request_context_getter=request_context_getter, ) def setup_authorization_backend(ows_client: OwsClient) -> AuthorizationBackend: """Create and return a PDP-backed AuthorizationBackend instance.""" return PdpAuthorizationBackend(OwsPdpClient(ows_client)) ows_client: OwsClient = setup_ows_client() authorization_backend: AuthorizationBackend = setup_authorization_backend(ows_client)