generated from Luis/nextjs-python-web-template
Compare commits
2 Commits
8a5232255f
...
8c77f3fbae
| Author | SHA1 | Date | |
|---|---|---|---|
| 8c77f3fbae | |||
| bc4761e7a2 |
@@ -1,11 +1,13 @@
|
|||||||
|
import json
|
||||||
import logging
|
import logging
|
||||||
import time
|
import time
|
||||||
import typing
|
import typing
|
||||||
|
from collections import OrderedDict
|
||||||
from typing import Any, List, Optional
|
from typing import Any, List, Optional
|
||||||
|
|
||||||
import httpx
|
import httpx
|
||||||
from fastapi import APIRouter, BackgroundTasks, Depends, Query
|
from fastapi import APIRouter, BackgroundTasks, Depends, Query
|
||||||
from fastapi.responses import HTMLResponse, JSONResponse
|
from fastapi.responses import HTMLResponse, PlainTextResponse
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
|
|
||||||
from clan_cli.config import ap_url, c1_url, c2_url, dlg_url, group_type_to_label
|
from clan_cli.config import ap_url, c1_url, c2_url, dlg_url, group_type_to_label
|
||||||
@@ -360,19 +362,24 @@ def create_eventmessage(
|
|||||||
@typing.no_type_check
|
@typing.no_type_check
|
||||||
@router.get(
|
@router.get(
|
||||||
"/api/v1/event_messages",
|
"/api/v1/event_messages",
|
||||||
response_class=JSONResponse,
|
response_class=PlainTextResponse,
|
||||||
tags=[Tags.eventmessages],
|
tags=[Tags.eventmessages],
|
||||||
)
|
)
|
||||||
def get_all_eventmessages(
|
def get_all_eventmessages(
|
||||||
skip: int = 0, limit: int = 100, db: Session = Depends(sql_db.get_db)
|
skip: int = 0, limit: int = 100, db: Session = Depends(sql_db.get_db)
|
||||||
) -> JSONResponse:
|
) -> PlainTextResponse:
|
||||||
|
# SQL sorts eventmessages by timestamp, so we don't need to sort them here
|
||||||
eventmessages = sql_crud.get_eventmessages(db, skip=skip, limit=limit)
|
eventmessages = sql_crud.get_eventmessages(db, skip=skip, limit=limit)
|
||||||
result: dict[int, dict[int, List[Eventmessage]]] = {}
|
cresult: List[OrderedDict[int, OrderedDict[int, List[Eventmessage]]]] = []
|
||||||
|
|
||||||
for msg in eventmessages:
|
cresult_idx = 0
|
||||||
|
cresult.append(OrderedDict())
|
||||||
|
for idx, msg in enumerate(eventmessages):
|
||||||
# Use the group_type_to_label from config.py to get the group name and msg_type name
|
# Use the group_type_to_label from config.py to get the group name and msg_type name
|
||||||
group = group_type_to_label.get(msg.group, None)
|
group = group_type_to_label.get(msg.group, None)
|
||||||
group_name = group.get("name", None) if group is not None else str(msg.group)
|
group_name = (
|
||||||
|
str(group.get("name", None)) if group is not None else str(msg.group)
|
||||||
|
)
|
||||||
msg_type_name = (
|
msg_type_name = (
|
||||||
group.get(msg.msg_type, None) if group is not None else str(msg.msg_type)
|
group.get(msg.msg_type, None) if group is not None else str(msg.msg_type)
|
||||||
)
|
)
|
||||||
@@ -383,14 +390,26 @@ def get_all_eventmessages(
|
|||||||
des_name = sql_crud.get_entity_by_did(db, msg.des_did)
|
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
|
des_name = des_name if des_name is None else des_name.name
|
||||||
|
|
||||||
|
result = cresult[cresult_idx]
|
||||||
|
|
||||||
|
if result.get("group_name") is None:
|
||||||
# Initialize the result array and dictionary
|
# Initialize the result array and dictionary
|
||||||
if result.get(group_name) is None:
|
result["group_name"] = group_name
|
||||||
result[group_name] = {}
|
elif result["group_name"] != group_name:
|
||||||
if result[group_name].get(msg.group_id) is None:
|
# If the group name changed, create a new result array and dictionary
|
||||||
result[group_name][msg.group_id] = []
|
cresult_idx += 1
|
||||||
|
cresult.append(OrderedDict())
|
||||||
|
result = cresult[cresult_idx]
|
||||||
|
result["group_name"] = group_name
|
||||||
|
|
||||||
|
if result.get("groups") is None:
|
||||||
|
result["groups"] = OrderedDict()
|
||||||
|
|
||||||
|
if result["groups"].get(msg.group_id) is None:
|
||||||
|
result["groups"][msg.group_id] = []
|
||||||
|
|
||||||
# Append the eventmessage to the result array
|
# Append the eventmessage to the result array
|
||||||
result_arr = result[group_name][msg.group_id]
|
result_arr = result["groups"][msg.group_id]
|
||||||
result_arr.append(
|
result_arr.append(
|
||||||
Eventmessage(
|
Eventmessage(
|
||||||
id=msg.id,
|
id=msg.id,
|
||||||
@@ -408,9 +427,7 @@ def get_all_eventmessages(
|
|||||||
).dict()
|
).dict()
|
||||||
)
|
)
|
||||||
|
|
||||||
# sort by timestamp
|
return PlainTextResponse(content=json.dumps(cresult, indent=4), status_code=200)
|
||||||
result_arr.sort(key=lambda x: x["timestamp"])
|
|
||||||
return JSONResponse(content=result, status_code=200)
|
|
||||||
|
|
||||||
|
|
||||||
##############################
|
##############################
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# Imports
|
# Imports
|
||||||
from typing import List, Optional
|
from typing import List, Optional
|
||||||
|
|
||||||
from sqlalchemy import func
|
from sqlalchemy import asc, func
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
from sqlalchemy.sql.expression import true
|
from sqlalchemy.sql.expression import true
|
||||||
|
|
||||||
@@ -319,4 +319,11 @@ def create_eventmessage(
|
|||||||
def get_eventmessages(
|
def get_eventmessages(
|
||||||
db: Session, skip: int = 0, limit: int = 100
|
db: Session, skip: int = 0, limit: int = 100
|
||||||
) -> List[sql_models.Eventmessage]:
|
) -> List[sql_models.Eventmessage]:
|
||||||
return db.query(sql_models.Eventmessage).offset(skip).limit(limit).all()
|
# Use order_by and desc to sort by timestamp
|
||||||
|
return (
|
||||||
|
db.query(sql_models.Eventmessage)
|
||||||
|
.order_by(asc(sql_models.Eventmessage.timestamp))
|
||||||
|
.offset(skip)
|
||||||
|
.limit(limit)
|
||||||
|
.all()
|
||||||
|
)
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ class Eventmessage(Base):
|
|||||||
## Queryable body ##
|
## Queryable body ##
|
||||||
# Primary Key
|
# Primary Key
|
||||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||||
timestamp = Column(Integer, unique=True, index=True)
|
timestamp = Column(Integer, index=True)
|
||||||
group = Column(Integer, index=True)
|
group = Column(Integer, index=True)
|
||||||
group_id = Column(Integer, index=True)
|
group_id = Column(Integer, index=True)
|
||||||
msg_type = Column(Integer, index=True) # message type for the label
|
msg_type = Column(Integer, index=True) # message type for the label
|
||||||
|
|||||||
@@ -122,49 +122,50 @@ def test_create_services(api_client: ApiClient) -> None:
|
|||||||
random.seed(77)
|
random.seed(77)
|
||||||
|
|
||||||
|
|
||||||
def create_eventmessages(num: int = 2) -> list[EventmessageCreate]:
|
def create_eventmessages(num: int = 4) -> list[EventmessageCreate]:
|
||||||
res = []
|
res = []
|
||||||
starttime = int(time.time())
|
starttime = int(time.time())
|
||||||
for i in range(num):
|
for idx in range(num):
|
||||||
group_id = i % 5 + random.getrandbits(6)
|
i2 = idx + 1
|
||||||
|
group_id = i2 % 5 + random.getrandbits(6) + 1
|
||||||
em_req_send = EventmessageCreate(
|
em_req_send = EventmessageCreate(
|
||||||
timestamp=starttime + i * 10,
|
timestamp=starttime + i2 * 10,
|
||||||
group=i % 5,
|
group=i2 % 5,
|
||||||
group_id=group_id,
|
group_id=group_id,
|
||||||
msg_type=1,
|
msg_type=1,
|
||||||
src_did=f"did:sov:test:12{i}",
|
src_did=f"did:sov:test:12{i2}",
|
||||||
des_did=f"did:sov:test:12{i+1}",
|
des_did=f"did:sov:test:12{i2+1}",
|
||||||
msg={},
|
msg={},
|
||||||
)
|
)
|
||||||
res.append(em_req_send)
|
res.append(em_req_send)
|
||||||
em_req_rec = EventmessageCreate(
|
em_req_rec = EventmessageCreate(
|
||||||
timestamp=starttime + (i * 10) + 2,
|
timestamp=starttime + (i2 * 10) + 2,
|
||||||
group=i % 5,
|
group=i2 % 5,
|
||||||
group_id=group_id,
|
group_id=group_id,
|
||||||
msg_type=2,
|
msg_type=2,
|
||||||
src_did=f"did:sov:test:12{i}",
|
src_did=f"did:sov:test:12{i2}",
|
||||||
des_did=f"did:sov:test:12{i+1}",
|
des_did=f"did:sov:test:12{i2+1}",
|
||||||
msg={},
|
msg={},
|
||||||
)
|
)
|
||||||
res.append(em_req_rec)
|
res.append(em_req_rec)
|
||||||
group_id = i % 5 + random.getrandbits(6)
|
group_id = i2 % 5 + random.getrandbits(6)
|
||||||
em_res_send = EventmessageCreate(
|
em_res_send = EventmessageCreate(
|
||||||
timestamp=starttime + i * 10 + 4,
|
timestamp=starttime + i2 * 10 + 4,
|
||||||
group=i % 5,
|
group=i2 % 5,
|
||||||
group_id=group_id,
|
group_id=group_id,
|
||||||
msg_type=3,
|
msg_type=3,
|
||||||
src_did=f"did:sov:test:12{i+1}",
|
src_did=f"did:sov:test:12{i2+1}",
|
||||||
des_did=f"did:sov:test:12{i}",
|
des_did=f"did:sov:test:12{i2}",
|
||||||
msg={},
|
msg={},
|
||||||
)
|
)
|
||||||
res.append(em_res_send)
|
res.append(em_res_send)
|
||||||
em_res_rec = EventmessageCreate(
|
em_res_rec = EventmessageCreate(
|
||||||
timestamp=starttime + (i * 10) + 8,
|
timestamp=starttime + (i2 * 10) + 8,
|
||||||
group=i % 5,
|
group=i2 % 5,
|
||||||
group_id=group_id,
|
group_id=group_id,
|
||||||
msg_type=4,
|
msg_type=4,
|
||||||
src_did=f"did:sov:test:12{i+1}",
|
src_did=f"did:sov:test:12{i2+1}",
|
||||||
des_did=f"did:sov:test:12{i}",
|
des_did=f"did:sov:test:12{i2}",
|
||||||
msg={},
|
msg={},
|
||||||
)
|
)
|
||||||
res.append(em_res_rec)
|
res.append(em_res_rec)
|
||||||
|
|||||||
Reference in New Issue
Block a user