api/tracking: simple data model and route for querying tracks

This commit is contained in:
Helmut Merz 2026-10-30 08:49:21 +01:00
parent 8ee3c8d015
commit d3850cce2e
2 changed files with 22 additions and 4 deletions

View file

@ -2,22 +2,39 @@
"""basic (generic) routes and views for tracks (records)"""
from datetime import datetime
from fastapi import APIRouter, Depends
from fastapi.responses import HTMLResponse
from pydantic import BaseModel, Field
import transaction
from typing import Annotated
from typing import Annotated, Any, Self
from scopes.api import deps
from scopes.storage import tracking
from scopes.storage.common import Storage
class Track(BaseModel):
@classmethod
def create(cls, obj: Any) -> Self:
return cls(**obj.asDict())
uid: str = None
head: dict[str, str]
data: dict[str, Any]
timeStamp: datetime = None
# routes
router = APIRouter()
@router.get('/tracks')
async def get_tracks(storage: Annotated[Storage, Depends(deps.storage)]):
type Storage = Annotated[Storage, Depends(deps.storage)]
@router.get('/tracks', response_model=list[Track])
async def get_tracks(storage: Storage):
tracks = storage.create(tracking.Container)
result = [tr.asDict() for tr in tracks.query()]
#result = [Track(tr) for tr in tracks.query()]
#result = [Track.create(tr) for tr in tracks.query()]
transaction.commit()
return result

View file

@ -48,6 +48,7 @@ def test_tracking(storage, caplog):
tracks = clt.get('/tracks').json()
assert len(tracks) == 1
tr = tracks[0]
assert tr['timeStamp'].startswith('202')
tr['timeStamp'] = '...'
assert tr == {'uid': 'rec-1', 'head': {'taskId': 't01', 'userName': 'john'},
'data': {'activity': 'testing'}, 'timeStamp': '...'}