Skip to content

Commit e358aa6

Browse files
Add read endpoints for service admins (#354)
1 parent 3ceb936 commit e358aa6

File tree

102 files changed

+1101
-128
lines changed

Some content is hidden

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

102 files changed

+1101
-128
lines changed

app/repository/asset.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ def get_entity_asset(
1818
entity_type: EntityType,
1919
entity_id: uuid.UUID,
2020
asset_id: uuid.UUID,
21+
*,
22+
include_deleted: bool = False,
2123
) -> Asset:
2224
"""Return a single asset, or raise an error."""
2325
query = (
@@ -26,10 +28,13 @@ def get_entity_asset(
2628
.where(
2729
Asset.entity_id == entity_id,
2830
Asset.id == asset_id,
29-
Asset.status != AssetStatus.DELETED,
3031
Entity.type == entity_type.name,
3132
)
3233
)
34+
# See: https://github.com/openbraininstitute/entitycore/issues/358
35+
if not include_deleted:
36+
query = query.where(Asset.status != AssetStatus.DELETED)
37+
3338
return self.db.execute(query).scalar_one()
3439

3540
def create_entity_asset(self, entity_id: uuid.UUID, asset: AssetCreate) -> Asset:

app/routers/admin.py

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@
33
from fastapi import APIRouter
44

55
from app.db.utils import RESOURCE_TYPE_TO_CLASS
6+
from app.dependencies.common import PaginationQuery
67
from app.dependencies.db import RepoGroupDep, SessionDep
78
from app.dependencies.s3 import StorageClientFactoryDep
9+
from app.filters.asset import AssetFilterDep
810
from app.queries.common import router_delete_one
911
from app.schemas.asset import (
1012
AssetRead,
1113
)
12-
from app.service import asset as asset_service
14+
from app.schemas.types import ListResponse
15+
from app.service import admin as admin_service, asset as asset_service
1316
from app.utils.routers import EntityRoute, ResourceRoute, entity_route_to_type, route_to_type
1417

1518
router = APIRouter(
@@ -33,6 +36,39 @@ def delete_one(
3336
)
3437

3538

39+
@router.get("/{entity_route}/{entity_id}/assets/{asset_id}")
40+
def get_entity_asset(
41+
repos: RepoGroupDep,
42+
entity_route: EntityRoute,
43+
entity_id: uuid.UUID,
44+
asset_id: uuid.UUID,
45+
) -> AssetRead:
46+
"""Return an asset associated with a specific entity."""
47+
return admin_service.get_entity_asset(
48+
repos=repos,
49+
entity_type=entity_route_to_type(entity_route),
50+
entity_id=entity_id,
51+
asset_id=asset_id,
52+
)
53+
54+
55+
@router.get("/{entity_route}/{entity_id}/assets")
56+
def get_entity_assets(
57+
repos: RepoGroupDep,
58+
entity_route: EntityRoute,
59+
entity_id: uuid.UUID,
60+
pagination_request: PaginationQuery,
61+
filter_model: AssetFilterDep,
62+
) -> ListResponse[AssetRead]:
63+
return admin_service.get_entity_assets(
64+
repos=repos,
65+
entity_route=entity_route,
66+
entity_id=entity_id,
67+
pagination_request=pagination_request,
68+
filter_model=filter_model,
69+
)
70+
71+
3672
@router.delete("/{entity_route}/{entity_id}/assets/{asset_id}")
3773
def delete_entity_asset(
3874
repos: RepoGroupDep,

app/routers/brain_atlas.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
from fastapi import APIRouter
22

33
import app.service.brain_atlas
4+
from app.routers.admin import router as admin_router
5+
6+
ROUTE = "brain-atlas"
47

58
router = APIRouter(
6-
prefix="/brain-atlas",
7-
tags=["brain-atlas"],
9+
prefix=f"/{ROUTE}",
10+
tags=[ROUTE],
811
)
912

1013
read_many = router.get("")(app.service.brain_atlas.read_many)
@@ -13,3 +16,5 @@
1316
read_one_region = router.get("/{atlas_id}/regions/{atlas_region_id}")(
1417
app.service.brain_atlas.read_one_region
1518
)
19+
20+
admin_read_one = admin_router.get(f"/{ROUTE}/{{atlas_id}}")(app.service.brain_atlas.admin_read_one)

app/routers/calibration.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
11
from fastapi import APIRouter
22

33
import app.service.calibration
4+
from app.routers.admin import router as admin_router
5+
6+
ROUTE = "calibration"
47

58
router = APIRouter(
6-
prefix="/calibration",
7-
tags=["calibration"],
9+
prefix=f"/{ROUTE}",
10+
tags=[ROUTE],
811
)
912

1013
read_many = router.get("")(app.service.calibration.read_many)
1114
read_one = router.get("/{id_}")(app.service.calibration.read_one)
1215
create_one = router.post("")(app.service.calibration.create_one)
1316
delete_one = router.delete("/{id_}")(app.service.calibration.delete_one)
1417
update_one = router.patch("/{id_}")(app.service.calibration.update_one)
18+
19+
admin_read_one = admin_router.get(f"/{ROUTE}/{{id_}}")(app.service.calibration.admin_read_one)

app/routers/cell_composition.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
from fastapi import APIRouter
22

33
import app.service.cell_composition
4+
from app.routers.admin import router as admin_router
5+
6+
ROUTE = "cell-composition"
47

58
router = APIRouter(
6-
prefix="/cell-composition",
7-
tags=["cell-composition"],
9+
prefix=f"/{ROUTE}",
10+
tags=[ROUTE],
811
)
912

1013
read_one = router.get("/{id_}")(app.service.cell_composition.read_one)
1114
read_many = router.get("")(app.service.cell_composition.read_many)
15+
16+
admin_read_one = admin_router.get(f"/{ROUTE}/{{id_}}")(app.service.cell_composition.admin_read_one)

app/routers/circuit.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,19 @@
22

33
import app.service.circuit
44
import app.service.hierarchy
5+
from app.routers.admin import router as admin_router
6+
7+
ROUTE = "circuit"
58

69
router = APIRouter(
7-
prefix="/circuit",
8-
tags=["circuit"],
10+
prefix=f"/{ROUTE}",
11+
tags=[ROUTE],
912
)
1013

1114
hierarchy = router.get("/hierarchy")(app.service.hierarchy.read_circuit_hierarchy)
1215
read_many = router.get("")(app.service.circuit.read_many)
1316
read_one = router.get("/{id_}")(app.service.circuit.read_one)
1417
create_one = router.post("")(app.service.circuit.create_one)
1518
update_one = router.patch("/{id_}")(app.service.circuit.update_one)
19+
20+
admin_read_one = admin_router.get(f"/{ROUTE}/{{id_}}")(app.service.circuit.admin_read_one)

app/routers/consortium.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
from fastapi import APIRouter
22

33
import app.service.consortium
4+
from app.routers.admin import router as admin_router
5+
6+
ROUTE = "consortium"
47

58
router = APIRouter(
6-
prefix="/consortium",
7-
tags=["consortium"],
9+
prefix=f"/{ROUTE}",
10+
tags=[ROUTE],
811
)
912

1013
read_many = router.get("")(app.service.consortium.read_many)
1114
read_one = router.get("/{id_}")(app.service.consortium.read_one)
1215
create_one = router.post("")(app.service.consortium.create_one)
16+
17+
admin_read_one = admin_router.get(f"/{ROUTE}/{{id_}}")(app.service.consortium.admin_read_one)

app/routers/contribution.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
from fastapi import APIRouter
22

33
import app.service.contribution
4+
from app.routers.admin import router as admin_router
5+
6+
ROUTE = "contribution"
47

58
router = APIRouter(
6-
prefix="/contribution",
7-
tags=["contribution"],
9+
prefix=f"/{ROUTE}",
10+
tags=[ROUTE],
811
)
912

1013
read_many = router.get("")(app.service.contribution.read_many)
1114
read_one = router.get("/{id_}")(app.service.contribution.read_one)
1215
create_one = router.post("")(app.service.contribution.create_one)
16+
17+
admin_read_one = admin_router.get(f"/{ROUTE}/{{id_}}")(app.service.contribution.admin_read_one)
Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
11
from fastapi import APIRouter
22

33
import app.service.electrical_cell_recording
4+
from app.routers.admin import router as admin_router
5+
6+
ROUTE = "electrical-cell-recording"
47

58
router = APIRouter(
6-
prefix="/electrical-cell-recording",
7-
tags=["electrical-cell-recording"],
9+
prefix=f"/{ROUTE}",
10+
tags=[ROUTE],
811
)
912

1013
read_many = router.get("")(app.service.electrical_cell_recording.read_many)
1114
read_one = router.get("/{id_}")(app.service.electrical_cell_recording.read_one)
1215
create_one = router.post("")(app.service.electrical_cell_recording.create_one)
1316
update_one = router.patch("/{id_}")(app.service.electrical_cell_recording.update_one)
17+
18+
admin_read_one = admin_router.get(f"/{ROUTE}/{{id_}}")(
19+
app.service.electrical_cell_recording.admin_read_one
20+
)
Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
11
from fastapi import APIRouter
22

33
import app.service.electrical_recording_stimulus
4+
from app.routers.admin import router as admin_router
5+
6+
ROUTE = "electrical-recording-stimulus"
47

58
router = APIRouter(
6-
prefix="/electrical-recording-stimulus",
7-
tags=["electrical-recording-stimulus"],
9+
prefix=f"/{ROUTE}",
10+
tags=[ROUTE],
811
)
912

1013
read_many = router.get("")(app.service.electrical_recording_stimulus.read_many)
1114
read_one = router.get("/{id_}")(app.service.electrical_recording_stimulus.read_one)
1215
create_one = router.post("")(app.service.electrical_recording_stimulus.create_one)
1316
update_one = router.patch("/{id_}")(app.service.electrical_recording_stimulus.update_one)
17+
18+
admin_read_one = admin_router.get(f"/{ROUTE}/{{id_}}")(
19+
app.service.electrical_recording_stimulus.admin_read_one
20+
)

0 commit comments

Comments
 (0)