Skip to content
Merged
Show file tree
Hide file tree
Changes from 131 commits
Commits
Show all changes
152 commits
Select commit Hold shift + click to select a range
2e2cc21
using health checked only
May 29, 2024
b6d7c37
revert unused
May 29, 2024
14a0f1f
refactor redis database setup
May 29, 2024
e027544
Merge branch 'master' into redis-clients-manager-health-checked
GitHK May 29, 2024
bddfa8e
partial service_tracker core
May 29, 2024
acbcaee
refactor and added API tests
May 29, 2024
6c72d62
connected to start and stop
May 29, 2024
1c914bd
refactor
May 29, 2024
1de0248
fixed tests
May 30, 2024
98f5fa9
reverted
May 30, 2024
13e4d37
Merge remote-tracking branch 'upstream/master' into pr-osparc-dy-sche…
May 30, 2024
98bdf21
Merge remote-tracking branch 'upstream/master' into pr-osparc-dy-sche…
May 30, 2024
90cd4b4
tracker can now list all tracked
May 30, 2024
0858387
added context manager
May 30, 2024
061abc1
added last checked to the TrackedServiceModel
May 30, 2024
0c62ac3
tracker.all returns nodes and models now
May 30, 2024
2a00f59
upgrade faststream
May 30, 2024
ccb767f
added test
May 30, 2024
9c25cd7
fixed tests
May 30, 2024
5940387
fixed tests
May 30, 2024
2e08854
enhances service_tracker
May 30, 2024
374e84a
wired setup functions
May 30, 2024
a019feb
Merge remote-tracking branch 'upstream/master' into pr-osparc-dy-sche…
May 30, 2024
41b42d0
Merge remote-tracking branch 'upstream/master' into pr-osparc-dy-sche…
May 31, 2024
a20929c
extended services tracker and fixed tests
May 31, 2024
0b9bcb1
mypy
May 31, 2024
0cd023f
added deferred manager and setup for status_monitor
May 31, 2024
83565e5
Merge remote-tracking branch 'upstream/master' into pr-osparc-dy-sche…
Jun 3, 2024
4598b9b
refactor RedisClientsManager
Jun 4, 2024
13d33de
Merge remote-tracking branch 'upstream/master' into redis-clients-man…
Jun 4, 2024
ae2e220
using bytes instead of json
Jun 4, 2024
a47a0ef
name of service
Jun 4, 2024
10c710e
Merge branch 'redis-clients-manager-health-checked' of github.com:Git…
Jun 4, 2024
740a3d9
Merge remote-tracking branch 'upstream/master' into pr-osparc-dy-sche…
Jun 4, 2024
38fc9f8
using pickle to serialize to json
Jun 4, 2024
9a39400
using raw binary redis
Jun 4, 2024
ff65e2b
refactor test
Jun 4, 2024
3a9c8a8
refactor
Jun 4, 2024
ab4ec3f
refactor
Jun 4, 2024
1317ff0
added base test to validate
Jun 4, 2024
1c0e332
Merge remote-tracking branch 'upstream/master' into pr-osparc-dy-sche…
Jun 4, 2024
c644563
setup monitor
Jun 4, 2024
b8eb97c
wip
Jun 4, 2024
356076f
extended _api
Jun 5, 2024
a5345cf
removed unused
Jun 5, 2024
9e39d8c
listing in comparison order
Jun 5, 2024
ebf75f9
refactor
Jun 5, 2024
8cb1b4f
wrapping up status_monitor
Jun 5, 2024
88c8926
refactor
Jun 5, 2024
c3782c9
refactor service_tracker
Jun 6, 2024
17b0ad9
basic working version of monitor
Jun 6, 2024
0238ee0
refactor
Jun 6, 2024
71ca287
basic working test
Jun 6, 2024
9b2d3db
extended use cases
Jun 6, 2024
66b15ac
test location and names
Jun 6, 2024
01cf4a1
refactor removal from tracking
Jun 6, 2024
b5df201
add description
Jun 6, 2024
3504d43
Merge remote-tracking branch 'upstream/master' into pr-osparc-dy-sche…
Jun 6, 2024
d480d60
fixed test
Jun 6, 2024
9f8158f
refactor stop service
Jun 7, 2024
8970055
fixed broken tests
Jun 7, 2024
a135324
fixed broken
Jun 7, 2024
41ce7f9
fixed example
Jun 7, 2024
3765525
fixed failing tests
Jun 7, 2024
5d07c6d
fixed broken test
Jun 7, 2024
8bce042
fixed tests
Jun 7, 2024
a82fb53
fixed broken tests
Jun 7, 2024
f0878ce
refactor name
Jun 7, 2024
aa93e57
renaming
Jun 7, 2024
4a3c16b
fixed broken test
Jun 7, 2024
4e2643f
refactor
Jun 7, 2024
66d0ef9
Merge remote-tracking branch 'origin/pr-osparc-extend-stop-params' in…
Jun 7, 2024
5612104
added requirement
Jun 7, 2024
1195d8a
service_tracker refactor
Jun 7, 2024
74f467a
can switch states form running to stopped
Jun 7, 2024
176be12
refactor
Jun 7, 2024
b80edc5
added missing
Jun 7, 2024
8a47d45
refactored test
Jun 7, 2024
0d02a76
rename
Jun 7, 2024
2560911
fixed broken app
Jun 7, 2024
ac0ea32
pushing notification to FE
Jun 7, 2024
ee22e17
using correct event name
Jun 7, 2024
b8c9236
first running version
Jun 7, 2024
18c4f87
pylint
Jun 10, 2024
27644be
mypy
Jun 10, 2024
3c9690c
Merge remote-tracking branch 'upstream/master' into redis-clients-man…
Jun 10, 2024
d303544
feedback
Jun 10, 2024
955c8b4
Merge remote-tracking branch 'origin/redis-clients-manager-health-che…
Jun 10, 2024
a3b032f
Merge remote-tracking branch 'upstream/master' into pr-osparc-dy-sche…
Jun 26, 2024
a1a7bc1
refactor test
Jul 12, 2024
4edbe0a
added typing
Jul 12, 2024
a2a268a
avoids obscuring
Jul 12, 2024
c6a97f4
refactor to be correct
Jul 12, 2024
5b4896d
Merge remote-tracking branch 'upstream/master' into pr-osparc-dy-sche…
Aug 2, 2024
d0a5415
removed redefined
Aug 2, 2024
b0a7bbe
removed unused
Aug 2, 2024
40b01ba
refactor fixture
Aug 2, 2024
5f8eb55
fixed failing tests
Aug 2, 2024
d906cd6
renaming
Aug 2, 2024
be81d86
fixe failing tests
Aug 2, 2024
2d0bf02
fixed some issues
Aug 2, 2024
0f62661
Merge remote-tracking branch 'upstream/master' into pr-osparc-dy-sche…
Aug 19, 2024
d4d2580
revert and update ccredentials
Aug 19, 2024
8d5d006
remove spaces
Aug 19, 2024
fa4f6ef
fixed broken test
Aug 19, 2024
cc310ee
fix mypy
Aug 19, 2024
f50e100
refactor docstrings
Aug 19, 2024
965368c
Merge remote-tracking branch 'upstream/master' into pr-osparc-dy-sche…
Aug 20, 2024
4b414b8
Merge remote-tracking branch 'upstream/master' into pr-osparc-dy-sche…
Aug 21, 2024
b79f975
expanded exmaple
Aug 21, 2024
d43fda7
refactor
Aug 21, 2024
329f617
renamed and moved
Aug 21, 2024
a573474
using keywordargument
Aug 21, 2024
01d6faf
removed unrequired keywork argument
Aug 21, 2024
f21eae9
removed unrequired typing ignore
Aug 21, 2024
a5e0b65
update comment
Aug 21, 2024
e1b2612
rename and remove not meaningful types
Aug 21, 2024
3f5f334
simplified code
Aug 21, 2024
f1d323e
rename
Aug 21, 2024
690fdfa
refactor interface
Aug 21, 2024
4a74f0c
Merge remote-tracking branch 'upstream/master' into pr-osparc-dy-sche…
Aug 21, 2024
162e598
renaming
Aug 21, 2024
98e9008
renaming
Aug 21, 2024
2f04e9b
docstring refactor
Aug 21, 2024
d606bbd
moving postion of field
Aug 21, 2024
32a6c5c
reusign node_id
Aug 21, 2024
67276db
refactor to support idle state
Aug 21, 2024
610103c
rename
Aug 21, 2024
6e7769d
refactor
Aug 21, 2024
88c7e4a
Merge remote-tracking branch 'upstream/master' into pr-osparc-dy-sche…
Aug 21, 2024
771e16c
fixeed broken tests
Aug 21, 2024
6cdef01
Merge remote-tracking branch 'upstream/master' into pr-osparc-dy-sche…
Sep 18, 2024
3e4d543
update docstring
Sep 18, 2024
5907c4d
refactor
Sep 18, 2024
4c99a26
revert rename
Sep 18, 2024
806410d
removed code that does not help solve any issue
Sep 18, 2024
519446d
refactor to be formally correct
Sep 18, 2024
ca7ec56
refactor logging
Sep 18, 2024
c529d4d
docstring
Sep 18, 2024
a7f1ac6
renamed functions
Sep 18, 2024
7f779d4
added description via field
Sep 18, 2024
fa9df8c
Merge remote-tracking branch 'upstream/master' into pr-osparc-dy-sche…
Sep 18, 2024
2b24453
Merge remote-tracking branch 'upstream/master' into pr-osparc-dy-sche…
Sep 24, 2024
08208ed
using limited_gather
Sep 24, 2024
299fab4
refactor test fixture
Sep 24, 2024
f5b6da7
Merge remote-tracking branch 'upstream/master' into pr-osparc-dy-sche…
Sep 24, 2024
e17964e
Merge branch 'master' into pr-osparc-dy-scheduler-polls-for-service-s…
GitHK Sep 24, 2024
6c5c9d7
fixed failing test
Sep 24, 2024
02bc40b
Merge remote-tracking branch 'upstream/master' into pr-osparc-dy-sche…
Sep 24, 2024
bff699c
Merge branch 'pr-osparc-dy-scheduler-polls-for-service-status' of git…
Sep 24, 2024
a54edfa
fixed typing
Sep 24, 2024
a47f788
Merge branch 'master' into pr-osparc-dy-scheduler-polls-for-service-s…
GitHK Sep 24, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from typing import Final

