Skip to content

Commit 8f1ee61

Browse files
Add optional 'persist' query to PUT/PATCH array
1 parent e86923a commit 8f1ee61

File tree

2 files changed

+15
-6
lines changed

2 files changed

+15
-6
lines changed

tiled/catalog/adapter.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1194,10 +1194,12 @@ def make_ws_schema(self):
11941194
"data_type": dataclasses.asdict(self.structure().data_type),
11951195
}
11961196

1197-
async def write(self, media_type, deserializer, entry, body):
1197+
async def write(self, media_type, deserializer, entry, body, persist=True):
11981198
shape = entry.structure().shape
11991199
if self.context.streaming_cache:
12001200
await self._stream(media_type, entry, body, shape)
1201+
if not persist:
1202+
return None
12011203
if entry.structure_family == "array":
12021204
dtype = entry.structure().data_type.to_numpy_dtype()
12031205
data = await ensure_awaitable(deserializer, body, dtype, shape)
@@ -1207,14 +1209,16 @@ async def write(self, media_type, deserializer, entry, body):
12071209
raise NotImplementedError(entry.structure_family)
12081210
return await ensure_awaitable((await self.get_adapter()).write, data)
12091211

1210-
async def write_block(self, block, media_type, deserializer, entry, body):
1212+
async def write_block(self, block, media_type, deserializer, entry, body, persist=True):
12111213
from tiled.adapters.array import slice_and_shape_from_block_and_chunks
12121214

12131215
_, shape = slice_and_shape_from_block_and_chunks(
12141216
block, entry.structure().chunks
12151217
)
12161218
if self.context.streaming_cache:
12171219
await self._stream(media_type, entry, body, shape, block=block)
1220+
if not persist:
1221+
return None
12181222
if entry.structure_family == "array":
12191223
dtype = entry.structure().data_type.to_numpy_dtype()
12201224
data = await ensure_awaitable(deserializer, body, dtype, shape)
@@ -1226,9 +1230,11 @@ async def write_block(self, block, media_type, deserializer, entry, body):
12261230
(await self.get_adapter()).write_block, data, block
12271231
)
12281232

1229-
async def patch(self, shape, offset, extend, media_type, deserializer, entry, body):
1233+
async def patch(self, shape, offset, extend, media_type, deserializer, entry, body, persist=True):
12301234
if self.context.streaming_cache:
12311235
await self._stream(media_type, entry, body, shape, offset=offset)
1236+
if not persist:
1237+
return entry.structure()
12321238
dtype = entry.structure().data_type.to_numpy_dtype()
12331239
data = await ensure_awaitable(deserializer, body, dtype, shape)
12341240
# assumes a single DataSource (currently only supporting zarr)

tiled/server/router.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1719,6 +1719,7 @@ async def delete(
17191719
async def put_array_full(
17201720
request: Request,
17211721
path: str,
1722+
persist: bool = Query(True, description="Persist data to storage"),
17221723
principal: Optional[Principal] = Depends(get_current_principal),
17231724
root_tree=Depends(get_root_tree),
17241725
session_state: dict = Depends(get_session_state),
@@ -1751,14 +1752,15 @@ async def put_array_full(
17511752
deserializer = deserialization_registry.dispatch("sparse", media_type)
17521753
else:
17531754
raise NotImplementedError(entry.structure_family)
1754-
await ensure_awaitable(entry.write, media_type, deserializer, entry, body)
1755+
await ensure_awaitable(entry.write, media_type, deserializer, entry, body, persist)
17551756
return json_or_msgpack(request, None)
17561757

17571758
@router.put("/array/block/{path:path}")
17581759
async def put_array_block(
17591760
request: Request,
17601761
path: str,
17611762
block=Depends(block),
1763+
persist: bool = Query(True, description="Persist data to storage"),
17621764
principal: Optional[Principal] = Depends(get_current_principal),
17631765
root_tree=Depends(get_root_tree),
17641766
session_state: dict = Depends(get_session_state),
@@ -1790,7 +1792,7 @@ async def put_array_block(
17901792
entry.structure_family, media_type
17911793
)
17921794
await ensure_awaitable(
1793-
entry.write_block, block, media_type, deserializer, entry, body
1795+
entry.write_block, block, media_type, deserializer, entry, body, persist
17941796
)
17951797
return json_or_msgpack(request, None)
17961798

@@ -1801,6 +1803,7 @@ async def patch_array_full(
18011803
offset=Depends(offset_param),
18021804
shape=Depends(shape_param),
18031805
extend: bool = False,
1806+
persist: bool = Query(True, description="Persist data to storage"),
18041807
principal: Optional[Principal] = Depends(get_current_principal),
18051808
root_tree=Depends(get_root_tree),
18061809
session_state: dict = Depends(get_session_state),
@@ -1830,7 +1833,7 @@ async def patch_array_full(
18301833
media_type = request.headers["content-type"]
18311834
deserializer = deserialization_registry.dispatch("array", media_type)
18321835
structure = await ensure_awaitable(
1833-
entry.patch, shape, offset, extend, media_type, deserializer, entry, body
1836+
entry.patch, shape, offset, extend, media_type, deserializer, entry, body, persist
18341837
)
18351838
return json_or_msgpack(request, structure)
18361839

0 commit comments

Comments
 (0)