1818from flask import current_app
1919from flask import g
2020from flask .sansio .app import App
21+ from sqlalchemy .orm .interfaces import ORMOption
2122
2223from ._cli import add_models_to_shell
2324from ._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