ソースを参照

Updated PUT alarm API

master
Lorenzo Pollutri 3時間前
コミット
b9f165410f
2個のファイルの変更30行の追加3行の削除
  1. +22
    -2
      routes/reslevis.py
  2. +8
    -1
      schemas/reslevis.py

+ 22
- 2
routes/reslevis.py ファイルの表示

@@ -6,6 +6,7 @@ from urllib.parse import urlencode
from uuid import UUID from uuid import UUID


from fastapi import APIRouter, Depends, File, Form, HTTPException, Query, Request, UploadFile from fastapi import APIRouter, Depends, File, Form, HTTPException, Query, Request, UploadFile
from fastapi.encoders import jsonable_encoder
import httpx import httpx
import config_env import config_env
from typing import Any, Dict, List, Optional from typing import Any, Dict, List, Optional
@@ -219,6 +220,14 @@ def _normalize_alarm_core(row: dict) -> dict:
return row return row




def _model_update_dict(model: Any) -> Dict[str, Any]:
if hasattr(model, "model_dump"):
data = model.model_dump(exclude_unset=True)
else:
data = model.dict(exclude_unset=True)
return jsonable_encoder(data)


def _floor_maps_index_path() -> str: def _floor_maps_index_path() -> str:
return os.path.join(config_env.RESLEVIS_MAPS_DIR, "maps.json") return os.path.join(config_env.RESLEVIS_MAPS_DIR, "maps.json")


@@ -678,10 +687,15 @@ async def getAlarms():
dependencies=[Depends(get_current_user)], dependencies=[Depends(get_current_user)],
) )
async def updateAlarm(item: AlarmStatusUpdateItem): async def updateAlarm(item: AlarmStatusUpdateItem):
update_payload = _model_update_dict(item)
update_payload.pop("id", None)
if not update_payload:
raise HTTPException(status_code=400, detail="No alarm fields to update")

async with httpx.AsyncClient(timeout=CORE_TIMEOUT) as client: async with httpx.AsyncClient(timeout=CORE_TIMEOUT) as client:
resp = await client.patch( resp = await client.patch(
f"{ALERTS_CORE_BASE_URL}/reslevis/alerts/{item.id}", f"{ALERTS_CORE_BASE_URL}/reslevis/alerts/{item.id}",
json={"status": item.status},
json=update_payload,
) )


if resp.status_code >= 400: if resp.status_code >= 400:
@@ -692,10 +706,16 @@ async def updateAlarm(item: AlarmStatusUpdateItem):
return {"message": "OK"} return {"message": "OK"}


try: try:
return resp.json()
payload = resp.json()
except ValueError: except ValueError:
return {"message": "OK"} return {"message": "OK"}


if isinstance(payload, dict):
return _normalize_alarm_core(payload)
if isinstance(payload, list):
return [_normalize_alarm_core(row) for row in payload if isinstance(row, dict)]
return payload



@router.get( @router.get(
"/getOperators", "/getOperators",


+ 8
- 1
schemas/reslevis.py ファイルの表示

@@ -183,7 +183,14 @@ class AlarmCoreItem(BaseModel):


class AlarmStatusUpdateItem(BaseModel): class AlarmStatusUpdateItem(BaseModel):
id: UUID id: UUID
status: str
tracker_id: Optional[UUID] = None
type: Optional[str] = None
status: Optional[str] = None
timestamp: Optional[str] = None
operator: Optional[Union[UUID, str]] = None
operatorName: Optional[str] = None
assignment_timestamp: Optional[str] = None
resolution_timestamp: Optional[str] = None


class TrackItem(BaseModel): class TrackItem(BaseModel):
id: UUID id: UUID


読み込み中…
キャンセル
保存