"""Application configuration.""" import json import logging import os import urllib from owsclient import OwsClient 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 secrets_manager.python_ext import PythonSecretsManager from sqlalchemy.pool import StaticPool # Service information SERVICE_NAME = 'ows-blacklist-manager' SERVICE_VERSION = '1.0.0' # Environment TEST_ENVIRONMENT = 'test' DEV_ENVIRONMENT = 'dev' ENVIRONMENT = os.environ.get('Environment') or DEV_ENVIRONMENT secrets_manager_client = PythonSecretsManager( application_context=False, environment=ENVIRONMENT, service_name=SERVICE_NAME, force_remote=(ENVIRONMENT not in (DEV_ENVIRONMENT, TEST_ENVIRONMENT)), ) # Errors and loggers LOGGER_LEVEL = os.environ.get('LOGGER_LEVEL') or logging.INFO LOGGER_NAME = 'ows1' SENTRY_DSN = os.environ.get('SENTRY_DSN') or None # Generic handlers HEALTH_CHECK = '/hello/' # Database config DB_USER = os.environ.get('AR_DB_USERNAME') DB_PASS = secrets_manager_client.get_cred('AR_DB_PASSWORD') or '' DB_PASS = urllib.parse.quote(DB_PASS.encode('utf-8')) DB_HOST = os.environ.get('AR_DB_HOST') DB_PORT = int(os.environ.get('AR_DB_PORT') or '3306') DB_NAME = os.environ.get('AR_DB_NAME') or 'art_relations' AR_DB_URL = f'mysql+pymysql://{DB_USER}:{DB_PASS}@{DB_HOST}:{DB_PORT}/{DB_NAME}?charset=utf8' DB_OPTS = { 'pool_size': 20, 'max_overflow': 0, 'pool_recycle': 3600, 'pool_pre_ping': True, 'pool_timeout': 30 } if ENVIRONMENT == TEST_ENVIRONMENT: AR_DB_URL = 'sqlite://' DB_OPTS = {'poolclass': StaticPool} # Export config EXPORT_BUCKET_NAME = os.environ.get('EXPORT_BUCKET_NAME') or 'dev-cucumbers' EXPORT_FOLDER_NAME = 'blacklist_export' def _load_schema(schema_name): path = os.path.dirname(os.path.dirname(__file__)) file_name = f'blacklist-{schema_name}.schema.json' with open(os.path.join(path, 'spec', file_name)) as f: return json.load(f) POST_BLACKLIST_REASON_SCHEMA = _load_schema('post-reason') POST_BLACKLIST_WORD_SCHEMA = _load_schema('post-word') PUT_BLACKLIST_WORD_SCHEMA = _load_schema('put-word') PUT_BLACKLIST_REASON_SCHEMA = _load_schema('put-reason') def get_ows_client(environment) -> OwsClient: """Set up ows-client.""" return OwsClient( environment=environment, service_name=SERVICE_NAME, correlation_id_getter=correlation_id_getter, request_context_getter=request_context_getter, ) def get_pdp_authorization_backend(ows_client: OwsClient) -> AuthorizationBackend: """Set up Authorization Backend.""" ows_pdp_client = OwsPdpClient(ows_client=ows_client) return PdpAuthorizationBackend(ows_pdp_client) ows_client = get_ows_client(ENVIRONMENT) pdp_authorization_backend = get_pdp_authorization_backend(ows_client)