SOCKET_IO_SERVICE_STATUS_EVENT: Final[str] = "serviceStatus"
Original file line number Diff line number Diff line change
Expand Up @@ -93,19 +93,36 @@ class NodeGet(OutputSchema):

class Config:
schema_extra: ClassVar[dict[str, Any]] = {
"example": {
"published_port": 30000,
"entrypoint": "/the/entry/point/is/here",
"service_uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"service_key": "simcore/services/comp/itis/sleeper",
"service_version": "1.2.3",
"service_host": "jupyter_E1O2E-LAH",
"service_port": 8081,
"service_basepath": "/x/E1O2E-LAH",
"service_state": "pending",
"service_message": "no suitable node (insufficient resources on 1 node)",
"user_id": 123,
}
"examples": [
# computational
{
"published_port": 30000,
"entrypoint": "/the/entry/point/is/here",
"service_uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"service_key": "simcore/services/comp/itis/sleeper",
"service_version": "1.2.3",
"service_host": "jupyter_E1O2E-LAH",
"service_port": 8081,
"service_basepath": "/x/E1O2E-LAH",
"service_state": "pending",
"service_message": "no suitable node (insufficient resources on 1 node)",
"user_id": 123,
},
# dynamic
{
"published_port": 30000,
"entrypoint": "/the/entry/point/is/here",
"service_uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"service_key": "simcore/services/dynamic/some-dynamic-service",
"service_version": "1.2.3",
"service_host": "jupyter_E1O2E-LAH",
"service_port": 8081,
"service_basepath": "/x/E1O2E-LAH",
"service_state": "pending",
"service_message": "no suitable node (insufficient resources on 1 node)",
"user_id": 123,
},
]
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,18 @@ class ServiceBootType(str, Enum):
@functools.total_ordering
@unique
class ServiceState(Enum):
FAILED = "failed"

PENDING = "pending"
PULLING = "pulling"
STARTING = "starting"
RUNNING = "running"
COMPLETE = "complete"
FAILED = "failed"

STOPPING = "stopping"

COMPLETE = "complete"
IDLE = "idle"

def __lt__(self, other):
if self.__class__ is other.__class__:
comparison_order = ServiceState.comparison_order()
Expand All @@ -39,6 +43,7 @@ def comparison_order() -> dict["ServiceState", int]:
ServiceState.RUNNING: 4,
ServiceState.STOPPING: 5,
ServiceState.COMPLETE: 6,
ServiceState.IDLE: 7,
}


