"""Centralized environment detection for all app modules. This module provides a single source of truth for environment and schema detection. It works both in local development and deployed Snowflake Streamlit apps. Environment Detection Strategy: 1. Deployed apps: Detect schema from Snowflake session context (get_current_schema) 2. Local development: Fallback to 'target' environment variable (set by Makefile) Usage: from common.environment import IS_QA, IS_PROD, SCHEMA_NAME, TARGET_SCHEMA """ import os from snowflake.snowpark.context import get_active_session # Deployment schema to data schema mapping _DEPLOY_TO_DATA_SCHEMA = { "QA_STREAMLIT_ROSTER_MANAGEMENT": "QA", "PROD_STREAMLIT_ROSTER_MANAGEMENT": "PROD", } # Try to detect schema from Snowflake context first (for deployed apps) try: session = get_active_session() current_schema = session.get_current_schema() TARGET_SCHEMA = _DEPLOY_TO_DATA_SCHEMA.get(current_schema or "", "QA") except Exception: # Fallback to environment variable for local runs env = os.getenv("target", "qa") if env == "prod": from common.constants_prod import TARGET_SCHEMA else: from common.constants_qa import TARGET_SCHEMA # Database and schema constants TARGET_DATABASE = "FANSIFTER_APP_REPORTING" SCHEMA_NAME = f"{TARGET_DATABASE}.{TARGET_SCHEMA}" # Environment flags for clearer logic IS_QA = TARGET_SCHEMA == "QA" IS_PROD = TARGET_SCHEMA == "PROD"