Skip to content

Commit 928570d

Browse files
author
Andrei Neagu
committed
added mock data provider
1 parent dc60766 commit 928570d

File tree

1 file changed

+41
-2
lines changed
  • services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/api/ui

1 file changed

+41
-2
lines changed

services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/api/ui/_services.py

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
1+
import asyncio
12
from typing import Annotated, Any, Final
23

34
from fastapi import APIRouter, Depends, FastAPI
45
from fastapi.responses import StreamingResponse
56
from fastui import AnyComponent, FastUI
67
from fastui import components as c
78
from fastui.events import PageEvent
9+
from servicelib.fastapi.app_state import SingletonInAppStateMixin
810
from starlette import status
911

1012
from ..dependencies import get_app
1113
from ._constants import API_ROOT_PATH
12-
from ._sse_utils import AbstractSSERenderer, render_items_on_change
14+
from ._sse_utils import AbstractSSERenderer, render_items_on_change, update_items
1315

1416
_PREFIX: Final[str] = "/services"
1517

@@ -47,7 +49,7 @@ def api_index() -> list[AnyComponent]:
4749

4850
class ServicesSSERenderer(AbstractSSERenderer):
4951
@staticmethod
50-
def render_item(item: Any) -> AnyComponent:
52+
def get_component(item: Any) -> AnyComponent:
5153
return c.Paragraph(text=f"{item}")
5254

5355

@@ -64,3 +66,40 @@ async def sse_ai_response(
6466
@router.get("/{path:path}", status_code=status.HTTP_404_NOT_FOUND)
6567
async def not_found():
6668
return {"message": "Not Found"}
69+
70+
71+
class MockMessagesProvider(SingletonInAppStateMixin):
72+
app_state_name: str = "mock_messages_provider"
73+
74+
def __init__(self, app: FastAPI) -> None:
75+
self.app = app
76+
self._task: asyncio.Task | None = None
77+
78+
async def _publish_mock_data(self) -> None:
79+
messages: list[Any] = []
80+
while True:
81+
await asyncio.sleep(3)
82+
83+
messages.append({"name": "a", "surname": "b"})
84+
await update_items(
85+
self.app, renderer_type=ServicesSSERenderer, items=messages
86+
)
87+
88+
def startup(self) -> None:
89+
self._task = asyncio.create_task(self._publish_mock_data())
90+
91+
async def shutdown(self) -> None:
92+
if self._task:
93+
self._task.cancel()
94+
await self._task
95+
96+
97+
def setup_services(app: FastAPI) -> None:
98+
async def on_startup() -> None:
99+
MockMessagesProvider.get_from_app_state(app).startup()
100+
101+
async def on_shutdown() -> None:
102+
await MockMessagesProvider.get_from_app_state(app).shutdown()
103+
104+
app.add_event_handler("startup", on_startup)
105+
app.add_event_handler("shutdown", on_shutdown)

0 commit comments

Comments
 (0)