Skip to content

Commit d62bad5

Browse files
committed
Enhance user account query parameters with ordering support and add utility for retrieving literal values
1 parent c0f247e commit d62bad5

File tree

3 files changed

+20
-2
lines changed

3 files changed

+20
-2
lines changed

packages/models-library/src/models_library/api_schemas_webserver/users.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
SearchPatternSafeStr,
3333
validate_input_xss_safety,
3434
)
35+
from ..rest_ordering import OrderingQueryParams
3536
from ..users import (
3637
FirstNameStr,
3738
LastNameStr,
@@ -313,7 +314,14 @@ class UsersForAdminListFilter(Filters):
313314
model_config = ConfigDict(extra="forbid")
314315

315316

316-
class UsersAccountListQueryParams(UsersForAdminListFilter, PageQueryParameters): ...
317+
UserAccountOrderFields: TypeAlias = Literal["email", "created_at"]
318+
319+
320+
class UsersAccountListQueryParams(
321+
UsersForAdminListFilter,
322+
PageQueryParameters,
323+
OrderingQueryParams[UserAccountOrderFields],
324+
): ...
317325

318326

319327
class _InvitationDetails(InputSchema):

packages/models-library/src/models_library/list_operations.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"""
77

88
from enum import Enum
9-
from typing import TYPE_CHECKING, Generic, TypeVar
9+
from typing import TYPE_CHECKING, Any, Generic, Literal, TypeVar, get_args, get_origin
1010

1111
from pydantic.generics import GenericModel
1212

@@ -29,6 +29,13 @@ def __str__(self) -> str: ...
2929
TField = TypeVar("TField", bound=str)
3030

3131

32+
def get_literal_values(tfield: Any) -> tuple[str, ...] | None:
33+
"""Return Literal values if TField is a Literal, else None."""
34+
if get_origin(tfield) is Literal:
35+
return get_args(tfield)
36+
return None
37+
38+
3239
class OrderClause(GenericModel, Generic[TField]):
3340
field: TField
3441
direction: OrderDirection = OrderDirection.ASC

packages/models-library/tests/test_rest_ordering.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import pytest
55
from common_library.json_serialization import json_dumps
66
from models_library.basic_types import IDStr
7+
from models_library.list_operations import get_literal_values
78
from models_library.rest_ordering import (
89
OrderBy,
910
OrderClause,
@@ -259,6 +260,8 @@ class TestOrderingParams(OrderingQueryParams[ValidField]):
259260
OrderClause[ValidField](field="gender", direction=OrderDirection.ASC),
260261
]
261262

263+
assert get_literal_values(ValidField) == ("created_at", "name", "gender")
264+
262265

263266
def test_ordering_query_params_validation_error_with_invalid_fields():
264267
"""Test that OrderingQueryParams raises ValidationError when invalid fields are used"""

0 commit comments

Comments
 (0)