generated from Luis/nextjs-python-web-template
Merge pull request 'Added nested create_eventmessages' (#59) from Qubasa-main into main
This commit was merged in pull request #59.
This commit is contained in:
@@ -19,3 +19,15 @@ dlg_url = f"http://{host}:{port_dlg}/docs"
|
||||
ap_url = f"http://{host}:{port_ap}/docs"
|
||||
c1_url = f"http://{host}:{c1_port}/docs"
|
||||
c2_url = f"http://{host}:{c2_port}/docs"
|
||||
|
||||
|
||||
msg_type_to_label = {
|
||||
1: "Attachement",
|
||||
2: "Connection Setup",
|
||||
3: "Presentation",
|
||||
4: "DID Resolution",
|
||||
5: "Service De-registration",
|
||||
6: "Service Registration",
|
||||
7: "Service Discovery",
|
||||
8: "Service Operation",
|
||||
}
|
||||
|
||||
@@ -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 (
|
||||
@@ -108,10 +111,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
|
||||
|
||||
|
||||
@@ -177,10 +178,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
|
||||
|
||||
|
||||
@@ -358,16 +357,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)
|
||||
|
||||
|
||||
##############################
|
||||
@@ -377,8 +406,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,7 +1,7 @@
|
||||
# Imports
|
||||
import logging
|
||||
from datetime import datetime
|
||||
from typing import List
|
||||
from typing import List, Optional
|
||||
|
||||
from pydantic import BaseModel, Field, validator
|
||||
|
||||
@@ -173,7 +173,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")
|
||||
|
||||
|
||||
@@ -183,6 +183,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