import os from datetime import timedelta from dotenv import load_dotenv APP_ROOT = os.path.join(os.path.dirname(__file__), "..") # refers to application_top dotenv_path = os.path.join(APP_ROOT, ".env") load_dotenv(dotenv_path) SERVICE_NAME = "sws-budget-tool" class BaseConfig: DEBUG = os.environ.get("DEBUG", False) TESTING = False DB_NAME = os.environ["DB_NAME"] DB_USER = os.environ["DB_USER"] DB_PASS = os.environ["DB_PASS"] DB_HOST = os.environ["DB_HOST"] DB_PORT = os.environ.get("DB_PORT", 5432) SQLALCHEMY_DATABASE_URI = "postgresql://{0}:{1}@{2}:{3}/{4}".format(DB_USER, DB_PASS, DB_HOST, DB_PORT, DB_NAME) CACHE_KEY_PREFIX = os.environ.get("CACHE_KEY_PREFIX", "MCT_") CACHE_TYPE = os.environ.get("CACHE_TYPE", "redis") CACHE_REDIS_HOST = os.environ.get("REDIS_HOST", "redis") RQ_DASHBOARD_REDIS_URL = os.environ.get("RQ_DASHBOARD_REDIS_URL") RQ_DASHBOARD_USERNAME = os.environ.get("RQ_DASHBOARD_USERNAME") RQ_DASHBOARD_PASSWORD = os.environ.get("RQ_DASHBOARD_PASSWORD") class TestConfig: DEBUG = os.environ.get("DEBUG", True) DB_NAME = os.environ["DB_NAME"] DB_USER = os.environ.get("DB_USER", "postgres") DB_PASS = os.environ.get("DB_PASS", "postgres") DB_HOST = os.environ.get("DB_HOST", "localhost") DB_PORT = os.environ.get("DB_PORT", 5432) TESTING = True SQLALCHEMY_DATABASE_URI = "postgresql://{0}:{1}@{2}:{3}/{4}".format(DB_USER, DB_PASS, DB_HOST, DB_PORT, DB_NAME) CACHE_TYPE = "simple" SQLALCHEMY_ENGINE_OPTIONS = {"pool_pre_ping": True} ELASTIC_HOST = "elasticsearch_test" ATLAS_UM_PUBLIC_KEY = "" DECIBEL_UI_DOMAIN = "local.decibel.stream" TIMEZONE = "America/New_York" # sentry logger SENTRY_DSN = os.environ.get("SENTRY_DSN") SENTRY_ENV = os.environ.get("FLASK_ENV", "development") # auth0 configuration AUTH0_DOMAIN = os.environ.get("AUTH0_DOMAIN", "sme-dna.auth0.com") AUTH0_LOGIN_DOMAIN = os.environ.get("AUTH0_LOGIN_DOMAIN", "sme-dna.auth0.com") AUTH0_API_AUDIENCE = os.environ.get("AUTH0_API_AUDIENCE") AUTH0_ALGORITHM = os.environ.get("AUTH0_ALGORITHM", "RS256") AUTH0_MANAGEMENT_CLIENT_ID = os.environ.get("AUTH0_MANAGEMENT_CLIENT_ID") AUTH0_MANAGEMENT_CLIENT_SECRET = os.environ.get("AUTH0_MANAGEMENT_CLIENT_SECRET") AUTH0_MANAGEMENT_API = "https://" + AUTH0_DOMAIN + "/api/v2/" AUTH0_JWKS_API = "https://" + AUTH0_DOMAIN + "/.well-known/jwks.json" AUTH0_USER_METADATA_PATH = os.environ.get("AUTH0_USER_METADATA_PATH", "http://private-api/user") ATLAS_UM_PUBLIC_KEY = os.environ.get("ATLAS_UM_PUBLIC_KEY", "https://dev-static-um.atlas.stream/pem/public.pem") ATLAS_UM_ALGORITHM = os.environ.get("ATLAS_UM_ALGORITHM", "RS256") RSA_CACHE_TIMEOUT_SEC = int(os.environ.get("RSA_CACHE_TIMEOUT_SEC", 3600)) ATLAS_USER_UPDATE_INTERVAL_MIN = timedelta(minutes=int(os.environ.get("ATLAS_USER_UPDATE_INTERVAL_MIN", 20))) AUTH_STRATEGY = os.environ.get("AUTH_STRATEGY", "atlas") # history user update rate in minutes HISTORY_USER_UPDATE_INTERVAL_MIN = timedelta(minutes=int(os.environ.get("HISTORY_USER_UPDATE_INTERVAL_MIN", 4320))) AUTH0_USER_UPDATE_INTERVAL_MIN = timedelta(minutes=int(os.environ.get("AUTH0_USER_UPDATE_INTERVAL_MIN", 20))) # cache timeouts JWKS_CACHE_TIMEOUT_SEC = int(os.environ.get("JWKS_CACHE_TIMEOUT_SEC", 3600)) MANAGEMENT_TOKEN_CACHE_TIMEOUT_SEC = int(os.environ.get("MANAGEMENT_TOKEN_CACHE_TIMEOUT_SEC", 3600)) USER_PERMISSIONS_CACHE_TIMEOUT_SEC = int(os.environ.get("USER_PERMISSIONS_CACHE_TIMEOUT_SEC", 1200)) USER_INFO_CACHE_TIMEOUT_SEC = int(os.environ.get("USER_INFO_CACHE_TIMEOUT_SEC", 3600)) APOLLO_CACHE_TIMEOUT_SEC = int(os.environ.get("APOLLO_CACHE_TIMEOUT_SEC", 36000)) CONSUMER_ANALYTICS_API = os.environ.get("CONSUMER_ANALYTICS_API") CONSUMER_ANALYTICS_TOKEN = os.environ.get("CONSUMER_ANALYTICS_TOKEN") # Legacy consumer streams_analytics settings CONSUMER_ANALYTICS_LEGACY_API = os.environ.get("CONSUMER_ANALYTICS_LEGACY_API") CONSUMER_ANALYTICS_USER = os.environ.get("CONSUMER_ANALYTICS_USER") CONSUMER_ANALYTICS_PASS = os.environ.get("CONSUMER_ANALYTICS_PASS") REDIS_HOST = os.environ.get("REDIS_HOST", "redis") ALLOWED_ORIGINS = os.environ.get("ALLOWED_ORIGINS", "*") FUTURE_TIMEOUT_SEC = os.environ.get("FUTURE_TIMEOUT", 60) DEFAULT_STREAMS_CACHE_TIMEOUT_SEC = os.environ.get("DEFAULT_STREAMS_CACHE_TIMEOUT_SEC", 3600) DELPHI_API_VERSION = os.environ.get("DELPHI_API_VERSION", "v3") DELPHI_API_DOMAIN = "{0}/{1}".format(os.environ.get("DELPHI_API_DOMAIN"), DELPHI_API_VERSION) DELPHI_API_CLIENT_ID = os.environ.get("DELPHI_API_CLIENT_ID") DELPHI_API_CLIENT_SECRET = os.environ.get("DELPHI_API_CLIENT_SECRET") DELPHI_TOKEN_CACHE_LIFESPAN = os.environ.get("DELPHI_TOKEN_CACHE_LIFESPAN", 43200) ELASTIC_HOST = os.environ.get("ELASTIC_HOST") ELASTIC_PORT = os.environ.get("ELASTIC_PORT", 9200) ELASTIC_SSL = bool(os.environ.get("ELASTIC_SSL", False)) ELASTIC_AWS_REGION = os.environ.get("ELASTIC_AWS_REGION", "us-east-1") SNOWFLAKE_USER = os.environ.get("SNOWFLAKE_USER", "") SNOWFLAKE_PASS = os.environ.get("SNOWFLAKE_PASS", "") SNOWFLAKE_ACCOUNT = os.environ.get("SNOWFLAKE_ACCOUNT", "") PROJECTS_SNOWFLAKE_DB = os.environ.get("PROJECTS_SNOWFLAKE_DB", "STAGE_DELPHI_EXPLORATION") PROJECTS_SNOWFLAKE_SCHEMA = os.environ.get("PROJECTS_SNOWFLAKE_SCHEMA", "EXP") LINKFIRE_SNOWFLAKE_SCHEMA = os.environ.get("LINKFIRE_SNOWFLAKE_SCHEMA", "LINKFIRE") ADS_SNOWFLAKE_DB = os.environ.get("ADS_SNOWFLAKE_DB", "QA_DELPHI_EXPLORATION") ADS_SNOWFLAKE_SCHEMA = os.environ.get("ADS_SNOWFLAKE_SCHEMA", "AD_DATA") TIKTOK_SNOWFLAKE_DB = os.environ.get("TIKTOK_SNOWFLAKE_DB", "STAGE_DELPHI_EXPLORATION") TIKTOK_SNOWFLAKE_SCHEMA = os.environ.get("TIKTOK_SNOWFLAKE_SCHEMA", "AD_DATA") ARTIST_IMAGE_SERVICE_URL = os.environ.get( "ARTIST_IMAGE_SERVICE_URL", "https://images-api.atlas.stream/v2/artists/by_gras_participant_id/{id}" ) LABEL_IMAGE_SERVICE_URL = os.environ.get( "LABEL_IMAGE_SERVICE_URL", "https://images-api.atlas.stream/v2/labels/by_label_id/{id}" ) SNOWFLAKE_WAREHOUSE = os.environ.get("SNOWFLAKE_WAREHOUSE", "") SLACK_WEBHOOK_URL = os.environ.get("SLACK_WEBHOOK_URL", "") SLACK_WEBHOOK_PATH = os.environ.get("SLACK_WEBHOOK_PATH", "") ENV_IDENTIFIER = os.environ.get("FLASK_ENV", "") PERFORMANCE_METRICS_CACHE_TIMEOUT_SEC = int(os.environ.get("PERFORMANCE_METRICS_CACHE_TIMEOUT_SEC", 300)) EARLIEST_SNOWFLAKE_DATA_FETCH_DATE = os.environ.get("EARLIEST_SNOWFLAKE_DATA_FETCH_DATE", "2020-01-01") SFTP_BUCKET = os.environ.get("SFTP_BUCKET", "decibel-sftp") ENV_CONFIG = {"base": BaseConfig, "test": TestConfig} APOLLO_API_DOMAIN = os.environ.get("APOLLO_API_DOMAIN") APOLLO_M2M_TOKEN_DOMAIN = os.environ.get("APOLLO_M2M_TOKEN_DOMAIN") APOLLO_API_CLIENT_ID = os.environ.get("APOLLO_API_CLIENT_ID") APOLLO_API_CLIENT_SECRET = os.environ.get("APOLLO_API_CLIENT_SECRET") APOLLO_API_AUDIENCE = os.environ.get("APOLLO_API_AUDIENCE") APOLLO_TOKEN_CACHE_LIFESPAN = os.environ.get("APOLLO_TOKEN_CACHE_LIFESPAN", 43200) APOLLO_REDIS_TOKEN_KEY = os.environ.get("APOLLO_REDIS_TOKEN_KEY") ATLAS_API_DOMAIN = os.environ.get("ATLAS_API_DOMAIN", "") ATLAS_API_CLIENT_ID = os.environ.get("ATLAS_API_CLIENT_ID") ATLAS_API_CLIENT_SECRET = os.environ.get("ATLAS_API_CLIENT_SECRET") ATLAS_API_AUDIENCE = os.environ.get("ATLAS_API_AUDIENCE") ATLAS_API_VERSION = os.environ.get("ATLAS_API_VERSION", "/api/v1") ATLAS_API_TOKEN_CACHE_LIFESPAN = os.environ.get("ATLAS_API_TOKEN_CACHE_LIFESPAN", 43200) ATLAS_API_REDIS_TOKEN_KEY = os.environ.get("ATLAS_API_REDIS_TOKEN_KEY") # Period in seconds during which user can revert update or deletion of a project or a campaign. # According to requirements this value should be 15 seconds. However, backend allows longer period to account for time # taken by communication between the client and the server, drawings on front-end etc. UNDO_GRACE_PERIOD = os.environ.get("UNDO_GRACE_PERIOD", 30) DECIBEL_M2M_ATLAS_BRIDGE_AUDIENCE = os.environ.get( "DECIBEL_M2M_ATLAS_BRIDGE_AUDIENCE", "decibel|atlas-decibel-bridge-dev" ) ATLAS_M2M_TOKEN_ISSUER = os.environ.get("ATLAS_M2M_TOKEN_ISSUER", "atlasum") EARLIEST_PROJECTS_IMPORT_START_DATE = os.environ.get("EARLIEST_PROJECTS_IMPORT_START_DATE", "2020-01-01") NOTIFICATIONS_API_DOMAIN = os.environ.get("NOTIFICATIONS_API_DOMAIN", "") NOTIFICATIONS_API_VERSION = os.environ.get("NOTIFICATIONS_API_VERSION", "/api/v1") NOTIFICATIONS_API_CLIENT_ID = os.environ.get("NOTIFICATIONS_API_CLIENT_ID") NOTIFICATIONS_API_CLIENT_SECRET = os.environ.get("NOTIFICATIONS_API_CLIENT_SECRET") NOTIFICATIONS_API_AUDIENCE = os.environ.get("NOTIFICATIONS_API_AUDIENCE") NOTIFICATIONS_API_TOKEN_CACHE_LIFESPAN = os.environ.get("NOTIFICATIONS_API_TOKEN_CACHE_LIFESPAN", 43200) NOTIFICATIONS_API_REDIS_TOKEN_KEY = os.environ.get("NOTIFICATIONS_API_REDIS_TOKEN_KEY") REQUEST_APPROVAL_NOTIFICATION_TEMPLATE_ID = os.environ.get("REQUEST_APPROVAL_NOTIFICATION_TEMPLATE_ID", 6) APPROVE_REVIEW_NOTIFICATION_TEMPLATE_ID = os.environ.get("APPROVE_REVIEW_NOTIFICATION_TEMPLATE_ID", 7) SOME_CAMPAIGNS_APPROVED_NOTIFICATION_TEMPLATE_ID = os.environ.get("SOME_CAMPAIGNS_APPROVED_NOTIFICATION_TEMPLATE_ID", 8) CAMPAIGNS_DISAPPROVED_NOTIFICATION_TEMPLATE_ID = os.environ.get("CAMPAIGNS_DISAPPROVED_NOTIFICATION_TEMPLATE_ID", 9) FIVETRAN_API_DOMAIN = os.environ.get("FIVETRAN_API_DOMAIN", "") FIVETRAN_API_VERSION = os.environ.get("FIVETRAN_API_VERSION", "v1") FIVETRAN_API_CLIENT_ID = os.environ.get("FIVETRAN_API_CLIENT_ID") FIVETRAN_API_CLIENT_SECRET = os.environ.get("FIVETRAN_API_CLIENT_SECRET") FIVETRAN_GROUP_ID = os.environ.get("FIVETRAN_GROUP_ID") FIVETRAN_WEBHOOK_SECRET = os.environ.get("FIVETRAN_WEBHOOK_SECRET") FIVETRAN_TIMEFRAME_MONTH = os.environ.get("FIVETRAN_TIMEFRAME_MONTH", "THREE") DECIBEL_UI_DOMAIN = os.environ.get("DECIBEL_UI_DOMAIN") DECIBEL_API_DOMAIN = os.environ.get("DECIBEL_API_DOMAIN") DOCUMENTATION = bool(os.environ.get("DOCUMENTATION", False)) def runtime_config(): return ENV_CONFIG[os.environ.get("ENV_CONFIG", "base")]