Skip to content

Commit e0f9dd4

Browse files
dyanmically fetch available calibrations from the worker. Some js utilties for tasks
1 parent a5ecd8b commit e0f9dd4

22 files changed

+211
-374
lines changed

core/pioreactor/calibrations/protocols/od_reference_standard.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,13 @@ def get_reference_standard_step(
261261
class ODReferenceStandardProtocol(CalibrationProtocol[pt.ODCalibrationDevices]):
262262
target_device = pt.OD_DEVICES
263263
protocol_name = "od_reference_standard"
264+
title = "Optics Calibration Jig"
264265
description = "Calibrate OD using the Pioreactor Optical Reference Standard."
266+
requirements = (
267+
"OD reading must be off before starting.",
268+
"Insert the Optics Calibration Jig.",
269+
"Set ir_led_intensity in [od_reading.config] to a numeric value.",
270+
)
265271
step_registry: ClassVar[StepRegistry] = _REFERENCE_STANDARD_STEPS
266272

267273
@classmethod

core/pioreactor/calibrations/protocols/od_standards.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -581,7 +581,13 @@ def get_standards_step(
581581
class StandardsODProtocol(CalibrationProtocol[pt.ODCalibrationDevices]):
582582
target_device = pt.OD_DEVICES
583583
protocol_name = "standards"
584-
description = "Calibrate OD using standards. Requires multiple vials"
584+
title = "OD standards calibration"
585+
description = "Calibrate OD channels using a series of OD600 standards and a blank."
586+
requirements = (
587+
"OD reading and stirring must be off before starting.",
588+
"Have OD600 standards ready (including a blank).",
589+
"Each vial should include a stir bar.",
590+
)
585591
step_registry: ClassVar[StepRegistry] = _OD_STANDARDS_STEPS
586592

587593
@classmethod

core/pioreactor/calibrations/protocols/pump_duration_based.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -514,6 +514,12 @@ def run_pump_calibration(
514514
class DurationBasedPumpProtocol(CalibrationProtocol[pt.PumpCalibrationDevices]):
515515
target_device = pt.PUMP_DEVICES
516516
protocol_name = "duration_based"
517+
title = "Duration-based pump calibration"
518+
description = "Build a duration-to-volume curve for the {device} pump using a simple multi-step flow."
519+
requirements = (
520+
"Place the outflow tube into a measuring container or scale.",
521+
"Have clean water available for priming and tests.",
522+
)
517523
step_registry: ClassVar[StepRegistry] = _PUMP_DURATION_STEPS
518524

519525
@classmethod

core/pioreactor/calibrations/protocols/stirring_dc_based.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,12 @@ def get_dc_based_step(
268268
class DCBasedStirringProtocol(CalibrationProtocol[Literal["stirring"]]):
269269
target_device = "stirring"
270270
protocol_name = "dc_based"
271+
title = "Stirring DC-based calibration"
272+
description = "Maps duty cycle to RPM for the current stirrer configuration."
273+
requirements = (
274+
"Stirring must be off before starting.",
275+
"Insert a vial with a stir bar and the liquid volume you plan to use (water is fine).",
276+
)
271277
step_registry: ClassVar[StepRegistry] = _DC_BASED_STEPS
272278

273279
@classmethod

core/pioreactor/calibrations/registry.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
class CalibrationProtocol(Generic[Device]):
2020
protocol_name: ClassVar[ProtocolName]
2121
target_device: ClassVar[str | list[str]]
22+
title: ClassVar[str] = ""
2223
description: ClassVar[str] = ""
24+
requirements: ClassVar[tuple[str, ...]] = ()
2325

2426
def __init_subclass__(cls, **kwargs):
2527
super().__init_subclass__(**kwargs)

core/pioreactor/web/api.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1303,6 +1303,15 @@ def get_media_rates(experiment: str) -> ResponseReturnValue:
13031303
## CALIBRATIONS
13041304

13051305

1306+
@api_bp.route("/workers/<pioreactor_unit>/calibration_protocols", methods=["GET"])
1307+
def get_calibration_protocols(pioreactor_unit: str) -> DelayedResponseReturnValue:
1308+
if pioreactor_unit == UNIVERSAL_IDENTIFIER:
1309+
task = broadcast_get_across_workers("/unit_api/calibration_protocols")
1310+
else:
1311+
task = tasks.multicast_get("/unit_api/calibration_protocols", [pioreactor_unit])
1312+
return create_task_response(task)
1313+
1314+
13061315
@api_bp.route("/workers/<pioreactor_unit>/calibrations", methods=["GET"])
13071316
def get_all_calibrations(pioreactor_unit: str) -> DelayedResponseReturnValue:
13081317
if pioreactor_unit == UNIVERSAL_IDENTIFIER:

core/pioreactor/web/static/asset-manifest.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"files": {
33
"main.css": "/static/static/css/main.9c7a48b7.css",
4-
"main.js": "/static/static/js/main.e942ad86.js",
4+
"main.js": "/static/static/js/main.552b6610.js",
55
"static/media/pioreactor_cloud.webp": "/static/static/media/pioreactor_cloud.b15b29e435797dc69d76.webp",
66
"static/media/roboto-all-500-normal.woff": "/static/static/media/roboto-all-500-normal.0ab669b7a0d19b178f57.woff",
77
"static/media/roboto-all-700-normal.woff": "/static/static/media/roboto-all-700-normal.a457fde362a540fcadff.woff",
@@ -30,10 +30,10 @@
3030
"static/media/roboto-greek-ext-700-normal.woff2": "/static/static/media/roboto-greek-ext-700-normal.bd9854c751441ccc1a70.woff2",
3131
"index.html": "/static/index.html",
3232
"main.9c7a48b7.css.map": "/static/static/css/main.9c7a48b7.css.map",
33-
"main.e942ad86.js.map": "/static/static/js/main.e942ad86.js.map"
33+
"main.552b6610.js.map": "/static/static/js/main.552b6610.js.map"
3434
},
3535
"entrypoints": [
3636
"static/css/main.9c7a48b7.css",
37-
"static/js/main.e942ad86.js"
37+
"static/js/main.552b6610.js"
3838
]
3939
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/static/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Pioreactor"/><link rel="apple-touch-icon" href="/static/logo192.png"/><link rel="manifest" href="/static/manifest.json"/><script defer="defer" src="/static/static/js/main.e942ad86.js"></script><link href="/static/static/css/main.9c7a48b7.css" rel="stylesheet"></head><body><div id="root"></div></body></html>
1+
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/static/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Pioreactor"/><link rel="apple-touch-icon" href="/static/logo192.png"/><link rel="manifest" href="/static/manifest.json"/><script defer="defer" src="/static/static/js/main.552b6610.js"></script><link href="/static/static/css/main.9c7a48b7.css" rel="stylesheet"></head><body><div id="root"></div></body></html>

core/pioreactor/web/static/static/js/main.e942ad86.js

Lines changed: 0 additions & 154 deletions
This file was deleted.

core/pioreactor/web/static/static/js/main.e942ad86.js.LICENSE.txt

Lines changed: 0 additions & 88 deletions
This file was deleted.

0 commit comments

Comments
 (0)