11import asyncio
22import sys
3+ import warnings
34from collections .abc import Collection
45from dataclasses import dataclass
56from typing import TypeVar
1415from scim2_models import PatchOp
1516from scim2_models import Resource
1617from scim2_models import ResourceType
18+ from scim2_models import ResponseParameters
1719from scim2_models import Schema
1820from scim2_models import SearchRequest
1921from scim2_models import ServiceProviderConfig
@@ -400,11 +402,26 @@ def _prepare_query_request(
400402 self ,
401403 resource_model : type [Resource ] | None = None ,
402404 id : str | None = None ,
403- search_request : SearchRequest | dict | None = None ,
405+ query_parameters : ResponseParameters | dict | None = None ,
404406 check_request_payload : bool | None = None ,
405407 expected_status_codes : list [int ] | None = None ,
406408 ** kwargs ,
407409 ) -> RequestPayload :
410+ if "search_request" in kwargs :
411+ if query_parameters is not None :
412+ raise TypeError (
413+ "Cannot pass both 'query_parameters' and "
414+ "deprecated 'search_request'"
415+ )
416+ warnings .warn (
417+ "The 'search_request' parameter of 'query' is deprecated, "
418+ "use 'query_parameters' instead. "
419+ "Will be removed in 0.9." ,
420+ DeprecationWarning ,
421+ stacklevel = 3 ,
422+ )
423+ query_parameters = kwargs .pop ("search_request" )
424+
408425 req = RequestPayload (
409426 expected_status_codes = expected_status_codes ,
410427 request_kwargs = kwargs ,
@@ -416,17 +433,23 @@ def _prepare_query_request(
416433 if resource_model and check_request_payload :
417434 self ._check_resource_model (resource_model )
418435
419- payload : SearchRequest | None
436+ payload : ResponseParameters | None
420437 if not check_request_payload :
421- payload = search_request
438+ payload = query_parameters
422439
423- elif isinstance (search_request , SearchRequest ):
424- payload = search_request .model_dump (
440+ elif isinstance (query_parameters , SearchRequest ):
441+ payload = query_parameters .model_dump (
425442 exclude_unset = True ,
426443 exclude = {"schemas" },
427444 scim_ctx = Context .RESOURCE_QUERY_REQUEST ,
428445 )
429446
447+ elif isinstance (query_parameters , ResponseParameters ):
448+ payload = query_parameters .model_dump (
449+ exclude_unset = True ,
450+ by_alias = True ,
451+ )
452+
430453 else :
431454 payload = None
432455
@@ -703,7 +726,7 @@ def query(
703726 self ,
704727 resource_model : type [Resource ] | None = None ,
705728 id : str | None = None ,
706- search_request : SearchRequest | dict | None = None ,
729+ query_parameters : ResponseParameters | dict | None = None ,
707730 check_request_payload : bool | None = None ,
708731 check_response_payload : bool | None = None ,
709732 expected_status_codes : list [int ]
@@ -718,7 +741,14 @@ def query(
718741
719742 :param resource_model: A :class:`~scim2_models.Resource` subtype or :data:`None`
720743 :param id: The SCIM id of an object to get, or :data:`None`
721- :param search_request: An object detailing the search query parameters.
744+ :param query_parameters: A :class:`~scim2_models.ResponseParameters` or
745+ :class:`~scim2_models.SearchRequest` detailing the query parameters.
746+ Use :class:`~scim2_models.ResponseParameters` when querying a single
747+ resource by id, where only ``attributes`` and ``excludedAttributes``
748+ are meaningful (:rfc:`RFC 7644 §3.4.1 <7644#section-3.4.1>`).
749+ Use :class:`~scim2_models.SearchRequest` when listing resources, to
750+ also pass ``filter``, ``sortBy``, ``sortOrder``, ``startIndex`` and
751+ ``count`` (:rfc:`RFC 7644 §3.4.2 <7644#section-3.4.2>`).
722752 :param check_request_payload: If set, overwrites :paramref:`scim2_client.SCIMClient.check_request_payload`.
723753 :param check_response_payload: If set, overwrites :paramref:`scim2_client.SCIMClient.check_response_payload`.
724754 :param expected_status_codes: The list of expected status codes form the response.
@@ -752,13 +782,13 @@ def query(
752782 from scim2_models import User, SearchRequest
753783
754784 req = SearchRequest(filter='userName sw "john"')
755- response = scim.query(User, search_request=search_request )
785+ response = scim.query(User, query_parameters=req )
756786 # 'response' may be a ListResponse[User] or an Error object
757787
758788 .. code-block:: python
759789 :caption: Query of all the available resources
760790
761- from scim2_models import User, SearchRequest
791+ from scim2_models import User
762792
763793 response = scim.query()
764794 # 'response' may be a ListResponse[Union[User, Group, ...]] or an Error object
@@ -1030,7 +1060,7 @@ async def query(
10301060 self ,
10311061 resource_model : type [Resource ] | None = None ,
10321062 id : str | None = None ,
1033- search_request : SearchRequest | dict | None = None ,
1063+ query_parameters : ResponseParameters | dict | None = None ,
10341064 check_request_payload : bool | None = None ,
10351065 check_response_payload : bool | None = None ,
10361066 expected_status_codes : list [int ]
@@ -1045,7 +1075,14 @@ async def query(
10451075
10461076 :param resource_model: A :class:`~scim2_models.Resource` subtype or :data:`None`
10471077 :param id: The SCIM id of an object to get, or :data:`None`
1048- :param search_request: An object detailing the search query parameters.
1078+ :param query_parameters: A :class:`~scim2_models.ResponseParameters` or
1079+ :class:`~scim2_models.SearchRequest` detailing the query parameters.
1080+ Use :class:`~scim2_models.ResponseParameters` when querying a single
1081+ resource by id, where only ``attributes`` and ``excludedAttributes``
1082+ are meaningful (:rfc:`RFC 7644 §3.4.1 <7644#section-3.4.1>`).
1083+ Use :class:`~scim2_models.SearchRequest` when listing resources, to
1084+ also pass ``filter``, ``sortBy``, ``sortOrder``, ``startIndex`` and
1085+ ``count`` (:rfc:`RFC 7644 §3.4.2 <7644#section-3.4.2>`).
10491086 :param check_request_payload: If set, overwrites :paramref:`scim2_client.SCIMClient.check_request_payload`.
10501087 :param check_response_payload: If set, overwrites :paramref:`scim2_client.SCIMClient.check_response_payload`.
10511088 :param expected_status_codes: The list of expected status codes form the response.
@@ -1079,13 +1116,13 @@ async def query(
10791116 from scim2_models import User, SearchRequest
10801117
10811118 req = SearchRequest(filter='userName sw "john"')
1082- response = scim.query(User, search_request=search_request )
1119+ response = scim.query(User, query_parameters=req )
10831120 # 'response' may be a ListResponse[User] or an Error object
10841121
10851122 .. code-block:: python
10861123 :caption: Query of all the available resources
10871124
1088- from scim2_models import User, SearchRequest
1125+ from scim2_models import User
10891126
10901127 response = scim.query()
10911128 # 'response' may be a ListResponse[Union[User, Group, ...]] or an Error object
0 commit comments