|
|
@@ -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", |
|
|
|