Skip to content

Commit 56ebf7a

Browse files
authored
Merge pull request #34 from pallets-eco/args
don't use kwargs for `get_or_abort`
2 parents 7de6657 + 437d0e5 commit 56ebf7a

File tree

1 file changed

+26
-16
lines changed

1 file changed

+26
-16
lines changed

src/flask_sqlalchemy_lite/_extension.py

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from flask import current_app
1919
from flask import g
2020
from flask.sansio.app import App
21+
from sqlalchemy.orm.interfaces import ORMOption
2122

2223
from ._cli import add_models_to_shell
2324
from ._make import _make_engines
@@ -246,29 +247,33 @@ def get_or_abort(
246247
entity: type[M] | orm.Mapper[M],
247248
ident: t.Any,
248249
*,
250+
options: cabc.Sequence[ORMOption] | None = None,
251+
get_kwargs: dict[str, t.Any] | None = None,
249252
session: orm.Session | None = None,
250253
code: int = 404,
251254
abort_kwargs: dict[str, t.Any] | None = None,
252-
**kwargs: t.Any,
253255
) -> M:
254256
"""Call :meth:`Session.get_one <sqlalchemy.orm.Session.get_one>` and
255257
return the instance. If not found, call :func:`.abort` with a 404 error
256258
by default.
257259
258260
:param entity: The model to query.
259261
:param ident: The primary key to query.
260-
:param kwargs: Other arguments passed to ``session.get``.
262+
:param options: The ``options`` argument passed to ``session.get``.
263+
:param get_kwargs: Arguments passed to ``session.get``.
261264
:param session: The session to execute the query. Defaults to
262265
:attr:`session`.
263266
:param code: The HTTP error code.
264-
:param abort_kwargs: Other arguments passed to ``abort``.
267+
:param abort_kwargs: Arguments passed to ``abort``.
265268
266269
.. versionadded:: 0.2
267270
"""
268271
if session is None:
269272
session = self.session
270273

271-
if (obj := session.get(entity, ident, **kwargs)) is not None:
274+
if (
275+
obj := session.get(entity, ident, options=options, **(get_kwargs or {}))
276+
) is not None:
272277
return obj
273278

274279
abort(code, **(abort_kwargs or {}))
@@ -278,10 +283,11 @@ async def async_get_or_abort(
278283
entity: type[M] | orm.Mapper[M],
279284
ident: t.Any,
280285
*,
286+
options: cabc.Sequence[ORMOption] | None = None,
287+
get_kwargs: dict[str, t.Any] | None = None,
281288
session: sa_async.AsyncSession | None = None,
282289
code: int = 404,
283290
abort_kwargs: dict[str, t.Any] | None = None,
284-
**kwargs: t.Any,
285291
) -> M:
286292
"""Async version of :meth:`get_or_abort`.
287293
@@ -290,7 +296,11 @@ async def async_get_or_abort(
290296
if session is None:
291297
session = self.async_session
292298

293-
if (obj := await session.get(entity, ident, **kwargs)) is not None:
299+
if (
300+
obj := await session.get(
301+
entity, ident, options=options, **(get_kwargs or {})
302+
)
303+
) is not None:
294304
return obj
295305

296306
abort(code, **(abort_kwargs or {}))
@@ -301,31 +311,31 @@ def one_or_abort(
301311
select: sa.Select[tuple[M]],
302312
*,
303313
scalar: t.Literal[True] = True,
314+
execute_kwargs: dict[str, t.Any] | None = None,
304315
session: orm.Session | None = None,
305316
code: int = 404,
306317
abort_kwargs: dict[str, t.Any] | None = None,
307-
**kwargs: t.Any,
308318
) -> M: ...
309319
@t.overload
310320
def one_or_abort(
311321
self,
312322
select: sa.Select[TP],
313323
*,
314324
scalar: t.Literal[False],
325+
execute_kwargs: dict[str, t.Any] | None = None,
315326
session: orm.Session | None = None,
316327
code: int = 404,
317328
abort_kwargs: dict[str, t.Any] | None = None,
318-
**kwargs: t.Any,
319329
) -> sa.Row[TP]: ...
320330
def one_or_abort(
321331
self,
322332
select: sa.Select[tuple[M]] | sa.Select[TP],
323333
*,
324334
scalar: bool = True,
335+
execute_kwargs: dict[str, t.Any] | None = None,
325336
session: orm.Session | None = None,
326337
code: int = 404,
327338
abort_kwargs: dict[str, t.Any] | None = None,
328-
**kwargs: t.Any,
329339
) -> M | sa.Row[TP]:
330340
"""Call :meth:`Session.execute <sqlalchemy.orm.Session.execute>` with the
331341
given select statement and return a single result. If zero or multiple
@@ -342,18 +352,18 @@ def one_or_abort(
342352
:param select: The select statement to execute.
343353
:param scalar: Whether to call :meth:`~sqlalchemy.engine.Result.scalar_one`
344354
on the result to return a scalar instead of a tuple.
345-
:param kwargs: Other arguments passed to ``session.execute``.
355+
:param execute_kwargs: Arguments passed to ``session.execute``.
346356
:param session: The session to execute the query. Defaults to
347357
:attr:`session`.
348358
:param code: The HTTP error code.
349-
:param abort_kwargs: Other arguments passed to ``abort``.
359+
:param abort_kwargs: Arguments passed to ``abort``.
350360
351361
.. versionadded:: 0.2
352362
"""
353363
if session is None:
354364
session = self.session
355365

356-
result = session.execute(select, **kwargs)
366+
result = session.execute(select, **(execute_kwargs or {}))
357367

358368
try:
359369
if scalar:
@@ -369,31 +379,31 @@ async def async_one_or_abort(
369379
select: sa.Select[tuple[M]],
370380
*,
371381
scalar: t.Literal[True] = True,
382+
execute_kwargs: dict[str, t.Any] | None = None,
372383
session: sa_async.AsyncSession | None = None,
373384
code: int = 404,
374385
abort_kwargs: dict[str, t.Any] | None = None,
375-
**kwargs: t.Any,
376386
) -> M: ...
377387
@t.overload
378388
async def async_one_or_abort(
379389
self,
380390
select: sa.Select[TP],
381391
*,
382392
scalar: t.Literal[False],
393+
execute_kwargs: dict[str, t.Any] | None = None,
383394
session: sa_async.AsyncSession | None = None,
384395
code: int = 404,
385396
abort_kwargs: dict[str, t.Any] | None = None,
386-
**kwargs: t.Any,
387397
) -> sa.Row[TP]: ...
388398
async def async_one_or_abort(
389399
self,
390400
select: sa.Select[tuple[M]] | sa.Select[TP],
391401
*,
392402
scalar: bool = True,
403+
execute_kwargs: dict[str, t.Any] | None = None,
393404
session: sa_async.AsyncSession | None = None,
394405
code: int = 404,
395406
abort_kwargs: dict[str, t.Any] | None = None,
396-
**kwargs: t.Any,
397407
) -> M | sa.Row[TP]:
398408
"""Async version of :meth:`one_or_abort`.
399409
@@ -402,7 +412,7 @@ async def async_one_or_abort(
402412
if session is None:
403413
session = self.async_session
404414

405-
result = await session.execute(select, **kwargs)
415+
result = await session.execute(select, **(execute_kwargs or {}))
406416

407417
try:
408418
if scalar:

0 commit comments

Comments
 (0)