Skip to content

Commit e68d93f

Browse files
committed
Add a function to save state across tasks
1 parent eed52ac commit e68d93f

File tree

2 files changed

+20
-5
lines changed

2 files changed

+20
-5
lines changed

src/appose/python_worker.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,10 @@
5151

5252

5353
class Task:
54-
def __init__(self, uuid: str, script: str, inputs: Args | None = None) -> None:
54+
def __init__(
55+
self, worker: "Worker", uuid: str, script: str, inputs: Args | None = None
56+
) -> None:
57+
self._worker = worker
5558
self._uuid = uuid
5659
self._script = script
5760
self._inputs = inputs
@@ -62,6 +65,9 @@ def __init__(self, uuid: str, script: str, inputs: Args | None = None) -> None:
6265
self.outputs = {}
6366
self.cancel_requested = False
6467

68+
def export(self, **kwargs):
69+
self._worker.exports.update(kwargs)
70+
6571
def update(
6672
self,
6773
message: str | None = None,
@@ -96,6 +102,7 @@ def _run(self) -> None:
96102
try:
97103
# Populate script bindings.
98104
binding = {"task": self}
105+
binding.update(self._worker.exports)
99106
if self._inputs is not None:
100107
binding.update(self._inputs)
101108

@@ -184,6 +191,7 @@ class Worker:
184191
def __init__(self):
185192
self.tasks = {}
186193
self.queue: list[Task] = []
194+
self.exports = {}
187195
self.running = True
188196

189197
# Flag this process as a worker, not a service.
@@ -223,7 +231,7 @@ def _process_input(self) -> None:
223231
script = request.get("script")
224232
inputs = request.get("inputs")
225233
queue = request.get("queue")
226-
task = Task(uuid, script, inputs)
234+
task = Task(self, uuid, script, inputs)
227235
self.tasks[uuid] = task
228236
if queue == "main":
229237
# Add the task to the main thread queue.

tests/test_appose.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,11 @@
5757
task.outputs["result"] = time
5858
"""
5959

60-
sqrt_import = """
60+
calc_sqrt_python = """
6161
from math import sqrt
6262
def sqrt_age(age):
6363
return sqrt(age)
64+
task.export(sqrt_age=sqrt_age)
6465
task.outputs["result"] = sqrt_age(age)
6566
"""
6667

@@ -103,16 +104,22 @@ def test_service_startup_failure():
103104
) == str(e)
104105

105106

106-
def test_scope():
107+
def test_scope_python():
107108
env = appose.system()
108109
with env.python() as service:
109110
maybe_debug(service)
110-
task = service.task(sqrt_import, {"age": 100})
111+
task = service.task(calc_sqrt_python, {"age": 100})
111112
task.wait_for()
112113
assert TaskStatus.COMPLETE == task.status
113114
result = round(task.outputs.get("result"))
114115
assert result == 10
115116

117+
task = service.task("task.outputs['result'] = sqrt_age(age)", {"age": 81})
118+
task.wait_for()
119+
assert TaskStatus.COMPLETE == task.status
120+
result = round(task.outputs.get("result"))
121+
assert result == 9
122+
116123

117124
def test_main_thread_queue_groovy():
118125
env = appose.system()

0 commit comments

Comments
 (0)