From 0d8d8e9cf144ca0ea18f5bb30d72bd8cb08d4c89 Mon Sep 17 00:00:00 2001 From: Gabor Torok Date: Mon, 9 Mar 2026 11:44:17 -0700 Subject: [PATCH 1/2] make events a top level object --- app/demo_adapter.py | 7 ++++--- app/routers/status/facility_adapter.py | 4 ++-- app/routers/status/models.py | 4 +++- app/routers/status/status.py | 18 +++++++++--------- 4 files changed, 18 insertions(+), 15 deletions(-) diff --git a/app/demo_adapter.py b/app/demo_adapter.py index b9c06a80..6e8419df 100644 --- a/app/demo_adapter.py +++ b/app/demo_adapter.py @@ -414,9 +414,9 @@ async def get_resource(self: "DemoAdapter", id_: str) -> status_models.Resource: async def get_events( self: "DemoAdapter", - incident_id: str, offset: int, limit: int, + incident_id: str | None = None, resource_id: str | None = None, name: str | None = None, description: str | None = None, @@ -427,7 +427,8 @@ async def get_events( modified_since: datetime.datetime | None = None, ) -> list[status_models.Event]: events = status_models.Event.find( - [e for e in self.events if e.incident_id == incident_id], + self.events, + incident_id=incident_id, resource_id=resource_id, name=name, description=description, @@ -439,7 +440,7 @@ async def get_events( ) return paginate_list(events, offset, limit) - async def get_event(self: "DemoAdapter", incident_id: str, id_: str) -> status_models.Event: + async def get_event(self: "DemoAdapter", id_: str) -> status_models.Event: return status_models.Event.find_by_id(self.events, id_) async def get_incidents( diff --git a/app/routers/status/facility_adapter.py b/app/routers/status/facility_adapter.py index 96c32003..65b87c4c 100644 --- a/app/routers/status/facility_adapter.py +++ b/app/routers/status/facility_adapter.py @@ -35,9 +35,9 @@ async def get_resource(self: "FacilityAdapter", id_: str) -> status_models.Resou @abstractmethod async def get_events( self: "FacilityAdapter", - incident_id: str, offset: int, limit: int, + incident_id: str | None = None, resource_id: str | None = None, name: str | None = None, description: str | None = None, @@ -50,7 +50,7 @@ async def get_events( pass @abstractmethod - async def get_event(self: "FacilityAdapter", incident_id: str, id_: str) -> status_models.Event: + async def get_event(self: "FacilityAdapter", id_: str) -> status_models.Event: pass @abstractmethod diff --git a/app/routers/status/models.py b/app/routers/status/models.py index e020f4df..cfa17e3a 100644 --- a/app/routers/status/models.py +++ b/app/routers/status/models.py @@ -98,9 +98,11 @@ def incident_uri(self) -> str | None: return f"{config.API_URL_ROOT}{config.API_PREFIX}{config.API_URL}/status/incidents/{self.incident_id}" if self.incident_id else None @classmethod - def find(cls, items, name=None, description=None, modified_since=None, resource_id=None, status=None, from_=None, to=None, time_=None) -> list: + def find(cls, items, incident_id=None, name=None, description=None, modified_since=None, resource_id=None, status=None, from_=None, to=None, time_=None) -> list: items = super().find(items, name=name, description=description, modified_since=modified_since) + if incident_id: + items = [e for e in items if e.incident_id == incident_id] if resource_id: items = [e for e in items if e.resource_id == resource_id] if status: diff --git a/app/routers/status/status.py b/app/routers/status/status.py index 46ff4b4a..018492f9 100644 --- a/app/routers/status/status.py +++ b/app/routers/status/status.py @@ -132,15 +132,15 @@ async def get_incident(request: Request, incident_id: str) -> models.Incident: @router.get( - "/incidents/{incident_id}/events", - summary="Get all events for an incident", - description="Get a list of all events in this incident. You can optionally filter the returned list by specifying attribtes.", + "/events", + summary="Get all events", + description="Get a list of all events. You can optionally filter the returned list by specifying attribtes.", responses=DEFAULT_RESPONSES, operation_id="getEventsByIncident", ) async def get_events( request: Request, - incident_id: str, + incident_id: str | None = Query(default=None, min_length=1), resource_id: str | None = Query(default=None, min_length=1), name: str | None = Query(default=None, min_length=1), description: str | None = Query(default=None, min_length=1), @@ -151,10 +151,10 @@ async def get_events( modified_since: StrictDateTime = Query(default=None), offset: int = Query(default=0, ge=0, le=1000), limit: int = Query(default=100, ge=0, le=1000), - _forbid=Depends(forbidExtraQueryParams("resource_id", "name", "description", "status", "from", "to", "time", "modified_since", "offset", "limit")), + _forbid=Depends(forbidExtraQueryParams("incident_id", "resource_id", "name", "description", "status", "from", "to", "time", "modified_since", "offset", "limit")), ) -> list[models.Event]: events = await router.adapter.get_events( - incident_id, offset=offset, limit=limit, resource_id=resource_id, name=name, description=description, status=status, from_=from_, to=to, time_=time_, modified_since=modified_since + incident_id=incident_id, offset=offset, limit=limit, resource_id=resource_id, name=name, description=description, status=status, from_=from_, to=to, time_=time_, modified_since=modified_since ) if not events: raise HTTPException(status_code=404, detail="No events found") @@ -162,14 +162,14 @@ async def get_events( @router.get( - "/incidents/{incident_id}/events/{event_id}", + "/events/{event_id}", summary="Get a specific event", description="Get a specific event for a given id", responses=DEFAULT_RESPONSES, operation_id="getEventByIncident", ) -async def get_event(request: Request, incident_id: str, event_id: str) -> models.Event: - item = await router.adapter.get_event(incident_id, event_id) +async def get_event(request: Request, event_id: str) -> models.Event: + item = await router.adapter.get_event(event_id) if not item: raise HTTPException(status_code=404, detail="Item not found") return item From 3d88afb2cb620224a159a9dcef8831cf4d79a8c8 Mon Sep 17 00:00:00 2001 From: Gabor Torok Date: Mon, 9 Mar 2026 17:09:37 -0700 Subject: [PATCH 2/2] removed upper limit on offset param --- app/routers/compute/compute.py | 2 +- app/routers/facility/facility.py | 2 +- app/routers/status/status.py | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/routers/compute/compute.py b/app/routers/compute/compute.py index 6023ddd6..6a63c11f 100644 --- a/app/routers/compute/compute.py +++ b/app/routers/compute/compute.py @@ -163,7 +163,7 @@ async def get_job_status( async def get_job_statuses( resource_id: str, request: Request, - offset: int = Query(default=0, ge=0, le=1000), + offset: int = Query(default=0, ge=0), limit: int = Query(default=100, ge=0, le=1000), filters: dict[str, object] | None = None, historical: StrictHTTPBool | None = Query(default=False, description="Whether to include historical jobs. Defaults to false"), diff --git a/app/routers/facility/facility.py b/app/routers/facility/facility.py index 7abdb47a..19f6b282 100644 --- a/app/routers/facility/facility.py +++ b/app/routers/facility/facility.py @@ -28,7 +28,7 @@ async def list_sites( request: Request, modified_since: StrictDateTime = Query(default=None), name: str | None = Query(default=None, min_length=1), - offset: int = Query(default=0, ge=0, le=1000), + offset: int = Query(default=0, ge=0), limit: int = Query(default=100, ge=0, le=1000), short_name: str | None = Query(default=None, min_length=1), _forbid=Depends(forbidExtraQueryParams("modified_since", "name", "offset", "limit", "short_name")), diff --git a/app/routers/status/status.py b/app/routers/status/status.py index 018492f9..4b8759b1 100644 --- a/app/routers/status/status.py +++ b/app/routers/status/status.py @@ -28,7 +28,7 @@ async def get_resources( name: str = Query(default=None, min_length=1), description: str = Query(default=None, min_length=1), group: str = Query(default=None, min_length=1), - offset: int = Query(default=0, ge=0, le=1000), + offset: int = Query(default=0, ge=0), limit: int = Query(default=100, ge=0, le=1000), modified_since: StrictDateTime = Query(default=None), resource_type: models.ResourceType = Query(default=None), @@ -76,7 +76,7 @@ async def get_incidents( to: StrictDateTime = Query(default=None), modified_since: StrictDateTime = Query(default=None), resource_id: str | None = Query(default=None, min_length=1), - offset: int = Query(default=0, ge=0, le=1000), + offset: int = Query(default=0, ge=0), limit: int = Query(default=100, ge=0, le=1000), resolution: models.Resolution = Query(default=None), _forbid=Depends( @@ -149,7 +149,7 @@ async def get_events( time_: StrictDateTime = Query(alias="time", default=None), to: StrictDateTime = Query(default=None), modified_since: StrictDateTime = Query(default=None), - offset: int = Query(default=0, ge=0, le=1000), + offset: int = Query(default=0, ge=0), limit: int = Query(default=100, ge=0, le=1000), _forbid=Depends(forbidExtraQueryParams("incident_id", "resource_id", "name", "description", "status", "from", "to", "time", "modified_since", "offset", "limit")), ) -> list[models.Event]: