Skip to content

Commit 40b1c45

Browse files
authored
Merge pull request #181 from Daylily-Informatics/codex/bloom-legacy-removal-tapdb-actions
Remove Bloom legacy GUI/actions and adopt TapDB dispatcher execution
2 parents cb133a8 + 419c8a3 commit 40b1c45

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+2408
-5490
lines changed

bloom_lims/api/v1/__init__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
from fastapi import APIRouter
1313

14-
from .actions import router as actions_router
1514
from .admin_auth import router as admin_auth_router
1615
from .async_tasks import router as async_tasks_router
1716
from .atlas_bridge import router as atlas_bridge_router
@@ -34,6 +33,7 @@
3433
from .templates import router as templates_router
3534
from .tracking import router as tracking_router
3635
from .user_api_tokens import router as user_api_tokens_router
36+
from .workflows import router as workflows_router
3737
from .worksets import router as worksets_router
3838

3939
# Main v1 router
@@ -49,7 +49,6 @@
4949
router.include_router(batch_router)
5050
router.include_router(async_tasks_router)
5151
router.include_router(templates_router)
52-
router.include_router(actions_router)
5352
router.include_router(subjects_router)
5453
router.include_router(lineages_router)
5554
router.include_router(file_sets_router)
@@ -59,6 +58,7 @@
5958
router.include_router(object_creation_router)
6059
router.include_router(worksets_router)
6160
router.include_router(tracking_router)
61+
router.include_router(workflows_router)
6262
router.include_router(user_api_tokens_router)
6363
router.include_router(admin_auth_router)
6464
router.include_router(external_specimens_router)
@@ -83,7 +83,6 @@ async def api_v1_info():
8383
"batch": "/api/v1/batch",
8484
"tasks": "/api/v1/tasks",
8585
"templates": "/api/v1/templates",
86-
"actions": "/api/v1/actions",
8786
"subjects": "/api/v1/subjects",
8887
"lineages": "/api/v1/lineages",
8988
"file_sets": "/api/v1/file-sets",
@@ -92,6 +91,7 @@ async def api_v1_info():
9291
"search_v2": "/api/v1/search/v2",
9392
"object_creation": "/api/v1/object-creation",
9493
"worksets": "/api/v1/worksets",
94+
"workflows": "/api/v1/workflows",
9595
"user_tokens": "/api/v1/user-tokens",
9696
"admin_auth": "/api/v1/admin/groups",
9797
"external_specimens": "/api/v1/external/specimens",

bloom_lims/api/v1/actions.py

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

bloom_lims/core/action_execution.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
"""Shared action execution service used by API and GUI routes."""
1+
"""TapDB-pattern GUI action execution service."""
22

33
from __future__ import annotations
44

@@ -11,6 +11,7 @@
1111
from typing import Any
1212

1313
from bloom_lims.core.exceptions import BloomValidationError
14+
from bloom_lims.core.tapdb_action_dispatcher import BloomTapDBActionDispatcher
1415
from bloom_lims.db import BLOOMdb3
1516
from bloom_lims.domain.base import BloomObj
1617

@@ -193,6 +194,14 @@ def _resolve_action_definition(
193194
resolved = copy.deepcopy(action_data)
194195
if not isinstance(resolved.get("captured_data"), dict):
195196
resolved["captured_data"] = {}
197+
if not resolved.get("action_template_uid"):
198+
raise ActionExecutionError(
199+
status_code=409,
200+
detail=(
201+
f"Action {action_key} is missing TapDB template metadata "
202+
"(action_template_uid). Re-seed templates and recreate the object."
203+
),
204+
)
196205
return resolved
197206

198207

@@ -323,14 +332,20 @@ def execute_action_for_instance(
323332
)
324333
action_ds["action_key"] = request_data.action_key
325334
action_ds["action_group"] = request_data.action_group
335+
action_ds["_raw_action_key"] = request_data.action_key
326336

327337
executor = _resolve_executor(instance, bdb)
328338
executor.set_actor_context(user_id=actor_user_id, email=actor_email)
329-
result = executor.do_action(
330-
request_data.euid,
331-
action=request_data.action_key,
339+
dispatcher = BloomTapDBActionDispatcher(executor)
340+
result = dispatcher.execute_action(
341+
session=bdb.session,
342+
instance=instance,
332343
action_group=request_data.action_group,
344+
action_key=request_data.action_key,
333345
action_ds=action_ds,
346+
captured_data=request_data.captured_data,
347+
create_action_record=True,
348+
user=actor_email,
334349
)
335350

336351
message = f"{request_data.action_key} performed for EUID {request_data.euid}"

0 commit comments

Comments
 (0)