From fc8b50d3270041c38a1164d85b2dc8cb28e1f3f6 Mon Sep 17 00:00:00 2001 From: Valentin Ambroise Date: Sat, 1 Feb 2025 12:52:08 +0100 Subject: [PATCH 1/2] Add `offset`, `limit` and `order_by` parameters to `CRUDMixin.get()` method --- src/ouranos/core/database/models/abc.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/ouranos/core/database/models/abc.py b/src/ouranos/core/database/models/abc.py index e40f6f56..0b52ae1b 100644 --- a/src/ouranos/core/database/models/abc.py +++ b/src/ouranos/core/database/models/abc.py @@ -6,7 +6,8 @@ from typing import NamedTuple, Self, Sequence from uuid import UUID -from sqlalchemy import and_, delete, insert, inspect, Select, select, update +from sqlalchemy import ( + and_, delete, insert, inspect, Select, select, UnaryExpression, update) from sqlalchemy.ext.asyncio import AsyncSession from gaia_validators import missing @@ -100,9 +101,15 @@ async def get( cls, session: AsyncSession, /, - **lookup_keys: lookup_keys_type | None, + offset: int | None = None, + limit: int | None = None, + order_by: UnaryExpression | None = None, + **lookup_keys: list[lookup_keys_type] | lookup_keys_type | None, ) -> Self | None: """ + :param offset: the offset from which to start looking + :param limit: the maximum number of rows to query + :param order_by: how to order the results :param session: an AsyncSession instance :param lookup_keys: a dict with table column names as keys and values depending on the related column data type @@ -118,7 +125,7 @@ async def get_multiple( /, offset: int | None = None, limit: int | None = None, - order_by: str | None = None, + order_by: UnaryExpression | None = None, **lookup_keys: list[lookup_keys_type] | lookup_keys_type | None, ) -> Sequence[Self]: """ From 592dce5ba9086397a5c59cf7b1a2da918b794c2b Mon Sep 17 00:00:00 2001 From: Valentin Ambroise Date: Sat, 1 Feb 2025 12:54:40 +0100 Subject: [PATCH 2/2] Fix --- src/ouranos/core/database/models/abc.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ouranos/core/database/models/abc.py b/src/ouranos/core/database/models/abc.py index 0b52ae1b..9f2941d6 100644 --- a/src/ouranos/core/database/models/abc.py +++ b/src/ouranos/core/database/models/abc.py @@ -114,7 +114,7 @@ async def get( :param lookup_keys: a dict with table column names as keys and values depending on the related column data type """ - stmt = cls._generate_get_query(**lookup_keys) + stmt = cls._generate_get_query(offset, limit, order_by, **lookup_keys) result = await session.execute(stmt) return result.scalar_one_or_none() @@ -136,7 +136,7 @@ async def get_multiple( :param lookup_keys: a dict with table column names as keys and values depending on the related column data type """ - stmt = cls._generate_get_query(**lookup_keys) + stmt = cls._generate_get_query(offset, limit, order_by, **lookup_keys) result = await session.execute(stmt) return result.scalars().all()