Repository navigation
Expand file tree
/
Copy path04_custom_backend.py
More file actions
44 lines (38 loc) · 1.78 KB
/
Copy path04_custom_backend.py
File metadata and controls
44 lines (38 loc) · 1.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
"""Load two independently configured readers using the same adapter."""
import asyncio
import json
from device_client import ROOT, call, connect, execute, summarize
async def main():
# Only this source-tree demonstration needs PYTHONPATH. Installed adapters
# are imported directly by the factory paths stored in device JSON files.
async with connect(
{
"SCP_LAB_DEVICES_DIR": str(ROOT / "examples" / "devices"),
"PYTHONPATH": str(ROOT / "examples" / "adapters"),
}
) as client:
devices = await call(client, "list_devices")
assert {item["device_id"] for item in devices} == {"reader-01", "reader-02"}
results = []
for device in devices:
device_id = device["device_id"]
description = await call(client, "describe_device", {"device_id": device_id})
record = await execute(
client,
{
"device_id": device_id,
"capability_id": "example_reader.read_absorbance",
"arguments": {"plate_id": f"plate-for-{device_id}", "wavelength_nm": 600},
"expected_descriptor_revision": description["descriptor_revision"],
},
)
assert record["result"]["synthetic"] is True
state = await call(client, "get_device_state", {"device_id": device_id})
assert state["observation"]["values"]["last_plate_id"] == f"plate-for-{device_id}"
results.append(
{"device_id": device_id, **summarize(record), "result": record["result"]}
)
assert results[0]["result"]["values"] != results[1]["result"]["values"]
print(json.dumps(results, indent=2))
if __name__ == "__main__":
asyncio.run(main())