diff --git a/scopes/api/tracking.py b/scopes/api/tracking.py index e2d0c4e..6c24161 100644 --- a/scopes/api/tracking.py +++ b/scopes/api/tracking.py @@ -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 diff --git a/tests/test_api.py b/tests/test_api.py index 5018d4d..463afe8 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -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': '...'}