Skip to content

Commit 79e8c92

Browse files
committed
refactor: Rename DurableTaskSchedulerServerlessWorker to ServerlessWorker and update related imports
1 parent b502afb commit 79e8c92

7 files changed

Lines changed: 38 additions & 39 deletions

File tree

durabletask-azuremanaged/durabletask/azuremanaged/extensions/serverless/__init__.py

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,35 +10,15 @@
1010
Usage::
1111
1212
from durabletask.azuremanaged.extensions.serverless import (
13-
DurableTaskSchedulerServerlessWorker,
13+
ServerlessWorker,
1414
ServerlessActivitiesClient,
1515
)
1616
"""
1717

18-
from durabletask.azuremanaged.extensions.serverless.client import (
19-
DEFAULT_CPU,
20-
DEFAULT_MAX_CONCURRENT_ACTIVITIES,
21-
DEFAULT_MEMORY,
22-
DEFAULT_WORKER_PROFILE_ID,
23-
ServerlessActivitiesClient,
24-
build_image_ref,
25-
build_serverless_activity_declaration,
26-
build_serverless_worker_heartbeat,
27-
build_serverless_worker_start,
28-
resolve_activity_names,
29-
)
30-
from durabletask.azuremanaged.extensions.serverless.worker import DurableTaskSchedulerServerlessWorker
18+
from durabletask.azuremanaged.extensions.serverless.client import ServerlessActivitiesClient
19+
from durabletask.azuremanaged.extensions.serverless.worker import ServerlessWorker
3120

3221
__all__ = [
33-
"DEFAULT_CPU",
34-
"DEFAULT_MAX_CONCURRENT_ACTIVITIES",
35-
"DEFAULT_MEMORY",
36-
"DEFAULT_WORKER_PROFILE_ID",
37-
"DurableTaskSchedulerServerlessWorker",
22+
"ServerlessWorker",
3823
"ServerlessActivitiesClient",
39-
"build_image_ref",
40-
"build_serverless_activity_declaration",
41-
"build_serverless_worker_heartbeat",
42-
"build_serverless_worker_start",
43-
"resolve_activity_names",
4424
]

durabletask-azuremanaged/durabletask/azuremanaged/extensions/serverless/client.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,11 @@
2121
DEFAULT_MAX_CONCURRENT_ACTIVITIES = 100
2222

2323

24-
def resolve_activity_names(activity_names: Iterable[str]) -> list[str]:
24+
def resolve_activity_names(activity_names: str | Iterable[str]) -> list[str]:
2525
resolved: list[str] = []
2626
seen: set[str] = set()
27-
for name in activity_names:
27+
names = [activity_names] if isinstance(activity_names, str) else activity_names
28+
for name in names:
2829
normalized = name.strip()
2930
if normalized and normalized not in seen:
3031
resolved.append(normalized)
@@ -60,7 +61,7 @@ def build_image_ref(
6061

6162
def build_serverless_activity_declaration(
6263
*,
63-
activity_names: Iterable[str],
64+
activity_names: str | Iterable[str],
6465
worker_profile_id: str = DEFAULT_WORKER_PROFILE_ID,
6566
container_image: Optional[str] = None,
6667
registry_server: Optional[str] = None,
@@ -192,7 +193,7 @@ def close(self) -> None:
192193
def declare_serverless_activities(
193194
self,
194195
*,
195-
activity_names: Iterable[str],
196+
activity_names: str | Iterable[str],
196197
worker_profile_id: str = DEFAULT_WORKER_PROFILE_ID,
197198
container_image: Optional[str] = None,
198199
registry_server: Optional[str] = None,

durabletask-azuremanaged/durabletask/azuremanaged/extensions/serverless/worker.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
)
2626

2727

28-
class DurableTaskSchedulerServerlessWorker(DurableTaskSchedulerWorker):
28+
class ServerlessWorker(DurableTaskSchedulerWorker):
2929
"""DTS worker mode for activity containers started by serverless activities.
3030
3131
This worker registers a live worker session with DTS and restricts dispatch

