"""Application configuration.""" import os from urllib import parse import owsclient from owsrequest.ows_client import correlation_id_getter, request_context_getter from python_pdp_sdk.backends.authorization_backend import ( # type: ignore AuthorizationBackend, PdpAuthorizationBackend, ) from python_pdp_sdk.connectors.ows_pdp.ows_pdp import OwsPdpClient # type: ignore from secrets_manager.python_ext import PythonSecretsManager # Service information SERVICE_NAME = "ows-store" SERVICE_VERSION = "1.0.0" # Production environment PROD_ENVIRONMENT = "prod" DEV_ENVIRONMENT = "dev" QA_ENVIRONMENT = "qa" TEST_ENVIRONMENT = "test" ENVIRONMENT = os.environ.get("Environment") or DEV_ENVIRONMENT secrets_manager_client = PythonSecretsManager( environment=ENVIRONMENT, service_name=SERVICE_NAME ) # Database config POOL_RECYCLE = 3600 # Avoids connections going stale POOL_MAX_OVERFLOW = 0 POOL_RECYCLE_MS = 3600 # Avoids connections going stale POOL_SIZE = 15 # match the number of uwsgi threads DB_URL = "mysql+pymysql://{user}:{password}@{host}/{db}?charset={charset}".format( user=os.environ.get("MYSQL_USER"), password=parse.quote( secrets_manager_client.get_cred("MYSQL_PASSWORD").encode("utf-8") ), host=os.environ.get("MYSQL_HOST"), db=os.environ.get("MYSQL_DATABASE"), charset="utf8mb4", ) SQLALCHEMY_TRACK_MODIFICATIONS = False SQLALCHEMY_ENGINE_OPTIONS = { "pool_size": POOL_SIZE, "pool_recycle": POOL_RECYCLE, "max_overflow": POOL_MAX_OVERFLOW, } # Errors and loggers SENTRY = os.environ.get("SENTRY_DSN") LOGGER_LEVEL = os.environ.get("LOGGER_LEVEL", "INFO") LOGGER_NAME = "ows1" # Generic handlers HEALTH_CHECK = "/hello/" # PDP authorization backend def setup_ows_client(environment: str) -> owsclient.OwsClient: """Set up ows-client.""" return owsclient.OwsClient( environment=environment, service_name="ows-abacus-contract", correlation_id_getter=correlation_id_getter, request_context_getter=request_context_getter, ) def setup_authorization_backend( client: owsclient.OwsClient, ) -> AuthorizationBackend: """Set up Authorization Backend.""" ows_pdp_client = OwsPdpClient(ows_client=client) return PdpAuthorizationBackend(ows_pdp_client) ows_client = setup_ows_client(ENVIRONMENT) pdp_authorization_backend = setup_authorization_backend(ows_client)