"""Package configuration.""" import os import pathlib import botocore from secrets_manager.python_ext import PythonSecretsManager # Service information SHARED_SECRET_NAMESPACE = 'split' FALLBACK_SHARED_SECRET_NAMESPACE = 'python-orchard-features' # Get environment from multiple possible env vars, defaulting to dev DEV_ENVIRONMENT = 'dev' TEST_ENVIRONMENT = 'test' ENVIRONMENT = os.environ.get( 'Environment', os.environ.get( 'ENVIRONMENT', os.environ.get( 'ENV', DEV_ENVIRONMENT ) ) ) # Get splitio key from env, falling back to secretsmanager SPLITIO_LOCAL_API_KEY = 'localhost' SPLITIO_API_KEY = os.environ.get('SPLITIO_API_KEY') if not SPLITIO_API_KEY: secrets_manager_client = PythonSecretsManager( application_context=False, environment=ENVIRONMENT, service_name=SHARED_SECRET_NAMESPACE) try: SPLITIO_API_KEY = secrets_manager_client.get_cred('API_KEY') except botocore.exceptions.ClientError as e: # If there's no access to the {env}/split/SPLITIO_API_KEY secret, then # attempt to fetch the {env}/python-orchard-features/SPLITIO_API_KEY secret if e.response.get('Error', {}).get('Code') != 'ResourceNotFoundException': raise e secrets_manager_client = PythonSecretsManager( application_context=False, environment=ENVIRONMENT, service_name=FALLBACK_SHARED_SECRET_NAMESPACE) SPLITIO_API_KEY = secrets_manager_client.get_cred('SPLITIO_API_KEY') if not SPLITIO_API_KEY and ENVIRONMENT in [DEV_ENVIRONMENT, TEST_ENVIRONMENT]: SPLITIO_API_KEY = SPLITIO_LOCAL_API_KEY SPLITIO_USE_PREFORKED_INITIALIZATION = os.environ.get( 'SPLITIO_USE_PREFORKED_INITIALIZATION', 'false') SPLITIO_USE_PREFORKED_INITIALIZATION = SPLITIO_USE_PREFORKED_INITIALIZATION.lower() == 'true' # split.io SPLIT_CONFIG = { # 'optimized' is the default setting, but failing to explicitly pass it in # produces warning log messages 'impressionsMode': 'optimized', 'preforkedInitialization': SPLITIO_USE_PREFORKED_INITIALIZATION } # Use a path to a local split file for development DEFAULT_SPLIT_FILE = ( f'{pathlib.Path(__file__).parent.resolve()}' '/constants/.split' ) SPLIT_FILE_PATH = os.environ.get('SPLIT_FILE_PATH', DEFAULT_SPLIT_FILE) if SPLIT_FILE_PATH and SPLITIO_API_KEY == SPLITIO_LOCAL_API_KEY: SPLIT_CONFIG.update({'splitFile': SPLIT_FILE_PATH}) SPLIT_BLOCK_UNTIL_READY_TIMEOUT = 60