| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- from __future__ import annotations
- from typing import Any, TypedDict
- from .auth import find_project_config, resolve_project_token, _request_json
- CONFIG_OPERATOR = "Dataturing"
- class SetPointValueItem(TypedDict):
- point_id: str
- value: str
- def _post_config(project_key: str, path: str, payload: dict[str, Any]) -> Any:
- return _post_project_json(
- project_key,
- path,
- payload,
- success_key="state",
- message_keys=("state_info",),
- )
- def _post_ai(project_key: str, path: str, payload: dict[str, Any]) -> Any:
- return _post_project_json(
- project_key,
- path,
- payload,
- success_key="errcode",
- message_keys=("msg", "message"),
- )
- def _post_project_json(
- project_key: str,
- path: str,
- payload: dict[str, Any],
- *,
- success_key: str,
- message_keys: tuple[str, ...],
- ) -> Any:
- project = find_project_config(project_key)
- authorization = resolve_project_token(project)
- response_payload = _request_json(
- "POST",
- f"{project['base_url']}{path}",
- authorization,
- json_payload=payload,
- )
- if not isinstance(response_payload, dict):
- raise ValueError(f"API returned invalid payload for {path}: {response_payload}")
- status = response_payload.get(success_key)
- if str(status) not in {"0", "0.0"}:
- message = ""
- for key in message_keys:
- message = str(response_payload.get(key) or "").strip()
- if message:
- break
- raise ValueError(f"API failed for {path}: {message or response_payload}")
- return response_payload
- def search_ai_systems(
- project_key: str,
- keyword: str | None = None,
- page_size: int = 20,
- page_num: int = 1,
- order_by: list[str] | None = None,
- ) -> Any:
- return _post_ai(
- project_key,
- "/api/ai/system/search",
- {
- "page": page_num,
- "page_size": page_size,
- "keyword": keyword or "",
- "order_by": order_by or ["-id"],
- },
- )
- def search_ai_rcmd_operations(
- project_key: str,
- codes: list[str],
- end: str,
- page_size: int = 20,
- page_num: int = 1,
- order: str = "-create_time",
- ) -> Any:
- return _post_ai(
- project_key,
- "/api/ai/ai_rcmd_operation/search_ai_rcmd_operation",
- {
- "end": end,
- "codes": codes,
- "order": order,
- "page_size": page_size,
- "page_num": page_num,
- },
- )
- def get_ai_online_v2(project_key: str, codes: list[str]) -> Any:
- return _post_ai(
- project_key,
- "/api/ai/ai_rcmd_operation/ai_online_v2",
- {
- "codes": codes,
- },
- )
- def set_multi_values(project_key: str, points: list[SetPointValueItem], from_: str = "M2_BACKEND") -> Any:
- return _post_config(
- project_key,
- "/basedataportal/value/set_multi_values",
- {
- "points": points,
- "from": from_,
- },
- )
|