import argparse import os import sys from dotenv import load_dotenv from functools import lru_cache from pydantic import computed_field from pydantic_settings import BaseSettings from typing import Literal class HaiKangSettings: """ 海康平台配置 """ HAIKANG_URL = 'https://192.168.89.230' HAIKANG_PORT = 443 HAIKANG_AK = '29862915' HAIKANG_SK = '3QlsmcyadBqu4OpVoxsJ' HAIKANG_ACCESS_TOKEN_URL = '/api/v1/oauth/token' # HAIKANG_DOOR_STATES_URL = '/api/v1/door/states' HAIKANG_DOOR_STATES_URL = '/api/acs/v1/door/states' HAIKANG_DOOR_DOCONTROL_URL = '/api/acs/v1/door/doControl' HAIKANG_DOOR_ENVENTS_URL = '/api/acs/v2/door/events' HAIKANG_DOOR_SEARCH = '/api/resource/v2/door/search' HAIKANG_DOOR_ONLINE_STATUS = '/api/nms/v1/online/acs_device/get' HAIKANG_APPLICATION_ONETOMANY_URL = '/api/frs/v1/application/oneToMany' HAIKANG_PICTURE_CHECK_URL = '/api/frs/v1/face/picture/check' HAIKANG_FACECAPATURE_SEARCH = '/api/frs/v1/event/face_capture/search' HAIKANG_FACE_GROUP_URL = '/api/frs/v1/face/group' HAIKANG_VISITOR_RECORD_SEARCH = '/api/visitor/v2/appointment/records' HAIKANG_VISITOR_RECORD_PICTURES = '/api/visitor/v1/record/pictures' HAIKANG_PERSON_LIST = '/api/resource/v2/person/personList' HAIKANG_GET_PERSON_PICTURE = '/api/resource/v1/person/picture' HAIKANG_FACE_SAVE_PATH = "./face_images" class GetConfig: """ 获取配置 """ def __init__(self): self.parse_cli_args() # @lru_cache() def get_haikang_config(self): """ 获取海康平台配置 """ return HaiKangSettings() @staticmethod def parse_cli_args(): """ 解析命令行参数 """ if 'uvicorn' in sys.argv[0]: # 使用uvicorn启动时,命令行参数需要按照uvicorn的文档进行配置,无法自定义参数 pass else: # 使用argparse定义命令行参数 parser = argparse.ArgumentParser(description='命令行参数') parser.add_argument('--env', type=str, default='dev', help='运行环境') # 解析命令行参数 args = parser.parse_args() # 设置环境变量,如果未设置命令行参数,默认APP_ENV为dev os.environ['APP_ENV'] = args.env if args.env else 'dev' # 读取运行环境 run_env = os.environ.get('APP_ENV', '') # 运行环境未指定时默认加载.env.dev env_file = '.env.dev' # 运行环境不为空时按命令行参数加载对应.env文件 if run_env != '': env_file = f'.env.{run_env}' # 加载配置 load_dotenv(env_file) # 实例化获取配置类 get_config = GetConfig() # 海康平台配置 HaiKangConfig = get_config.get_haikang_config()