Ver a proveniência

Updated PUT alarm API

master
Lorenzo Pollutri há 3 horas
ascendente
cometimento
b9f165410f
2 ficheiros alterados com 30 adições e 3 eliminações
  1. +22
    -2
      routes/reslevis.py
  2. +8
    -1
      schemas/reslevis.py

+ 22
- 2
routes/reslevis.py Ver ficheiro

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

from fastapi import APIRouter, Depends, File, Form, HTTPException, Query, Request, UploadFile
from fastapi.encoders import jsonable_encoder
import httpx
import config_env
from typing import Any, Dict, List, Optional
@@ -219,6 +220,14 @@ def _normalize_alarm_core(row: dict) -> dict:
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:
return os.path.join(config_env.RESLEVIS_MAPS_DIR, "maps.json")

@@ -678,10 +687,15 @@ async def getAlarms():
dependencies=[Depends(get_current_user)],
)
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:
resp = await client.patch(
f"{ALERTS_CORE_BASE_URL}/reslevis/alerts/{item.id}",
json={"status": item.status},
json=update_payload,
)

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

try:
return resp.json()
payload = resp.json()
except ValueError:
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(
"/getOperators",


+ 8
- 1
schemas/reslevis.py Ver ficheiro

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

class AlarmStatusUpdateItem(BaseModel):
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):
id: UUID


Carregando…
Cancelar
Guardar