# -*- coding: utf-8 -*- from pydantic import BaseSettings, Field from functools import lru_cache from typing import Optional from dotenv.main import DotEnv from extensions import logger from contextlib import contextmanager import os import io from io import StringIO def my_get_stream(self): if isinstance(self.dotenv_path, StringIO): yield self.dotenv_path elif os.path.isfile(self.dotenv_path): with io.open(self.dotenv_path, encoding='utf-8') as stream: yield stream else: if self.verbose: logger.warning("File doesn't exist %s", self.dotenv_path) yield StringIO('') DotEnv._get_stream = contextmanager(my_get_stream) class Settings(BaseSettings): # 系统环境 ENVIRONMENT: Optional[str] = Field(None, env="ENVIRONMENT") SECRET_KEY: str = "09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7" ALGORITHM: str = "HS256" IS_DEV: bool = False IS_STAGE: bool = False IS_PROD: bool = False REDIS_DB_URL = { 'host': '127.0.0.1', 'port': 6379, 'password': 'c0b0Info@)!%', 'db': 0 } # 粤商通网关配置 YST_PASS_ID = "yst_msxmjmszsjzwfwyygzzh" YST_PASS_TOKEN = "lYPHgL5z4B2qdzr9Y07uIaQ2ucYb7thX" class Config: env_file = ".env" class DevConfig(Settings): IS_DEV: bool = True IS_STAGE: bool = False IS_PROD: bool = False MYSQL_SERVER: Optional[str] = Field(..., env="DEV_MYSQL_SERVER") MYSQL_USER: Optional[str] = Field(..., env="DEV_MYSQL_USER") MYSQL_PASSWORD: Optional[str] = Field(..., env="DEV_MYSQL_PASSWORD") MYSQL_DB_NAME: Optional[str] = Field(..., env="DEV_MYSQL_DB_NAME") MYSQL_PORT: Optional[int] = Field(..., env="DEV_MYSQL_PORT") YJHTGL_WEB_ROOT_PATH: Optional[str] = Field(..., env="DEV_YJHTGL_WEB_ROOT_PATH") YJXP_WEB_ROOT_PATH: Optional[str] = Field(..., env="DEV_YJXP_WEB_ROOT_PATH") YJXP_CALLBACK_WEB_PATH: Optional[str] = Field(..., env="DEV_YJXP_CALLBACK_WEB_PATH") YZY_WEB_ROOT: Optional[str] = Field(..., env="DEV_YZY_WEB_ROOT") HOME_URL = "http://127.0.0.1:8086" # 粤政易 YZY_PASS_ID: Optional[str] = Field(..., env="DEV_YZY_PASS_ID") YZY_PASS_TOKEN: Optional[str] = Field(..., env="DEV_YZY_PASS_TOKEN") YZY_HOST = "https://xtbg.digitalgd.com.cn" YZY_API_ROOT = "http://19.15.0.128:8080" # 粤商通网关配置 YST_PASS_ID = "yst_mmsyjjzhyjxt" YST_PASS_TOKEN = "3AtV4BRgyM8OFGJYlJWGQBhCeQwB0MhN" class ProdConfig(Settings): IS_DEV: bool = False IS_STAGE: bool = False IS_PROD: bool = True MYSQL_SERVER: Optional[str] = Field(..., env="PROD_MYSQL_SERVER") MYSQL_USER: Optional[str] = Field(..., env="PROD_MYSQL_USER") MYSQL_PASSWORD: Optional[str] = Field(..., env="PROD_MYSQL_PASSWORD") MYSQL_DB_NAME: Optional[str] = Field(..., env="PROD_MYSQL_DB_NAME") MYSQL_PORT: Optional[int] = Field(..., env="PROD_MYSQL_PORT") YJHTGL_WEB_ROOT_PATH: Optional[str] = Field(..., env="PROD_YJHTGL_WEB_ROOT_PATH") YJXP_WEB_ROOT_PATH: Optional[str] = Field(..., env="PROD_YJXP_WEB_ROOT_PATH") YJXP_CALLBACK_WEB_PATH: Optional[str] = Field(..., env="PROD_YJXP_CALLBACK_WEB_PATH") YZY_WEB_ROOT: Optional[str] = Field(..., env="PROD_YZY_WEB_ROOT") # 粤政易 # YZY_PASS_ID: Optional[str] = Field(..., env="PROD_YZY_PASS_ID") # YZY_PASS_TOKEN: Optional[str] = Field(..., env="PROD_YZY_PASS_TOKEN") # YZY_HOST = "https://xtbg.digitalgd.com.cn" # YZY_API_ROOT = "http://19.15.0.128:8080" HOME_URL = "http://19.155.220.228:8086" REDIS_DB_URL = { 'host': '127.0.0.1', 'port': 6379, 'password': 'c0b0Info@)!%', 'db': 0 } # 粤商通网关配置 YST_PASS_ID = "yst_mmsyjjzhyjxt" YST_PASS_TOKEN = "d6t8rljIoEzMzOFIX5Y8FODhKZSmulwB" class StageConfig(Settings): IS_DEV: bool = False IS_STAGE: bool = True IS_PROD: bool = False MYSQL_SERVER: Optional[str] = Field(..., env="STAGE_MYSQL_SERVER") MYSQL_USER: Optional[str] = Field(..., env="STAGE_MYSQL_USER") MYSQL_PASSWORD: Optional[str] = Field(..., env="STAGE_MYSQL_PASSWORD") MYSQL_DB_NAME: Optional[str] = Field(..., env="STAGE_MYSQL_DB_NAME") MYSQL_PORT: Optional[int] = Field(..., env="STAGE_MYSQL_PORT") YJHTGL_WEB_ROOT_PATH: Optional[str] = Field(..., env="STAGE_YJHTGL_WEB_ROOT_PATH") YJXP_WEB_ROOT_PATH: Optional[str] = Field(..., env="STAGE_YJXP_WEB_ROOT_PATH") YJXP_CALLBACK_WEB_PATH: Optional[str] = Field(..., env="STAGE_YJXP_CALLBACK_WEB_PATH") YZY_WEB_ROOT: Optional[str] = Field(..., env="STAGE_YZY_WEB_ROOT") # 粤政易 # YZY_PASS_ID: Optional[str] = Field(..., env="STAGE_YZY_PASS_ID") # YZY_PASS_TOKEN: Optional[str] = Field(..., env="STAGE_YZY_PASS_TOKEN") # YZY_HOST = "https://xtbg.digitalgd.com.cn" # YZY_API_ROOT = "http://19.15.0.128:8080" # 统一认证登录 HOME_URL = "http://19.155.220.206:8086" TYRZ_CLIENT_ID: Optional[str] = Field(..., env="STAGE_TYRZ_CLIENT_ID") TYRZ_CLIENT_SECRET: Optional[str] = Field(..., env="STAGE_TYRZ_CLIENT_SECRET") TYRZ_REDIRECT_URI = "http://19.155.220.206:8086/tyrz/login" TYRZ_GET_TOKEN = 'https://xtbg.digitalgd.com.cn/zwrz/rz/sso/oauth/token' TYRZ_GET_TOKEN_INFO = 'https://xtbg.digitalgd.com.cn/zwrz/rz/sso/openapi/user/getuserinfo' TYRZ_LOGOUT = 'https://xtbg.digitalgd.com.cn/zwrz/rz/sso/logout?client_id={}&backurl=' REDIS_DB_URL = { 'host': '127.0.0.1', 'port': 6379, 'password': 'c0b0Info@)!%', 'db': 0 } # 粤商通网关配置 YST_PASS_ID = "yst_mmsyjjzhyjxt" YST_PASS_TOKEN = "3AtV4BRgyM8OFGJYlJWGQBhCeQwB0MhN" class FactoryConfig: """Returns a config instance dependending on the ENV_STATE variable.""" def __init__(self, env_state: Optional[str]): self.env_state = env_state def __call__(self): if self.env_state == "development": return DevConfig() elif self.env_state == "production": return ProdConfig() elif self.env_state == "stage": return StageConfig() else: return DevConfig() @lru_cache() def get_configs(): from dotenv import load_dotenv load_dotenv(encoding='utf-8') return FactoryConfig(Settings().ENVIRONMENT)() settings = get_configs()