1
0
forked from erp-dev/erp
Files
erpnew/flower/utils/mingdaoyun/client.py

110 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from __future__ import annotations
from enum import Enum
from typing import Any, Dict, Optional
import aiohttp
# 明道云开放接口:基础配置
MDY_BASE_URL = "https://api.mingdao.com"
MDY_ENDPOINT_GET_FILTER_ROWS = "/v2/open/worksheet/getFilterRows"
# NOTE:
# - 目前项目里 appKey/sign 仍是硬编码(与现有同步代码保持一致)
# - 后续如果要做多环境/更安全配置,建议迁移到环境变量或 Django settings
MDY_APP_KEY = "208e55fea5cea59f"
MDY_SIGN = "MWU0YmViYjkwZmM1ZDIzYzRiN2U3ZGQ4MmE4ZGNkMjc0MWM1ZmQ2ZjkwMjljODE4YmNkZTBhMzA0OTU2YzE2NA=="
class HTTPMethod(Enum):
"""HTTP 请求方法枚举"""
GET = "GET"
POST = "POST"
class MingDaoYunClient:
"""明道云 API 客户端(异步)"""
def __init__(self, app_key: str, sign: str, base_url: str = MDY_BASE_URL):
self.app_key = app_key
self.sign = sign
self.base_url = base_url
async def request(
self,
method: HTTPMethod,
endpoint: str,
data: Optional[Dict[str, Any]] = None,
params: Optional[Dict[str, Any]] = None,
headers: Optional[Dict[str, str]] = None,
) -> Any:
"""通用异步请求函数"""
url = f"{self.base_url}{endpoint}"
default_headers: Dict[str, str] = {
"Content-Type": "application/json",
}
if headers:
default_headers.update(headers)
# 添加认证参数
auth_params = {
"appKey": self.app_key,
"sign": self.sign,
}
async with aiohttp.ClientSession(headers=default_headers) as session:
if method == HTTPMethod.GET:
async with session.get(url, params=params, json=auth_params) as response:
response.raise_for_status()
return await response.json()
if method == HTTPMethod.POST:
payload: Dict[str, Any] = dict(data or {})
payload.update(auth_params)
async with session.post(url, json=payload) as response:
response.raise_for_status()
return await response.json()
raise ValueError(f"Unsupported HTTP method: {method}")
async def get(
self,
endpoint: str,
params: Optional[Dict[str, Any]] = None,
headers: Optional[Dict[str, str]] = None,
) -> Any:
"""发送 GET 请求"""
return await self.request(
method=HTTPMethod.GET,
endpoint=endpoint,
params=params,
headers=headers,
)
async def post(
self,
endpoint: str,
data: Optional[Dict[str, Any]] = None,
params: Optional[Dict[str, Any]] = None,
headers: Optional[Dict[str, str]] = None,
) -> Any:
"""发送 POST 请求"""
return await self.request(
method=HTTPMethod.POST,
endpoint=endpoint,
data=data,
params=params,
headers=headers,
)
def get_default_mingdaoyun_client(base_url: str = MDY_BASE_URL) -> MingDaoYunClient:
"""获取默认配置的明道云客户端(复用项目现有 appKey/sign"""
return MingDaoYunClient(app_key=MDY_APP_KEY, sign=MDY_SIGN, base_url=base_url)