Skip to content

Commit fa287a2

Browse files
Minor refactor of backend code (#702)
1 parent 665dfb8 commit fa287a2

2 files changed

Lines changed: 11 additions & 12 deletions

File tree

aiohttp_admin/backends/abc.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,9 @@ async def _get_many(self, request: web.Request) -> web.Response:
186186
query = parse_obj_as(GetManyParams, request.query)
187187

188188
results = await self.get_many(query)
189+
if not results:
190+
raise web.HTTPNotFound()
191+
189192
results = [await self.filter_by_permissions(request, "view", r) for r in results
190193
if await permits(request, f"admin.{self.name}.view", context=(request, r))]
191194
for r in results:
@@ -255,6 +258,8 @@ async def _update_many(self, request: web.Request) -> web.Response:
255258

256259
# Check original records are allowed by permission filters.
257260
originals = await self.get_many({"ids": query["ids"]})
261+
if not originals:
262+
raise web.HTTPNotFound()
258263
allowed = (permits(request, f"admin.{self.name}.edit", context=(request, r))
259264
for r in originals)
260265
allowed_f = (permits(request, f"admin.{self.name}.{k}.edit", context=(request, r))
@@ -266,6 +271,7 @@ async def _update_many(self, request: web.Request) -> web.Response:
266271
raise web.HTTPForbidden()
267272

268273
ids = await self.update_many(query)
274+
# get_many() is called above, so we can be sure there will be results here.
269275
return json_response({"data": ids})
270276

271277
async def _delete(self, request: web.Request) -> web.Response:
@@ -293,6 +299,8 @@ async def _delete_many(self, request: web.Request) -> web.Response:
293299
raise web.HTTPForbidden()
294300

295301
ids = await self.delete_many(query)
302+
if not ids:
303+
raise web.HTTPNotFound()
296304
return json_response({"data": ids})
297305

298306
@cached_property

aiohttp_admin/backends/sqlalchemy.py

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -212,10 +212,7 @@ async def get_many(self, params: GetManyParams) -> list[Record]:
212212
async with self._db.connect() as conn:
213213
stmt = sa.select(self._table).where(self._table.c[self.primary_key].in_(params["ids"]))
214214
result = await conn.execute(stmt)
215-
records = [r._asdict() for r in result]
216-
if records:
217-
return records
218-
raise web.HTTPNotFound()
215+
return [r._asdict() for r in result]
219216

220217
@handle_errors
221218
async def create(self, params: CreateParams) -> Record:
@@ -241,10 +238,7 @@ async def update_many(self, params: UpdateManyParams) -> list[Union[str, int]]:
241238
async with self._db.begin() as conn:
242239
stmt = sa.update(self._table).where(self._table.c[self.primary_key].in_(params["ids"]))
243240
stmt = stmt.values(params["data"]).returning(self._table.c[self.primary_key])
244-
r = await conn.scalars(stmt)
245-
# The security check has already called get_many(), so we can be sure
246-
# there will be results here.
247-
return list(r)
241+
return list(await conn.scalars(stmt))
248242

249243
@handle_errors
250244
async def delete(self, params: DeleteParams) -> Record:
@@ -258,10 +252,7 @@ async def delete_many(self, params: DeleteManyParams) -> list[Union[str, int]]:
258252
async with self._db.begin() as conn:
259253
stmt = sa.delete(self._table).where(self._table.c[self.primary_key].in_(params["ids"]))
260254
r = await conn.scalars(stmt.returning(self._table.c[self.primary_key]))
261-
ids = list(r)
262-
if ids:
263-
return ids
264-
raise web.HTTPNotFound()
255+
return list(r)
265256

266257
def _get_validators(
267258
self, table: sa.Table, c: sa.Column[object]

0 commit comments

Comments
 (0)