wt-runner 0.2.0__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {wt_runner-0.2.0 → wt_runner-0.3.0}/CHANGELOG.md +4 -0
- {wt_runner-0.2.0/src/wt_runner.egg-info → wt_runner-0.3.0}/PKG-INFO +1 -1
- {wt_runner-0.2.0 → wt_runner-0.3.0}/pyproject.toml +1 -1
- {wt_runner-0.2.0 → wt_runner-0.3.0}/src/wt_runner/_version.py +3 -3
- {wt_runner-0.2.0 → wt_runner-0.3.0}/src/wt_runner/app.py +13 -0
- {wt_runner-0.2.0 → wt_runner-0.3.0/src/wt_runner.egg-info}/PKG-INFO +1 -1
- {wt_runner-0.2.0 → wt_runner-0.3.0}/tests/test_app.py +21 -0
- {wt_runner-0.2.0 → wt_runner-0.3.0}/README.md +0 -0
- {wt_runner-0.2.0 → wt_runner-0.3.0}/setup.cfg +0 -0
- {wt_runner-0.2.0 → wt_runner-0.3.0}/src/wt_runner/__init__.py +0 -0
- {wt_runner-0.2.0 → wt_runner-0.3.0}/src/wt_runner/py.typed +0 -0
- {wt_runner-0.2.0 → wt_runner-0.3.0}/src/wt_runner/testing.py +0 -0
- {wt_runner-0.2.0 → wt_runner-0.3.0}/src/wt_runner/tracing.py +0 -0
- {wt_runner-0.2.0 → wt_runner-0.3.0}/src/wt_runner.egg-info/SOURCES.txt +0 -0
- {wt_runner-0.2.0 → wt_runner-0.3.0}/src/wt_runner.egg-info/dependency_links.txt +0 -0
- {wt_runner-0.2.0 → wt_runner-0.3.0}/src/wt_runner.egg-info/requires.txt +0 -0
- {wt_runner-0.2.0 → wt_runner-0.3.0}/src/wt_runner.egg-info/top_level.txt +0 -0
- {wt_runner-0.2.0 → wt_runner-0.3.0}/tests/__init__.py +0 -0
- {wt_runner-0.2.0 → wt_runner-0.3.0}/tests/conftest.py +0 -0
- {wt_runner-0.2.0 → wt_runner-0.3.0}/tests/test_gcp_imports.py +0 -0
- {wt_runner-0.2.0 → wt_runner-0.3.0}/tests/test_testing.py +0 -0
- {wt_runner-0.2.0 → wt_runner-0.3.0}/tests/test_tracing.py +0 -0
- {wt_runner-0.2.0 → wt_runner-0.3.0}/uv.lock +0 -0
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v0.3.0 — 2026-05-28
|
|
4
|
+
|
|
5
|
+
- Add `GET /params` endpoint that returns the workflow's `params.json` by proxying the compiled CLI's new `get params` metadata attribute ([#178](https://github.com/wildlife-dynamics/wt/pull/178))
|
|
6
|
+
|
|
3
7
|
## v0.2.0 — 2026-05-13
|
|
4
8
|
|
|
5
9
|
- Register the new `SandboxInvoker` and `CloudRunJobsSandboxInvoker` in the `INVOKERS` dispatch map ([#164](https://github.com/wildlife-dynamics/wt/pull/164))
|
|
@@ -167,7 +167,7 @@ extend-immutable-calls = [
|
|
|
167
167
|
|
|
168
168
|
[tool.pixi.package]
|
|
169
169
|
name = "wt-runner"
|
|
170
|
-
version = "0.
|
|
170
|
+
version = "0.3.0"
|
|
171
171
|
|
|
172
172
|
[tool.pixi.package.build]
|
|
173
173
|
backend = { name = "pixi-build-python", version = "*", channels = ["conda-forge", "https://prefix.dev/pixi-build-backends"] }
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.
|
|
22
|
-
__version_tuple__ = version_tuple = (0,
|
|
21
|
+
__version__ = version = '0.3.0'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 3, 0)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g56358d1'
|
|
@@ -642,6 +642,19 @@ async def rjsf(invoker: AbstractInvoker = Depends(resolve_invoker)) -> dict[str,
|
|
|
642
642
|
return await _get_metadata_attribute("rjsf", invoker)
|
|
643
643
|
|
|
644
644
|
|
|
645
|
+
@app.get("/params", status_code=200)
|
|
646
|
+
async def params(invoker: AbstractInvoker = Depends(resolve_invoker)) -> dict[str, Any]:
|
|
647
|
+
"""Get the params json for the workflow.
|
|
648
|
+
|
|
649
|
+
Args:
|
|
650
|
+
invoker: Invoker instance
|
|
651
|
+
|
|
652
|
+
Returns:
|
|
653
|
+
Workflow's params.json
|
|
654
|
+
"""
|
|
655
|
+
return await _get_metadata_attribute("params", invoker)
|
|
656
|
+
|
|
657
|
+
|
|
645
658
|
@app.get("/data-connection-property-names", status_code=200)
|
|
646
659
|
async def data_connection_property_names(
|
|
647
660
|
invoker: AbstractInvoker = Depends(resolve_invoker),
|
|
@@ -284,6 +284,27 @@ async def test_convert_unexpected_envelope():
|
|
|
284
284
|
await _convert("formdata", "params", '{"input": "data"}', mock_invoker)
|
|
285
285
|
|
|
286
286
|
|
|
287
|
+
@pytest.mark.parametrize(
|
|
288
|
+
("endpoint", "attr"),
|
|
289
|
+
[("/rjsf", "rjsf"), ("/params", "params")],
|
|
290
|
+
)
|
|
291
|
+
def test_metadata_endpoint_returns_invoker_output(client: TestClient, endpoint: str, attr: str):
|
|
292
|
+
"""GET /rjsf and /params return the parsed CLI output and call ``get <attr>``."""
|
|
293
|
+
expected = {"some": "schema"}
|
|
294
|
+
mock_invoker = AsyncMock()
|
|
295
|
+
mock_invoker.check_output = AsyncMock(return_value=json.dumps(expected))
|
|
296
|
+
|
|
297
|
+
app.dependency_overrides[resolve_invoker] = lambda: mock_invoker
|
|
298
|
+
try:
|
|
299
|
+
response = client.get(endpoint)
|
|
300
|
+
finally:
|
|
301
|
+
app.dependency_overrides.pop(resolve_invoker, None)
|
|
302
|
+
|
|
303
|
+
assert response.status_code == 200
|
|
304
|
+
assert response.json() == expected
|
|
305
|
+
mock_invoker.check_output.assert_called_once_with(["get", attr])
|
|
306
|
+
|
|
307
|
+
|
|
287
308
|
@pytest.mark.parametrize("endpoint", ["/formdata-to-params", "/params-to-formdata"])
|
|
288
309
|
def test_convert_endpoint_422_body_matches_validation_error_response(
|
|
289
310
|
client: TestClient, endpoint: str
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|