Skip to content

Commit f08ea64

Browse files
committed
chore: checkpoint local changes
1 parent d84eb1f commit f08ea64

File tree

5 files changed

+603
-9
lines changed

5 files changed

+603
-9
lines changed

bloom_lims/api/v1/beta_lab.py

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@
2929
BetaRunCreateRequest,
3030
BetaRunResolutionResponse,
3131
BetaRunResponse,
32+
BetaTubeCreateRequest,
33+
BetaTubeResponse,
34+
BetaSpecimenUpdateRequest,
35+
BetaTubeUpdateRequest,
3236
)
3337

3438
logger = logging.getLogger(__name__)
@@ -82,6 +86,75 @@ async def register_accepted_material(
8286
service.close()
8387

8488

89+
@router.post("/tubes", response_model=BetaTubeResponse)
90+
async def create_empty_tube(
91+
payload: BetaTubeCreateRequest,
92+
user: APIUser = Depends(require_external_write),
93+
idempotency_key: str | None = Header(None, alias="Idempotency-Key"),
94+
):
95+
service = BetaLabService(app_username=user.email)
96+
try:
97+
return service.create_empty_tube(
98+
payload=payload,
99+
idempotency_key=idempotency_key,
100+
)
101+
except ValueError as exc:
102+
raise HTTPException(
103+
status_code=_status_for_value_error(exc), detail=str(exc)
104+
) from exc
105+
except Exception as exc:
106+
logger.exception("Failed creating empty Bloom tube")
107+
raise HTTPException(status_code=500, detail=str(exc)) from exc
108+
finally:
109+
service.close()
110+
111+
112+
@router.patch("/tubes/{container_euid}", response_model=BetaTubeResponse)
113+
async def update_tube(
114+
container_euid: str,
115+
payload: BetaTubeUpdateRequest,
116+
user: APIUser = Depends(require_external_write),
117+
):
118+
service = BetaLabService(app_username=user.email)
119+
try:
120+
return service.update_tube(
121+
container_euid=container_euid,
122+
payload=payload,
123+
)
124+
except ValueError as exc:
125+
raise HTTPException(
126+
status_code=_status_for_value_error(exc), detail=str(exc)
127+
) from exc
128+
except Exception as exc:
129+
logger.exception("Failed updating Bloom tube")
130+
raise HTTPException(status_code=500, detail=str(exc)) from exc
131+
finally:
132+
service.close()
133+
134+
135+
@router.patch("/specimens/{specimen_euid}", response_model=BetaMaterialResponse)
136+
async def update_specimen(
137+
specimen_euid: str,
138+
payload: BetaSpecimenUpdateRequest,
139+
user: APIUser = Depends(require_external_write),
140+
):
141+
service = BetaLabService(app_username=user.email)
142+
try:
143+
return service.update_specimen(
144+
specimen_euid=specimen_euid,
145+
payload=payload,
146+
)
147+
except ValueError as exc:
148+
raise HTTPException(
149+
status_code=_status_for_value_error(exc), detail=str(exc)
150+
) from exc
151+
except Exception as exc:
152+
logger.exception("Failed updating Bloom specimen")
153+
raise HTTPException(status_code=500, detail=str(exc)) from exc
154+
finally:
155+
service.close()
156+
157+
85158
@router.post(
86159
"/queues/{queue_name}/items/{material_euid}",
87160
response_model=BetaQueueTransitionResponse,

bloom_lims/domain/beta_actions.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,18 @@
2323
"name": "Register Accepted Material",
2424
"description": "Creates accepted Bloom beta material and links Atlas process-item references.",
2525
},
26+
"create_empty_tube": {
27+
"name": "Create Empty Tube",
28+
"description": "Creates a Bloom beta tube/container with Atlas linkage references.",
29+
},
30+
"update_tube": {
31+
"name": "Update Tube",
32+
"description": "Updates a Bloom beta tube/container status and Atlas linkage references.",
33+
},
34+
"update_specimen": {
35+
"name": "Update Specimen",
36+
"description": "Updates Bloom beta specimen Atlas collection-event reference metadata.",
37+
},
2638
"move_material_to_queue": {
2739
"name": "Move Material To Queue",
2840
"description": "Moves Bloom beta material into a canonical beta queue.",

0 commit comments

Comments
 (0)