Expand Down
10 changes: 10 additions & 0 deletions packages/models-library/src/models_library/utils/enums.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,18 @@
import enum
import inspect
from enum import Enum, unique
from typing import Any


class auto_str(enum.auto): # noqa: N801
"""
To be used in place of `auto()` when inheriting form `StrAutoEnum`
Makes typechecking play nice.
"""

value: str = enum._auto_null # pylint:disable=protected-access # noqa: SLF001


@unique
class StrAutoEnum(str, Enum):
@staticmethod
Expand Down
1 change: 1 addition & 0 deletions packages/models-library/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import pytest

pytest_plugins = [
"pytest_simcore.faker_projects_data",
"pytest_simcore.pydantic_models",
"pytest_simcore.pytest_global_environs",
"pytest_simcore.repository_paths",
Expand Down
6 changes: 0 additions & 6 deletions packages/models-library/tests/test_utils_nodes.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,6 @@
from models_library.utils.nodes import compute_node_hash
from pydantic import AnyUrl, parse_obj_as


@pytest.fixture()
def node_id() -> NodeID:
return uuid4()


ANOTHER_NODE_ID = uuid4()
ANOTHER_NODE_OUTPUT_KEY = "the_output_link"
ANOTHER_NODE_PAYLOAD = {"outputs": {ANOTHER_NODE_OUTPUT_KEY: 36}}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import pickle
from typing import Final
from uuid import uuid4

Expand Down Expand Up @@ -33,13 +34,15 @@ async def get_new_unique_identifier(self) -> TaskUID:

async def _get_raw(self, redis_key: str) -> TaskScheduleModel | None:
found_data = await self.redis_client_sdk.redis.get(redis_key)
return None if found_data is None else TaskScheduleModel.parse_raw(found_data)
return None if found_data is None else pickle.loads(found_data) # noqa: S301

async def get(self, task_uid: TaskUID) -> TaskScheduleModel | None:
return await self._get_raw(_get_key(task_uid))

async def save(self, task_uid: TaskUID, task_schedule: TaskScheduleModel) -> None:
await self.redis_client_sdk.redis.set(_get_key(task_uid), task_schedule.json())
await self.redis_client_sdk.redis.set(
_get_key(task_uid), pickle.dumps(task_schedule)
)

async def remove(self, task_uid: TaskUID) -> None:
await self.redis_client_sdk.redis.delete(_get_key(task_uid))
Expand Down
17 changes: 17 additions & 0 deletions packages/service-library/src/servicelib/services_utils.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
import urllib.parse

from models_library.api_schemas_directorv2.dynamic_services import DynamicServiceGet
from models_library.api_schemas_webserver.projects_nodes import (
NodeGet,
NodeGetIdle,
NodeGetUnknown,
)
from models_library.services import ServiceType


Expand All @@ -9,3 +15,14 @@ def get_service_from_key(service_key: str) -> ServiceType:
if encoded_service_type == "comp":
encoded_service_type = "computational"
return ServiceType(encoded_service_type)


def get_status_as_dict(
status: NodeGetIdle | NodeGetUnknown | DynamicServiceGet | NodeGet,
) -> dict:
"""shared between different backend services to guarantee same result to frontend"""
return (
status.dict(by_alias=True)
if isinstance(status, DynamicServiceGet)
else status.dict()
)
6 changes: 4 additions & 2 deletions packages/service-library/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,11 @@ async def get_redis_client_sdk(
Callable[[RedisDatabase], AbstractAsyncContextManager[RedisClientSDK]]
]:
@asynccontextmanager
async def _(database: RedisDatabase) -> AsyncIterator[RedisClientSDK]:
async def _(
database: RedisDatabase, decode_response: bool = True # noqa: FBT002
) -> AsyncIterator[RedisClientSDK]:
redis_resources_dns = redis_service.build_redis_dsn(database)
client = RedisClientSDK(redis_resources_dns)
client = RedisClientSDK(redis_resources_dns, decode_responses=decode_response)
assert client
assert client.redis_dsn == redis_resources_dns
await client.setup()
Expand Down
6 changes: 4 additions & 2 deletions packages/service-library/tests/deferred_tasks/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@
@pytest.fixture
async def redis_client_sdk_deferred_tasks(
get_redis_client_sdk: Callable[
[RedisDatabase], AbstractAsyncContextManager[RedisClientSDK]
[RedisDatabase, bool], AbstractAsyncContextManager[RedisClientSDK]
]
) -> AsyncIterator[RedisClientSDK]:
async with get_redis_client_sdk(RedisDatabase.DEFERRED_TASKS) as client:
async with get_redis_client_sdk(
RedisDatabase.DEFERRED_TASKS, decode_response=False
) as client:
yield client
18 changes: 10 additions & 8 deletions packages/service-library/tests/deferred_tasks/example_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,19 +54,20 @@ async def on_result(cls, result: str, context: DeferredContext) -> None:

class InMemoryLists:
def __init__(self, redis_settings: RedisSettings, port: int) -> None:
self.redis_client_sdk = RedisClientSDK(
redis_settings.build_redis_dsn(RedisDatabase.DEFERRED_TASKS)
self.redis_sdk = RedisClientSDK(
redis_settings.build_redis_dsn(RedisDatabase.DEFERRED_TASKS),
decode_responses=True,
)
self.port = port

def _get_queue_name(self, queue_name: str) -> str:
return f"in_memory_lists::{queue_name}.{self.port}"

async def append_to(self, queue_name: str, value: Any) -> None:
await self.redis_client_sdk.redis.rpush(self._get_queue_name(queue_name), value) # type: ignore
await self.redis_sdk.redis.rpush(self._get_queue_name(queue_name), value)

async def get_all_from(self, queue_name: str) -> list:
return await self.redis_client_sdk.redis.lrange(
return await self.redis_sdk.redis.lrange(
self._get_queue_name(queue_name), 0, -1
) # type: ignore

Expand All @@ -79,18 +80,19 @@ def __init__(
in_memory_lists: InMemoryLists,
max_workers: NonNegativeInt,
) -> None:
self._redis_client_sdk = RedisClientSDK(
redis_settings.build_redis_dsn(RedisDatabase.DEFERRED_TASKS)
self._redis_client = RedisClientSDK(
redis_settings.build_redis_dsn(RedisDatabase.DEFERRED_TASKS),
decode_responses=False,
)
self._manager = DeferredManager(
rabbit_settings,
self._redis_client_sdk,
self._redis_client,
globals_context={"in_memory_lists": in_memory_lists},
max_workers=max_workers,
)

async def setup(self) -> None:
await self._redis_client_sdk.setup()
await self._redis_client.setup()
await self._manager.setup()


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,10 @@ class MockKeys(StrAutoEnum):
async def redis_client_sdk(
redis_service: RedisSettings,
) -> AsyncIterable[RedisClientSDK]:
sdk = RedisClientSDK(redis_service.build_redis_dsn(RedisDatabase.DEFERRED_TASKS))
sdk = RedisClientSDK(
redis_service.build_redis_dsn(RedisDatabase.DEFERRED_TASKS),
decode_responses=False,
)
await sdk.setup()
yield sdk
await sdk.shutdown()
Expand Down
1 change: 1 addition & 0 deletions packages/settings-library/src/settings_library/redis.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ class RedisDatabase(int, Enum):
ANNOUNCEMENTS = 5
DISTRIBUTED_IDENTIFIERS = 6
DEFERRED_TASKS = 7
DYNAMIC_SERVICES = 8


class RedisSettings(BaseCustomSettings):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ def setup(app: FastAPI):
async def _on_startup() -> None:
assert app.state.rabbitmq_client # nosec

# Connect to the as an external process in write-only mode
# Connect to the webserver's external process in write-only mode
# SEE https://python-socketio.readthedocs.io/en/stable/server.html#emitting-from-external-processes
app.state.external_socketio = socketio.AsyncAioPikaManager(
url=settings.DIRECTOR_V2_RABBITMQ.dsn,
Expand Down
3 changes: 2 additions & 1 deletion services/director-v2/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,19 +42,20 @@
"pytest_simcore.docker_registry",
"pytest_simcore.docker_swarm",
"pytest_simcore.environment_configs",
"pytest_simcore.faker_projects_data",
"pytest_simcore.faker_users_data",
"pytest_simcore.minio_service",
"pytest_simcore.postgres_service",
"pytest_simcore.pydantic_models",
"pytest_simcore.pytest_global_environs",
"pytest_simcore.socketio",
"pytest_simcore.rabbit_service",
"pytest_simcore.redis_service",
"pytest_simcore.repository_paths",
"pytest_simcore.schemas",
"pytest_simcore.simcore_dask_service",
"pytest_simcore.simcore_services",
"pytest_simcore.simcore_storage_service",
"pytest_simcore.socketio",
]

logger = logging.getLogger(__name__)
Expand Down
5 changes: 0 additions & 5 deletions services/director-v2/tests/unit/test_modules_dask_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -284,11 +284,6 @@ def project_id() -> ProjectID:
return uuid4()


@pytest.fixture
def node_id() -> NodeID:
return uuid4()


@dataclass
class ImageParams:
image: Image
Expand Down
3 changes: 2 additions & 1 deletion services/docker-compose-ops.yml
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,8 @@ services:
user_notifications:${REDIS_HOST}:${REDIS_PORT}:4:${REDIS_PASSWORD},
announcements:${REDIS_HOST}:${REDIS_PORT}:5:${REDIS_PASSWORD},
distributed_identifiers:${REDIS_HOST}:${REDIS_PORT}:6:${REDIS_PASSWORD},
deferred_tasks:${REDIS_HOST}:${REDIS_PORT}:7:${REDIS_PASSWORD}
deferred_tasks:${REDIS_HOST}:${REDIS_PORT}:7:${REDIS_PASSWORD},
dynamic_services:${REDIS_HOST}:${REDIS_PORT}:8:${REDIS_PASSWORD}
# If you add/remove a db, do not forget to update the --databases entry in the docker-compose.yml
ports:
- "18081:8081"
Expand Down
2 changes: 1 addition & 1 deletion services/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1144,7 +1144,7 @@ services:
"--loglevel",
"verbose",
"--databases",
"8",
"9",
"--appendonly",
"yes",
"--requirepass",
Expand Down
3 changes: 2 additions & 1 deletion services/dynamic-scheduler/requirements/_base.in
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@
--requirement ../../../packages/service-library/requirements/_fastapi.in



arrow
fastapi
httpx
packaging
python-socketio
typer[all]
uvicorn[standard]
12 changes: 12 additions & 0 deletions services/dynamic-scheduler/requirements/_base.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ arrow==1.3.0
# -r requirements/../../../packages/models-library/requirements/_base.in
# -r requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/_base.in
# -r requirements/../../../packages/service-library/requirements/_base.in
# -r requirements/_base.in
async-timeout==4.0.3
# via
# aiohttp
Expand All @@ -46,6 +47,8 @@ attrs==23.2.0
# aiohttp
# jsonschema
# referencing
bidict==0.23.1
# via python-socketio
certifi==2024.2.2
# via
# -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt
Expand Down Expand Up @@ -93,6 +96,7 @@ h11==0.14.0
# via
# httpcore
# uvicorn
# wsproto
httpcore==1.0.5
# via httpx
httptools==0.6.1
Expand Down Expand Up @@ -189,6 +193,10 @@ python-dateutil==2.9.0.post0
# via arrow
python-dotenv==1.0.1
# via uvicorn
python-engineio==4.9.1
# via python-socketio
python-socketio==5.11.2
# via -r requirements/_base.in
pyyaml==6.0.1
# via
# -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt
Expand Down Expand Up @@ -226,6 +234,8 @@ rpds-py==0.18.0
# referencing
shellingham==1.5.4
# via typer
simple-websocket==1.0.0
# via python-engineio
six==1.16.0
# via python-dateutil
sniffio==1.3.1
Expand Down Expand Up @@ -288,6 +298,8 @@ watchfiles==0.21.0
# via uvicorn
websockets==12.0
# via uvicorn
wsproto==1.2.0
# via simple-websocket
yarl==1.9.4
# via
# -r requirements/../../../packages/postgres-database/requirements/_base.in
Expand Down
Loading