examples/serverless/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ $env:DTS_SERVERLESS_MAX_ACTIVITIES = "1"
3131
```
3232

3333
The remote worker code cannot pass DTS runtime settings to the SDK. In a
34-
sandbox, `DurableTaskSchedulerServerlessWorker()` reads `DTS_ENDPOINT`,
34+
sandbox, `ServerlessWorker()` reads `DTS_ENDPOINT`,
3535
`DTS_TASK_HUB`, `DTS_WORKER_PROFILE_ID`, `DTS_SERVERLESS_MAX_ACTIVITIES`,
3636
`DTS_SUBSTRATE`, and `DTS_SANDBOX_ID` from environment variables injected by
3737
DTS. The worker reports its registered activity names when it connects, and

examples/serverless/main_app.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ def hello_orchestrator(ctx: task.OrchestrationContext, name: str):
4040
taskhub=taskhub_name,
4141
token_credential=credential)
4242
serverless_client.declare_serverless_activities(
43-
activity_names=[REMOTE_ACTIVITY_NAME],
43+
activity_names=REMOTE_ACTIVITY_NAME,
4444
worker_profile_id=worker_profile_id,
4545
container_image=serverless_image,
4646
cpu=serverless_cpu,

examples/serverless/remote_worker.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import time
55

66
from durabletask import task
7-
from durabletask.azuremanaged.extensions.serverless import DurableTaskSchedulerServerlessWorker
7+
from durabletask.azuremanaged.extensions.serverless import ServerlessWorker
88

99

1010
def remote_hello(ctx: task.ActivityContext, name: str) -> str:
@@ -13,7 +13,7 @@ def remote_hello(ctx: task.ActivityContext, name: str) -> str:
1313
return f"Hello {name} from Python serverless worker {sandbox_id}!"
1414

1515

16-
with DurableTaskSchedulerServerlessWorker() as worker:
16+
with ServerlessWorker() as worker:
1717
worker.add_activity(remote_hello)
1818
worker.start()
1919
print("Python serverless remote worker is running. Press Ctrl+C to stop.")

tests/durabletask-azuremanaged/test_serverless_extension.py

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33

44
import inspect
55

6-
from durabletask.azuremanaged.extensions.serverless import (
7-
DurableTaskSchedulerServerlessWorker,
6+
import durabletask.azuremanaged.extensions.serverless as serverless
7+
from durabletask.azuremanaged.extensions.serverless import ServerlessWorker
8+
from durabletask.azuremanaged.extensions.serverless.client import (
89
build_image_ref,
910
build_serverless_activity_declaration,
1011
build_serverless_worker_heartbeat,
@@ -21,6 +22,14 @@ def test_resolve_activity_names_trims_and_deduplicates() -> None:
2122
]
2223

2324

25+
def test_public_serverless_package_exports_customer_entrypoints_only() -> None:
26+
assert serverless.__all__ == [
27+
"ServerlessWorker",
28+
"ServerlessActivitiesClient",
29+
]
30+
assert serverless.ServerlessWorker is ServerlessWorker
31+
32+
2433
def test_build_image_ref_matches_dotnet_options() -> None:
2534
assert build_image_ref(container_image=" repo/image:tag ") == "repo/image:tag"
2635
assert build_image_ref(
@@ -59,6 +68,15 @@ def test_build_serverless_activity_declaration() -> None:
5968
assert list(declaration.cmd) == ["/app/remote_worker.py"]
6069

6170

71+
def test_build_serverless_activity_declaration_accepts_single_name() -> None:
72+
declaration = build_serverless_activity_declaration(
73+
worker_profile_id="preview",
74+
activity_names="RemoteHello",
75+
container_image="example.azurecr.io/serverless-worker:v1")
76+
77+
assert list(declaration.activity_names) == ["RemoteHello"]
78+
79+
6280
def test_build_serverless_activity_declaration_preserves_public_pull() -> None:
6381
declaration = build_serverless_activity_declaration(
6482
worker_profile_id="preview",
@@ -90,14 +108,14 @@ def test_build_serverless_worker_start_and_heartbeat() -> None:
90108

91109

92110
def test_serverless_worker_constructor_does_not_expose_runtime_contract() -> None:
93-
assert list(inspect.signature(DurableTaskSchedulerServerlessWorker).parameters) == []
111+
assert list(inspect.signature(ServerlessWorker).parameters) == []
94112

95113

96114
def test_serverless_worker_does_not_own_wakeup_server(monkeypatch) -> None:
97115
monkeypatch.setenv("DTS_ENDPOINT", "http://localhost:8080")
98116
monkeypatch.setenv("DTS_TASK_HUB", "env-hub")
99117

100-
worker = DurableTaskSchedulerServerlessWorker()
118+
worker = ServerlessWorker()
101119

102120
assert not hasattr(worker, "_serverless_wakeup_port")
103121
assert not hasattr(worker, "_serverless_wakeup_server")
@@ -111,7 +129,7 @@ def test_serverless_worker_reads_sandbox_environment_and_registered_activities(m
111129
monkeypatch.setenv("DTS_SUBSTRATE", "AcaSessionPool")
112130
monkeypatch.setenv("DTS_SANDBOX_ID", "env-sandbox")
113131

114-
worker = DurableTaskSchedulerServerlessWorker()
132+
worker = ServerlessWorker()
115133
worker._registry.add_named_activity("EnvActivity", lambda _ctx, value: value)
116134
worker._registry.add_named_activity("OtherActivity", lambda _ctx, value: value)
117135
worker._configure_serverless_activity_filters()
@@ -138,7 +156,7 @@ def test_serverless_worker_requires_registered_activities(monkeypatch) -> None:
138156
monkeypatch.setenv("DTS_ENDPOINT", "http://localhost:8080")
139157
monkeypatch.setenv("DTS_TASK_HUB", "env-hub")
140158

141-
worker = DurableTaskSchedulerServerlessWorker()
159+
worker = ServerlessWorker()
142160

143161
try:
144162
worker._configure_serverless_activity_filters()

0 commit comments

Comments
 (0)