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
@@ -396,11 +398,32 @@ def _prepare_create_request(
396398
397399 return req
398400
401+ @staticmethod
402+ def _resolve_query_parameters (
403+ query_parameters : ResponseParameters | dict | None ,
404+ search_request : ResponseParameters | dict | None ,
405+ ) -> ResponseParameters | dict | None :
406+ if search_request is not None :
407+ if query_parameters is not None :
408+ raise TypeError (
409+ "Cannot pass both 'query_parameters' and "
410+ "deprecated 'search_request'"
411+ )
412+ warnings .warn (
413+ "The 'search_request' parameter of 'query' is deprecated, "
414+ "use 'query_parameters' instead. "
415+ "Will be removed in 0.9." ,
416+ DeprecationWarning ,
417+ stacklevel = 3 ,
418+ )
419+ return search_request
420+ return query_parameters
421+
399422 def _prepare_query_request (
400423 self ,
401424 resource_model : type [Resource ] | None = None ,
402425 id : str | None = None ,
403- search_request : SearchRequest | dict | None = None ,
426+ query_parameters : ResponseParameters | dict | None = None ,
404427 check_request_payload : bool | None = None ,
405428 expected_status_codes : list [int ] | None = None ,
406429 ** kwargs ,
@@ -416,17 +439,23 @@ def _prepare_query_request(
416439 if resource_model and check_request_payload :
417440 self ._check_resource_model (resource_model )
418441
419- payload : SearchRequest | None
442+ payload : ResponseParameters | None
420443 if not check_request_payload :
421- payload = search_request
444+ payload = query_parameters
422445
423- elif isinstance (search_request , SearchRequest ):
424- payload = search_request .model_dump (
446+ elif isinstance (query_parameters , SearchRequest ):
447+ payload = query_parameters .model_dump (
425448 exclude_unset = True ,
426449 exclude = {"schemas" },
427450 scim_ctx = Context .RESOURCE_QUERY_REQUEST ,
428451 )
429452
453+ elif isinstance (query_parameters , ResponseParameters ):
454+ payload = query_parameters .model_dump (
455+ exclude_unset = True ,
456+ by_alias = True ,
457+ )
458+
430459 else :
431460 payload = None
432461
@@ -703,12 +732,13 @@ def query(
703732 self ,
704733 resource_model : type [Resource ] | None = None ,
705734 id : str | None = None ,
706- search_request : SearchRequest | dict | None = None ,
735+ query_parameters : ResponseParameters | dict | None = None ,
707736 check_request_payload : bool | None = None ,
708737 check_response_payload : bool | None = None ,
709738 expected_status_codes : list [int ]
710739 | None = SCIMClient .QUERY_RESPONSE_STATUS_CODES ,
711740 raise_scim_errors : bool | None = None ,
741+ search_request : ResponseParameters | dict | None = None ,
712742 ** kwargs ,
713743 ) -> Resource | ListResponse [Resource ] | Error | dict :
714744 """Perform a GET request to read resources, as defined in :rfc:`RFC7644 §3.4.2 <7644#section-3.4.2>`.
@@ -718,7 +748,14 @@ def query(
718748
719749 :param resource_model: A :class:`~scim2_models.Resource` subtype or :data:`None`
720750 :param id: The SCIM id of an object to get, or :data:`None`
721- :param search_request: An object detailing the search query parameters.
751+ :param query_parameters: A :class:`~scim2_models.ResponseParameters` or
752+ :class:`~scim2_models.SearchRequest` detailing the query parameters.
753+ Use :class:`~scim2_models.ResponseParameters` when querying a single
754+ resource by id, where only ``attributes`` and ``excludedAttributes``
755+ are meaningful (:rfc:`RFC 7644 §3.4.1 <7644#section-3.4.1>`).
756+ Use :class:`~scim2_models.SearchRequest` when listing resources, to
757+ also pass ``filter``, ``sortBy``, ``sortOrder``, ``startIndex`` and
758+ ``count`` (:rfc:`RFC 7644 §3.4.2 <7644#section-3.4.2>`).
722759 :param check_request_payload: If set, overwrites :paramref:`scim2_client.SCIMClient.check_request_payload`.
723760 :param check_response_payload: If set, overwrites :paramref:`scim2_client.SCIMClient.check_response_payload`.
724761 :param expected_status_codes: The list of expected status codes form the response.
@@ -752,13 +789,13 @@ def query(
752789 from scim2_models import User, SearchRequest
753790
754791 req = SearchRequest(filter='userName sw "john"')
755- response = scim.query(User, search_request=search_request )
792+ response = scim.query(User, query_parameters=req )
756793 # 'response' may be a ListResponse[User] or an Error object
757794
758795 .. code-block:: python
759796 :caption: Query of all the available resources
760797
761- from scim2_models import User, SearchRequest
798+ from scim2_models import User
762799
763800 response = scim.query()
764801 # 'response' may be a ListResponse[Union[User, Group, ...]] or an Error object
@@ -1030,12 +1067,13 @@ async def query(
10301067 self ,
10311068 resource_model : type [Resource ] | None = None ,
10321069 id : str | None = None ,
1033- search_request : SearchRequest | dict | None = None ,
1070+ query_parameters : ResponseParameters | dict | None = None ,
10341071 check_request_payload : bool | None = None ,
10351072 check_response_payload : bool | None = None ,
10361073 expected_status_codes : list [int ]
10371074 | None = SCIMClient .QUERY_RESPONSE_STATUS_CODES ,
10381075 raise_scim_errors : bool | None = None ,
1076+ search_request : ResponseParameters | dict | None = None ,
10391077 ** kwargs ,
10401078 ) -> Resource | ListResponse [Resource ] | Error | dict :
10411079 """Perform a GET request to read resources, as defined in :rfc:`RFC7644 §3.4.2 <7644#section-3.4.2>`.
@@ -1045,7 +1083,14 @@ async def query(
10451083
10461084 :param resource_model: A :class:`~scim2_models.Resource` subtype or :data:`None`
10471085 :param id: The SCIM id of an object to get, or :data:`None`
1048- :param search_request: An object detailing the search query parameters.
1086+ :param query_parameters: A :class:`~scim2_models.ResponseParameters` or
1087+ :class:`~scim2_models.SearchRequest` detailing the query parameters.
1088+ Use :class:`~scim2_models.ResponseParameters` when querying a single
1089+ resource by id, where only ``attributes`` and ``excludedAttributes``
1090+ are meaningful (:rfc:`RFC 7644 §3.4.1 <7644#section-3.4.1>`).
1091+ Use :class:`~scim2_models.SearchRequest` when listing resources, to
1092+ also pass ``filter``, ``sortBy``, ``sortOrder``, ``startIndex`` and
1093+ ``count`` (:rfc:`RFC 7644 §3.4.2 <7644#section-3.4.2>`).
10491094 :param check_request_payload: If set, overwrites :paramref:`scim2_client.SCIMClient.check_request_payload`.
10501095 :param check_response_payload: If set, overwrites :paramref:`scim2_client.SCIMClient.check_response_payload`.
10511096 :param expected_status_codes: The list of expected status codes form the response.
@@ -1079,13 +1124,13 @@ async def query(
10791124 from scim2_models import User, SearchRequest
10801125
10811126 req = SearchRequest(filter='userName sw "john"')
1082- response = scim.query(User, search_request=search_request )
1127+ response = scim.query(User, query_parameters=req )
10831128 # 'response' may be a ListResponse[User] or an Error object
10841129
10851130 .. code-block:: python
10861131 :caption: Query of all the available resources
10871132
1088- from scim2_models import User, SearchRequest
1133+ from scim2_models import User
10891134
10901135 response = scim.query()
10911136 # 'response' may be a ListResponse[Union[User, Group, ...]] or an Error object
0 commit comments