generated from Luis/nextjs-python-web-template
Added nested create_eventmessages
This commit is contained in:
@@ -1,12 +1,15 @@
|
||||
import logging
|
||||
import time
|
||||
from typing import Any, List
|
||||
import typing
|
||||
from typing import Any, List, Optional
|
||||
|
||||
import httpx
|
||||
from fastapi import APIRouter, BackgroundTasks, Depends, Query
|
||||
from fastapi.responses import HTMLResponse
|
||||
from fastapi.responses import HTMLResponse, JSONResponse
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from clan_cli.config import ap_url, c1_url, c2_url, dlg_url, msg_type_to_label
|
||||
|
||||
from ...errors import ClanError
|
||||
from .. import sql_crud, sql_db, sql_models
|
||||
from ..schemas import (
|
||||
@@ -98,10 +101,8 @@ def get_service_by_uuid(
|
||||
skip: int = 0,
|
||||
limit: int = 100,
|
||||
db: Session = Depends(sql_db.get_db),
|
||||
) -> sql_models.Service:
|
||||
) -> Optional[sql_models.Service]:
|
||||
service = sql_crud.get_service_by_uuid(db, uuid=uuid)
|
||||
if service is None:
|
||||
raise ClanError(f"Service with uuid '{uuid}' not found")
|
||||
return service
|
||||
|
||||
|
||||
@@ -163,10 +164,8 @@ def get_all_entities(
|
||||
def get_entity_by_did(
|
||||
entity_did: str = "did:sov:test:120",
|
||||
db: Session = Depends(sql_db.get_db),
|
||||
) -> sql_models.Entity:
|
||||
) -> Optional[sql_models.Entity]:
|
||||
entity = sql_crud.get_entity_by_name_or_did(db, name=entity_did)
|
||||
if entity is None:
|
||||
raise ClanError(f"Entity with did '{entity_did}' not found")
|
||||
return entity
|
||||
|
||||
|
||||
@@ -335,16 +334,46 @@ def create_eventmessage(
|
||||
return sql_crud.create_eventmessage(db, eventmsg)
|
||||
|
||||
|
||||
@typing.no_type_check
|
||||
@router.get(
|
||||
"/api/v1/event_messages",
|
||||
response_model=List[Eventmessage],
|
||||
response_class=JSONResponse,
|
||||
tags=[Tags.eventmessages],
|
||||
)
|
||||
def get_all_eventmessages(
|
||||
skip: int = 0, limit: int = 100, db: Session = Depends(sql_db.get_db)
|
||||
) -> List[sql_models.Eventmessage]:
|
||||
) -> JSONResponse:
|
||||
eventmessages = sql_crud.get_eventmessages(db, skip=skip, limit=limit)
|
||||
return eventmessages
|
||||
result: dict[int, dict[int, List[Eventmessage]]] = {}
|
||||
|
||||
for msg in eventmessages:
|
||||
msg_name = msg_type_to_label.get(msg.msg_type, None)
|
||||
src_name = sql_crud.get_entity_by_did(db, msg.src_did)
|
||||
src_name = src_name if src_name is None else src_name.name
|
||||
des_name = sql_crud.get_entity_by_did(db, msg.des_did)
|
||||
des_name = des_name if des_name is None else des_name.name
|
||||
|
||||
if result.get(msg.group) is None:
|
||||
result[msg.group] = {}
|
||||
if result[msg.group].get(msg.group_id) is None:
|
||||
result[msg.group][msg.group_id] = []
|
||||
|
||||
result[msg.group][msg.group_id].append(
|
||||
Eventmessage(
|
||||
id=msg.id,
|
||||
timestamp=msg.timestamp,
|
||||
group=msg.group,
|
||||
group_id=msg.group_id,
|
||||
msg_type=msg.msg_type,
|
||||
msg_type_name=msg_name,
|
||||
src_did=msg.src_did,
|
||||
src_name=src_name,
|
||||
des_did=msg.des_did,
|
||||
des_name=des_name,
|
||||
msg=msg.msg,
|
||||
).dict()
|
||||
)
|
||||
return JSONResponse(content=result, status_code=200)
|
||||
|
||||
|
||||
##############################
|
||||
@@ -354,8 +383,6 @@ def get_all_eventmessages(
|
||||
##############################
|
||||
@router.get("/emulate", response_class=HTMLResponse)
|
||||
def get_emulated_enpoints() -> HTMLResponse:
|
||||
from clan_cli.config import ap_url, c1_url, c2_url, dlg_url
|
||||
|
||||
html_content = f"""
|
||||
<html>
|
||||
<head>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import logging
|
||||
from datetime import datetime
|
||||
from typing import List
|
||||
from typing import List, Optional
|
||||
|
||||
from pydantic import BaseModel, Field, validator
|
||||
|
||||
@@ -163,7 +163,7 @@ class EventmessageBase(BaseModel):
|
||||
..., example=12345
|
||||
) # specific to one group needed to enable visually nested groups
|
||||
msg_type: int = Field(..., example=1) # message type for the label
|
||||
src_did: str = Field(..., example="did:sov:test:2234")
|
||||
src_did: str = Field(..., example="did:sov:test:121")
|
||||
des_did: str = Field(..., example="did:sov:test:120")
|
||||
|
||||
|
||||
@@ -173,6 +173,9 @@ class EventmessageCreate(EventmessageBase):
|
||||
|
||||
class Eventmessage(EventmessageCreate):
|
||||
id: int = Field(...)
|
||||
des_name: Optional[str] = Field(default=None, example="C2")
|
||||
src_name: Optional[str] = Field(default=None, example="C1")
|
||||
msg_type_name: Optional[str] = Field(default=None, example="Service Usage")
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
||||
|
||||
Reference in New Issue
Block a user