82 lines
2.7 KiB
Python
82 lines
2.7 KiB
Python
from __future__ import annotations
|
|
|
|
import os
|
|
from typing import List
|
|
|
|
from dotenv import load_dotenv
|
|
from dataclasses import dataclass
|
|
from functools import lru_cache
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class Settings:
|
|
feishu_app_id: str
|
|
feishu_app_secret: str
|
|
feishu_verify_token: str
|
|
feishu_encrypt_key: str
|
|
feishu_ws_url: str
|
|
feishu_approval_code: str
|
|
feishu_approval_codes: List[str]
|
|
feishu_approval_code_public: List[str]
|
|
feishu_approval_code_private: List[str]
|
|
feishu_approval_event_key: str
|
|
feishu_project_no_field_code: str
|
|
|
|
huobanyun_app_id: str
|
|
huobanyun_app_secret: str
|
|
huobanyun_token: str
|
|
huobanyun_api_key: str
|
|
huobanyun_base_url: str
|
|
huobanyun_order_status_done_id: str
|
|
huobanyun_order_status_done_name: str
|
|
|
|
log_level: str
|
|
log_rotation: str
|
|
log_max_bytes: int
|
|
log_backup_count: int
|
|
log_query_token: str
|
|
|
|
request_timeout: int
|
|
retry_count: int
|
|
|
|
|
|
def _env(name: str, default: str = "") -> str:
|
|
return os.getenv(name, default).strip()
|
|
|
|
|
|
def _env_list(name: str) -> List[str]:
|
|
raw = os.getenv(name, "")
|
|
return [item.strip() for item in raw.split(",") if item.strip()]
|
|
|
|
|
|
@lru_cache(maxsize=1)
|
|
def get_settings() -> Settings:
|
|
load_dotenv()
|
|
return Settings(
|
|
feishu_app_id=_env("FEISHU_APP_ID"),
|
|
feishu_app_secret=_env("FEISHU_APP_SECRET"),
|
|
feishu_verify_token=_env("FEISHU_VERIFY_TOKEN"),
|
|
feishu_encrypt_key=_env("FEISHU_ENCRYPT_KEY"),
|
|
feishu_ws_url=_env("FEISHU_WS_URL"),
|
|
feishu_approval_code=_env("FEISHU_APPROVAL_CODE"),
|
|
feishu_approval_codes=_env_list("FEISHU_APPROVAL_CODES"),
|
|
feishu_approval_code_public=_env_list("FEISHU_APPROVAL_CODE_PUBLIC"),
|
|
feishu_approval_code_private=_env_list("FEISHU_APPROVAL_CODE_PRIVATE"),
|
|
feishu_approval_event_key=_env("FEISHU_APPROVAL_EVENT_KEY"),
|
|
feishu_project_no_field_code=_env("FEISHU_PROJECT_NO_FIELD_CODE"),
|
|
huobanyun_app_id=_env("HUOBANYUN_APP_ID"),
|
|
huobanyun_app_secret=_env("HUOBANYUN_APP_SECRET"),
|
|
huobanyun_token=_env("HUOBANYUN_TOKEN"),
|
|
huobanyun_api_key=_env("HUOBANYUN_API_KEY"),
|
|
huobanyun_base_url=_env("HUOBANYUN_BASE_URL"),
|
|
huobanyun_order_status_done_id=_env("HUOBANYUN_ORDER_STATUS_DONE_ID"),
|
|
huobanyun_order_status_done_name=_env("HUOBANYUN_ORDER_STATUS_DONE_NAME", "已完成"),
|
|
log_level=_env("LOG_LEVEL", "INFO"),
|
|
log_rotation=_env("LOG_ROTATION", "size"),
|
|
log_max_bytes=int(_env("LOG_MAX_BYTES", "10485760")),
|
|
log_backup_count=int(_env("LOG_BACKUP_COUNT", "10")),
|
|
log_query_token=_env("LOG_QUERY_TOKEN"),
|
|
request_timeout=int(_env("REQUEST_TIMEOUT", "10")),
|
|
retry_count=int(_env("RETRY_COUNT", "2")),
|
|
)
|