feat: deliver Python workflow client
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import httpx
|
||||
import pytest
|
||||
|
||||
from wf_authoring import input_from, input_value, output_to, state_path
|
||||
from wf_client import App, ArtifactRef
|
||||
from wf_server import build_local_static_workflow_server
|
||||
from wf_transport_rpc_http import RpcWorkflowApiClient, create_rpc_app
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_http_app_calls_authors_saves_deploys_and_runs(tmp_path) -> None:
|
||||
"""Prove the public client lifecycle against the real JSON-RPC ASGI app."""
|
||||
server = build_local_static_workflow_server(tmp_path / "store")
|
||||
rpc_app = create_rpc_app(server)
|
||||
transport = httpx.ASGITransport(app=rpc_app)
|
||||
|
||||
async with httpx.AsyncClient(
|
||||
transport=transport,
|
||||
base_url="http://test",
|
||||
) as http_client:
|
||||
app = App._from_port(
|
||||
RpcWorkflowApiClient(
|
||||
url="http://test/rpc",
|
||||
http_client=http_client,
|
||||
)
|
||||
)
|
||||
constant = await app.capability("wf.std.constant")
|
||||
graph = app.new_workflow(
|
||||
"http_client_proof",
|
||||
input_schema={"type": "object", "properties": {}},
|
||||
state_schema={
|
||||
"type": "object",
|
||||
"properties": {"value": {"type": "string"}},
|
||||
},
|
||||
output_schema={
|
||||
"type": "object",
|
||||
"properties": {"value": {"type": "string"}},
|
||||
"required": ["value"],
|
||||
},
|
||||
)
|
||||
step = graph.use(
|
||||
constant,
|
||||
id="constant",
|
||||
input=[input_value("value", "hello")],
|
||||
output=[output_to("value", state_path("value"))],
|
||||
)
|
||||
end = graph.end("ok", id="end_ok")
|
||||
graph.set_entry_point(step)
|
||||
graph.connect(step, "ok", end)
|
||||
graph.set_output([input_from(state_path("value"), "value")])
|
||||
|
||||
validation = await graph.validate()
|
||||
artifact = await graph.save(version=1, title="HTTP client proof")
|
||||
run = await artifact.run({})
|
||||
|
||||
assert validation.ok is True
|
||||
assert artifact.ref == ArtifactRef("http_client_proof", 1)
|
||||
assert run.status == "completed"
|
||||
assert run.output == {"value": "hello"}
|
||||
Reference in New Issue
Block a user