class TestingConfig(Config): TESTING = True DEBUG = True MONGO_URI = env_var("MONGO_GCE_URI") DB_NAME = env_var("MONGO_STAGE") BIGQUERY_SITES = env_var("BIGQUERY_SITES_STAGE") BIGQUERY_EVENTS = env_var("BIGQUERY_EVENTS_STAGE")
class DevelopmentConfig(Config): DEVELOPMENT = True DEBUG = True MONGO_URI = env_var("MONGO_LOCAL_URI") DB_NAME = env_var("MONGO_DEV") BIGQUERY_SITES = env_var("BIGQUERY_SITES_STAGE") BIGQUERY_EVENTS = env_var("BIGQUERY_EVENTS_STAGE")
class Config: DEBUG = False TESTING = False CSRF_ENABLED = True SECRET_KEY = env_var("SECRET_KEY") CACHE_TYPE = 'RedisCache' CACHE_DEFAULT_TIMEOUT = TWO_HOURS CACHE_KEY_PREFIX = f'Analytics-{APP_ENV}' CACHE_REDIS_HOST = env_var('REDIS_SERVER') CACHE_REDIS_PORT = env_var('REDIS_PORT') CACHE_REDIS_URL = f"redis://{env_var('REDIS_SERVER')}:{env_var('REDIS_PORT')}" CLARITY_API_BASE_URL = env_var("CLARITY_API_BASE_URL") CLARITY_API_KEY = env_var("CLARITY_API_KEY") SWAGGER = { "swagger": "2.0", "info": { "title": "Analytics API", "description": "API docs for analytics AirQO microservice", "version": "0.0.1" }, "schemes": ["http", "https"], 'footer_text': LazyString(lambda: f'© AirQo. {datetime.now().year}'), 'head_text': '<style>.top_text{color: red;}</style>', 'doc_expansion': "list", 'ui_params': { 'apisSorter': 'alpha', 'operationsSorter': 'alpha', }, 'ui_params_text': '''{ "operationsSorter" : (a, b) => a.get("path").localeCompare(b.get("path")) }''', "url_prefix": f"{BASE_URL}" }
from decouple import config as env_var from pymongo import MongoClient from config import config from .model_operations import ModelOperations APP_CONFIG = config.get(env_var("FLASK_ENV")) class BasePyMongoModel(ModelOperations): """base model for all database models""" __abstract__ = True def __init__(self, tenant, collection_name): super().__init__() self.tenant = tenant.lower() self.collection_name = collection_name self.db = self._connect() self.collection = self.db[collection_name] def _connect(self): client = MongoClient(APP_CONFIG.MONGO_URI) db = client[f'{APP_CONFIG.DB_NAME}_{self.tenant}'] # lets hard code the db here for dev purposes # db = client['airqo_analytics'] return db def __repr__(self): return f"{self.__class__.__name__}({self.tenant}, {self.collection_name})"
class ProductionConfig(Config): DEBUG = False MONGO_URI = env_var("MONGO_GCE_URI") DB_NAME = env_var("MONGO_PROD") BIGQUERY_SITES = env_var("BIGQUERY_SITES_PROD") BIGQUERY_EVENTS = env_var("BIGQUERY_EVENTS_PROD")
from datetime import datetime from pathlib import Path from dotenv import load_dotenv from decouple import config as env_var from flasgger import LazyString env_path = Path('.') / '.env' load_dotenv(dotenv_path=env_path, verbose=True) TWO_HOURS = 7200 # seconds BASE_URL = "/api/v1/analytics" APP_ENV = env_var('FLASK_ENV', 'production') class Config: DEBUG = False TESTING = False CSRF_ENABLED = True SECRET_KEY = env_var("SECRET_KEY") CACHE_TYPE = 'RedisCache' CACHE_DEFAULT_TIMEOUT = TWO_HOURS CACHE_KEY_PREFIX = f'Analytics-{APP_ENV}' CACHE_REDIS_HOST = env_var('REDIS_SERVER') CACHE_REDIS_PORT = env_var('REDIS_PORT') CACHE_REDIS_URL = f"redis://{env_var('REDIS_SERVER')}:{env_var('REDIS_PORT')}" CLARITY_API_BASE_URL = env_var("CLARITY_API_BASE_URL") CLARITY_API_KEY = env_var("CLARITY_API_KEY")