|
29 | 29 | BetaRunCreateRequest, |
30 | 30 | BetaRunResolutionResponse, |
31 | 31 | BetaRunResponse, |
| 32 | + BetaTubeCreateRequest, |
| 33 | + BetaTubeResponse, |
| 34 | + BetaSpecimenUpdateRequest, |
| 35 | + BetaTubeUpdateRequest, |
32 | 36 | ) |
33 | 37 |
|
34 | 38 | logger = logging.getLogger(__name__) |
@@ -82,6 +86,75 @@ async def register_accepted_material( |
82 | 86 | service.close() |
83 | 87 |
|
84 | 88 |
|
| 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 | + |
85 | 158 | @router.post( |
86 | 159 | "/queues/{queue_name}/items/{material_euid}", |
87 | 160 | response_model=BetaQueueTransitionResponse, |
|
0 commit comments