Skip to content

Commit ff7eedf

Browse files
Fix SA list function using same connection (#794)
1 parent 8a8be4f commit ff7eedf

File tree

1 file changed

+19
-14
lines changed

1 file changed

+19
-14
lines changed

aiohttp_admin/backends/sqlalchemy.py

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -275,20 +275,25 @@ async def get_list(self, params: GetListParams) -> tuple[list[Record], int]:
275275
offset = (params["pagination"]["page"] - 1) * per_page
276276

277277
filters = params["filter"]
278-
async with self._db.connect() as conn:
279-
query = sa.select(self._table)
280-
if filters:
281-
query = query.where(*create_filters(self._table.c, filters))
282-
283-
count_t = conn.scalar(sa.select(sa.func.count()).select_from(query.subquery()))
284-
285-
sort_dir = sa.asc if params["sort"]["order"] == "ASC" else sa.desc
286-
order_by: sa.UnaryExpression[object] = sort_dir(params["sort"]["field"])
287-
stmt = query.offset(offset).limit(per_page).order_by(order_by)
288-
result, count = await asyncio.gather(conn.execute(stmt), count_t)
289-
entities = [r._asdict() for r in result]
290-
291-
return entities, count
278+
query = sa.select(self._table)
279+
if filters:
280+
query = query.where(*create_filters(self._table.c, filters))
281+
282+
async def get_count() -> int:
283+
async with self._db.connect() as conn:
284+
count = await conn.scalar(sa.select(sa.func.count()).select_from(query.subquery()))
285+
if count is None:
286+
raise RuntimeError("Failed to get count.")
287+
return count
288+
289+
async def get_entities() -> list[Record]:
290+
async with self._db.connect() as conn:
291+
sort_dir = sa.asc if params["sort"]["order"] == "ASC" else sa.desc
292+
order_by: sa.UnaryExpression[object] = sort_dir(params["sort"]["field"])
293+
stmt = query.offset(offset).limit(per_page).order_by(order_by)
294+
return [r._asdict() for r in await conn.execute(stmt)]
295+
296+
return await asyncio.gather(get_entities(), get_count())
292297

293298
@handle_errors
294299
async def get_one(self, record_id: Any, meta: Meta) -> Record:

0 commit comments

Comments
 (0)