scim2-client 0.6.1__py3-none-any.whl → 0.7.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- scim2_client/client.py +131 -146
- scim2_client/engines/httpx.py +84 -98
- scim2_client/engines/werkzeug.py +44 -52
- scim2_client-0.7.1.dist-info/METADATA +298 -0
- scim2_client-0.7.1.dist-info/RECORD +10 -0
- scim2_client-0.7.1.dist-info/WHEEL +4 -0
- scim2_client-0.6.1.dist-info/METADATA +0 -298
- scim2_client-0.6.1.dist-info/RECORD +0 -11
- scim2_client-0.6.1.dist-info/WHEEL +0 -4
- scim2_client-0.6.1.dist-info/licenses/LICENSE.md +0 -201
scim2_client/client.py
CHANGED
|
@@ -2,7 +2,6 @@ import asyncio
|
|
|
2
2
|
import sys
|
|
3
3
|
from collections.abc import Collection
|
|
4
4
|
from dataclasses import dataclass
|
|
5
|
-
from typing import Optional
|
|
6
5
|
from typing import TypeVar
|
|
7
6
|
from typing import Union
|
|
8
7
|
|
|
@@ -40,10 +39,10 @@ CONFIG_RESOURCES = (ResourceType, Schema, ServiceProviderConfig)
|
|
|
40
39
|
@dataclass
|
|
41
40
|
class RequestPayload:
|
|
42
41
|
request_kwargs: dict
|
|
43
|
-
url:
|
|
44
|
-
payload:
|
|
45
|
-
expected_types:
|
|
46
|
-
expected_status_codes:
|
|
42
|
+
url: str | None = None
|
|
43
|
+
payload: dict | None = None
|
|
44
|
+
expected_types: list[type[Resource]] | None = None
|
|
45
|
+
expected_status_codes: list[int] | None = None
|
|
47
46
|
|
|
48
47
|
|
|
49
48
|
class SCIMClient:
|
|
@@ -176,9 +175,9 @@ class SCIMClient:
|
|
|
176
175
|
|
|
177
176
|
def __init__(
|
|
178
177
|
self,
|
|
179
|
-
resource_models:
|
|
180
|
-
resource_types:
|
|
181
|
-
service_provider_config:
|
|
178
|
+
resource_models: Collection[type[Resource]] | None = None,
|
|
179
|
+
resource_types: Collection[ResourceType] | None = None,
|
|
180
|
+
service_provider_config: ServiceProviderConfig | None = None,
|
|
182
181
|
check_request_payload: bool = True,
|
|
183
182
|
check_response_payload: bool = True,
|
|
184
183
|
check_response_content_type: bool = True,
|
|
@@ -194,10 +193,10 @@ class SCIMClient:
|
|
|
194
193
|
self.check_response_status_codes = check_response_status_codes
|
|
195
194
|
self.raise_scim_errors = raise_scim_errors
|
|
196
195
|
|
|
197
|
-
def get_resource_model(self, name: str) ->
|
|
196
|
+
def get_resource_model(self, name: str) -> type[Resource] | None:
|
|
198
197
|
"""Get a registered model by its name or its schema."""
|
|
199
198
|
for resource_model in self.resource_models:
|
|
200
|
-
schema = resource_model.
|
|
199
|
+
schema = resource_model.__schema__
|
|
201
200
|
if schema == name or schema.split(":")[-1] == name:
|
|
202
201
|
return resource_model
|
|
203
202
|
return None
|
|
@@ -205,9 +204,9 @@ class SCIMClient:
|
|
|
205
204
|
def _check_resource_model(
|
|
206
205
|
self, resource_model: type[Resource], payload=None
|
|
207
206
|
) -> None:
|
|
208
|
-
schema_to_check = resource_model.
|
|
207
|
+
schema_to_check = resource_model.__schema__
|
|
209
208
|
for element in self.resource_models:
|
|
210
|
-
schema = element.
|
|
209
|
+
schema = element.__schema__
|
|
211
210
|
if schema_to_check == schema:
|
|
212
211
|
return
|
|
213
212
|
|
|
@@ -216,7 +215,7 @@ class SCIMClient:
|
|
|
216
215
|
f"Unknown resource type: '{resource_model}'", source=payload
|
|
217
216
|
)
|
|
218
217
|
|
|
219
|
-
def resource_endpoint(self, resource_model:
|
|
218
|
+
def resource_endpoint(self, resource_model: type[Resource] | None) -> str:
|
|
220
219
|
"""Find the :attr:`~scim2_models.ResourceType.endpoint` associated with a given :class:`~scim2_models.Resource`.
|
|
221
220
|
|
|
222
221
|
Internally, it looks if any :paramref:`resource_type <scim2_client.SCIMClient.resource_models>`
|
|
@@ -232,7 +231,7 @@ class SCIMClient:
|
|
|
232
231
|
if resource_model is ServiceProviderConfig:
|
|
233
232
|
return "/ServiceProviderConfig"
|
|
234
233
|
|
|
235
|
-
schema = resource_model.
|
|
234
|
+
schema = resource_model.__schema__
|
|
236
235
|
for resource_type in self.resource_types or []:
|
|
237
236
|
if schema == resource_type.schema_:
|
|
238
237
|
return resource_type.endpoint
|
|
@@ -253,7 +252,7 @@ class SCIMClient:
|
|
|
253
252
|
]
|
|
254
253
|
|
|
255
254
|
def _check_status_codes(
|
|
256
|
-
self, status_code: int, expected_status_codes:
|
|
255
|
+
self, status_code: int, expected_status_codes: list[int] | None
|
|
257
256
|
):
|
|
258
257
|
if (
|
|
259
258
|
self.check_response_status_codes
|
|
@@ -279,15 +278,15 @@ class SCIMClient:
|
|
|
279
278
|
|
|
280
279
|
def check_response(
|
|
281
280
|
self,
|
|
282
|
-
payload:
|
|
281
|
+
payload: dict | None,
|
|
283
282
|
status_code: int,
|
|
284
283
|
headers: dict,
|
|
285
|
-
expected_status_codes:
|
|
286
|
-
expected_types:
|
|
287
|
-
check_response_payload:
|
|
288
|
-
raise_scim_errors:
|
|
289
|
-
scim_ctx:
|
|
290
|
-
) ->
|
|
284
|
+
expected_status_codes: list[int] | None = None,
|
|
285
|
+
expected_types: list[type[Resource]] | None = None,
|
|
286
|
+
check_response_payload: bool | None = None,
|
|
287
|
+
raise_scim_errors: bool | None = None,
|
|
288
|
+
scim_ctx: Context | None = None,
|
|
289
|
+
) -> Error | None | dict | type[Resource]:
|
|
291
290
|
if raise_scim_errors is None:
|
|
292
291
|
raise_scim_errors = self.raise_scim_errors
|
|
293
292
|
|
|
@@ -311,10 +310,7 @@ class SCIMClient:
|
|
|
311
310
|
self._check_status_codes(status_code, expected_status_codes)
|
|
312
311
|
return response_payload
|
|
313
312
|
|
|
314
|
-
if (
|
|
315
|
-
response_payload
|
|
316
|
-
and response_payload.get("schemas") == Error.model_fields["schemas"].default
|
|
317
|
-
):
|
|
313
|
+
if response_payload and response_payload.get("schemas") == [Error.__schema__]:
|
|
318
314
|
error = Error.model_validate(response_payload)
|
|
319
315
|
if raise_scim_errors:
|
|
320
316
|
raise SCIMResponseErrorObject(obj=error.detail, source=error)
|
|
@@ -355,9 +351,9 @@ class SCIMClient:
|
|
|
355
351
|
|
|
356
352
|
def _prepare_create_request(
|
|
357
353
|
self,
|
|
358
|
-
resource:
|
|
359
|
-
check_request_payload:
|
|
360
|
-
expected_status_codes:
|
|
354
|
+
resource: AnyResource | dict,
|
|
355
|
+
check_request_payload: bool | None = None,
|
|
356
|
+
expected_status_codes: list[int] | None = None,
|
|
361
357
|
**kwargs,
|
|
362
358
|
) -> RequestPayload:
|
|
363
359
|
req = RequestPayload(
|
|
@@ -403,11 +399,11 @@ class SCIMClient:
|
|
|
403
399
|
|
|
404
400
|
def _prepare_query_request(
|
|
405
401
|
self,
|
|
406
|
-
resource_model:
|
|
407
|
-
id:
|
|
408
|
-
search_request:
|
|
409
|
-
check_request_payload:
|
|
410
|
-
expected_status_codes:
|
|
402
|
+
resource_model: type[Resource] | None = None,
|
|
403
|
+
id: str | None = None,
|
|
404
|
+
search_request: SearchRequest | dict | None = None,
|
|
405
|
+
check_request_payload: bool | None = None,
|
|
406
|
+
expected_status_codes: list[int] | None = None,
|
|
411
407
|
**kwargs,
|
|
412
408
|
) -> RequestPayload:
|
|
413
409
|
req = RequestPayload(
|
|
@@ -421,13 +417,14 @@ class SCIMClient:
|
|
|
421
417
|
if resource_model and check_request_payload:
|
|
422
418
|
self._check_resource_model(resource_model)
|
|
423
419
|
|
|
424
|
-
payload:
|
|
420
|
+
payload: SearchRequest | None
|
|
425
421
|
if not check_request_payload:
|
|
426
422
|
payload = search_request
|
|
427
423
|
|
|
428
424
|
elif isinstance(search_request, SearchRequest):
|
|
429
425
|
payload = search_request.model_dump(
|
|
430
426
|
exclude_unset=True,
|
|
427
|
+
exclude={"schemas"},
|
|
431
428
|
scim_ctx=Context.RESOURCE_QUERY_REQUEST,
|
|
432
429
|
)
|
|
433
430
|
|
|
@@ -440,7 +437,7 @@ class SCIMClient:
|
|
|
440
437
|
if resource_model is None:
|
|
441
438
|
req.expected_types = [
|
|
442
439
|
*self.resource_models,
|
|
443
|
-
ListResponse[Union[self.resource_models]],
|
|
440
|
+
ListResponse[Union[self.resource_models]], # noqa: UP007
|
|
444
441
|
]
|
|
445
442
|
|
|
446
443
|
elif resource_model == ServiceProviderConfig:
|
|
@@ -459,9 +456,9 @@ class SCIMClient:
|
|
|
459
456
|
|
|
460
457
|
def _prepare_search_request(
|
|
461
458
|
self,
|
|
462
|
-
search_request:
|
|
463
|
-
check_request_payload:
|
|
464
|
-
expected_status_codes:
|
|
459
|
+
search_request: SearchRequest | None = None,
|
|
460
|
+
check_request_payload: bool | None = None,
|
|
461
|
+
expected_status_codes: list[int] | None = None,
|
|
465
462
|
**kwargs,
|
|
466
463
|
) -> RequestPayload:
|
|
467
464
|
req = RequestPayload(
|
|
@@ -485,14 +482,14 @@ class SCIMClient:
|
|
|
485
482
|
)
|
|
486
483
|
|
|
487
484
|
req.url = req.request_kwargs.pop("url", "/.search")
|
|
488
|
-
req.expected_types = [ListResponse[Union[self.resource_models]]]
|
|
485
|
+
req.expected_types = [ListResponse[Union[self.resource_models]]] # noqa: UP007
|
|
489
486
|
return req
|
|
490
487
|
|
|
491
488
|
def _prepare_delete_request(
|
|
492
489
|
self,
|
|
493
490
|
resource_model: type,
|
|
494
491
|
id: str,
|
|
495
|
-
expected_status_codes:
|
|
492
|
+
expected_status_codes: list[int] | None = None,
|
|
496
493
|
**kwargs,
|
|
497
494
|
) -> RequestPayload:
|
|
498
495
|
req = RequestPayload(
|
|
@@ -507,9 +504,9 @@ class SCIMClient:
|
|
|
507
504
|
|
|
508
505
|
def _prepare_replace_request(
|
|
509
506
|
self,
|
|
510
|
-
resource:
|
|
511
|
-
check_request_payload:
|
|
512
|
-
expected_status_codes:
|
|
507
|
+
resource: AnyResource | dict,
|
|
508
|
+
check_request_payload: bool | None = None,
|
|
509
|
+
expected_status_codes: list[int] | None = None,
|
|
513
510
|
**kwargs,
|
|
514
511
|
) -> RequestPayload:
|
|
515
512
|
req = RequestPayload(
|
|
@@ -563,9 +560,9 @@ class SCIMClient:
|
|
|
563
560
|
self,
|
|
564
561
|
resource_model: type[ResourceT],
|
|
565
562
|
id: str,
|
|
566
|
-
patch_op:
|
|
567
|
-
check_request_payload:
|
|
568
|
-
expected_status_codes:
|
|
563
|
+
patch_op: PatchOp[ResourceT] | dict,
|
|
564
|
+
check_request_payload: bool | None = None,
|
|
565
|
+
expected_status_codes: list[int] | None = None,
|
|
569
566
|
**kwargs,
|
|
570
567
|
) -> RequestPayload:
|
|
571
568
|
"""Prepare a PATCH request payload.
|
|
@@ -625,9 +622,9 @@ class SCIMClient:
|
|
|
625
622
|
self,
|
|
626
623
|
resource_model: type[ResourceT],
|
|
627
624
|
id: str,
|
|
628
|
-
patch_op:
|
|
625
|
+
patch_op: PatchOp[ResourceT] | dict,
|
|
629
626
|
**kwargs,
|
|
630
|
-
) ->
|
|
627
|
+
) -> ResourceT | Error | dict | None:
|
|
631
628
|
raise NotImplementedError()
|
|
632
629
|
|
|
633
630
|
def build_resource_models(
|
|
@@ -649,7 +646,7 @@ class SCIMClient:
|
|
|
649
646
|
extension = Extension.from_schema(schema_obj)
|
|
650
647
|
extensions = extensions + (extension,)
|
|
651
648
|
if extensions:
|
|
652
|
-
model = model[Union[extensions]]
|
|
649
|
+
model = model[Union[extensions]] # noqa: UP007
|
|
653
650
|
resource_models.append(model)
|
|
654
651
|
|
|
655
652
|
return tuple(resource_models)
|
|
@@ -660,15 +657,14 @@ class BaseSyncSCIMClient(SCIMClient):
|
|
|
660
657
|
|
|
661
658
|
def create(
|
|
662
659
|
self,
|
|
663
|
-
resource:
|
|
664
|
-
check_request_payload:
|
|
665
|
-
check_response_payload:
|
|
666
|
-
expected_status_codes:
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
raise_scim_errors: Optional[bool] = None,
|
|
660
|
+
resource: AnyResource | dict,
|
|
661
|
+
check_request_payload: bool | None = None,
|
|
662
|
+
check_response_payload: bool | None = None,
|
|
663
|
+
expected_status_codes: list[int]
|
|
664
|
+
| None = SCIMClient.CREATION_RESPONSE_STATUS_CODES,
|
|
665
|
+
raise_scim_errors: bool | None = None,
|
|
670
666
|
**kwargs,
|
|
671
|
-
) ->
|
|
667
|
+
) -> AnyResource | Error | dict:
|
|
672
668
|
"""Perform a POST request to create, as defined in :rfc:`RFC7644 §3.3 <7644#section-3.3>`.
|
|
673
669
|
|
|
674
670
|
:param resource: The resource to create
|
|
@@ -706,17 +702,16 @@ class BaseSyncSCIMClient(SCIMClient):
|
|
|
706
702
|
|
|
707
703
|
def query(
|
|
708
704
|
self,
|
|
709
|
-
resource_model:
|
|
710
|
-
id:
|
|
711
|
-
search_request:
|
|
712
|
-
check_request_payload:
|
|
713
|
-
check_response_payload:
|
|
714
|
-
expected_status_codes:
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
raise_scim_errors: Optional[bool] = None,
|
|
705
|
+
resource_model: type[AnyResource] | None = None,
|
|
706
|
+
id: str | None = None,
|
|
707
|
+
search_request: SearchRequest | dict | None = None,
|
|
708
|
+
check_request_payload: bool | None = None,
|
|
709
|
+
check_response_payload: bool | None = None,
|
|
710
|
+
expected_status_codes: list[int]
|
|
711
|
+
| None = SCIMClient.QUERY_RESPONSE_STATUS_CODES,
|
|
712
|
+
raise_scim_errors: bool | None = None,
|
|
718
713
|
**kwargs,
|
|
719
|
-
) ->
|
|
714
|
+
) -> AnyResource | ListResponse[AnyResource] | Error | dict:
|
|
720
715
|
"""Perform a GET request to read resources, as defined in :rfc:`RFC7644 §3.4.2 <7644#section-3.4.2>`.
|
|
721
716
|
|
|
722
717
|
- If `id` is not :data:`None`, the resource with the exact id will be reached.
|
|
@@ -780,15 +775,14 @@ class BaseSyncSCIMClient(SCIMClient):
|
|
|
780
775
|
|
|
781
776
|
def search(
|
|
782
777
|
self,
|
|
783
|
-
search_request:
|
|
784
|
-
check_request_payload:
|
|
785
|
-
check_response_payload:
|
|
786
|
-
expected_status_codes:
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
raise_scim_errors: Optional[bool] = None,
|
|
778
|
+
search_request: SearchRequest | None = None,
|
|
779
|
+
check_request_payload: bool | None = None,
|
|
780
|
+
check_response_payload: bool | None = None,
|
|
781
|
+
expected_status_codes: list[int]
|
|
782
|
+
| None = SCIMClient.SEARCH_RESPONSE_STATUS_CODES,
|
|
783
|
+
raise_scim_errors: bool | None = None,
|
|
790
784
|
**kwargs,
|
|
791
|
-
) ->
|
|
785
|
+
) -> AnyResource | ListResponse[AnyResource] | Error | dict:
|
|
792
786
|
"""Perform a POST search request to read all available resources, as defined in :rfc:`RFC7644 §3.4.3 <7644#section-3.4.3>`.
|
|
793
787
|
|
|
794
788
|
:param resource_models: Resource type or union of types expected
|
|
@@ -830,13 +824,12 @@ class BaseSyncSCIMClient(SCIMClient):
|
|
|
830
824
|
self,
|
|
831
825
|
resource_model: type,
|
|
832
826
|
id: str,
|
|
833
|
-
check_response_payload:
|
|
834
|
-
expected_status_codes:
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
raise_scim_errors: Optional[bool] = None,
|
|
827
|
+
check_response_payload: bool | None = None,
|
|
828
|
+
expected_status_codes: list[int]
|
|
829
|
+
| None = SCIMClient.DELETION_RESPONSE_STATUS_CODES,
|
|
830
|
+
raise_scim_errors: bool | None = None,
|
|
838
831
|
**kwargs,
|
|
839
|
-
) ->
|
|
832
|
+
) -> Error | dict | None:
|
|
840
833
|
"""Perform a DELETE request to create, as defined in :rfc:`RFC7644 §3.6 <7644#section-3.6>`.
|
|
841
834
|
|
|
842
835
|
:param resource_model: The type of the resource to delete.
|
|
@@ -866,15 +859,14 @@ class BaseSyncSCIMClient(SCIMClient):
|
|
|
866
859
|
|
|
867
860
|
def replace(
|
|
868
861
|
self,
|
|
869
|
-
resource:
|
|
870
|
-
check_request_payload:
|
|
871
|
-
check_response_payload:
|
|
872
|
-
expected_status_codes:
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
raise_scim_errors: Optional[bool] = None,
|
|
862
|
+
resource: AnyResource | dict,
|
|
863
|
+
check_request_payload: bool | None = None,
|
|
864
|
+
check_response_payload: bool | None = None,
|
|
865
|
+
expected_status_codes: list[int]
|
|
866
|
+
| None = SCIMClient.REPLACEMENT_RESPONSE_STATUS_CODES,
|
|
867
|
+
raise_scim_errors: bool | None = None,
|
|
876
868
|
**kwargs,
|
|
877
|
-
) ->
|
|
869
|
+
) -> AnyResource | Error | dict:
|
|
878
870
|
"""Perform a PUT request to replace a resource, as defined in :rfc:`RFC7644 §3.5.1 <7644#section-3.5.1>`.
|
|
879
871
|
|
|
880
872
|
:param resource: The new resource to replace.
|
|
@@ -915,15 +907,14 @@ class BaseSyncSCIMClient(SCIMClient):
|
|
|
915
907
|
self,
|
|
916
908
|
resource_model: type[ResourceT],
|
|
917
909
|
id: str,
|
|
918
|
-
patch_op:
|
|
919
|
-
check_request_payload:
|
|
920
|
-
check_response_payload:
|
|
921
|
-
expected_status_codes:
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
raise_scim_errors: Optional[bool] = None,
|
|
910
|
+
patch_op: PatchOp[ResourceT] | dict,
|
|
911
|
+
check_request_payload: bool | None = None,
|
|
912
|
+
check_response_payload: bool | None = None,
|
|
913
|
+
expected_status_codes: list[int]
|
|
914
|
+
| None = SCIMClient.PATCH_RESPONSE_STATUS_CODES,
|
|
915
|
+
raise_scim_errors: bool | None = None,
|
|
925
916
|
**kwargs,
|
|
926
|
-
) ->
|
|
917
|
+
) -> ResourceT | Error | dict | None:
|
|
927
918
|
"""Perform a PATCH request to modify a resource, as defined in :rfc:`RFC7644 §3.5.2 <7644#section-3.5.2>`.
|
|
928
919
|
|
|
929
920
|
:param resource_model: The type of the resource to modify.
|
|
@@ -993,15 +984,14 @@ class BaseAsyncSCIMClient(SCIMClient):
|
|
|
993
984
|
|
|
994
985
|
async def create(
|
|
995
986
|
self,
|
|
996
|
-
resource:
|
|
997
|
-
check_request_payload:
|
|
998
|
-
check_response_payload:
|
|
999
|
-
expected_status_codes:
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
raise_scim_errors: Optional[bool] = None,
|
|
987
|
+
resource: AnyResource | dict,
|
|
988
|
+
check_request_payload: bool | None = None,
|
|
989
|
+
check_response_payload: bool | None = None,
|
|
990
|
+
expected_status_codes: list[int]
|
|
991
|
+
| None = SCIMClient.CREATION_RESPONSE_STATUS_CODES,
|
|
992
|
+
raise_scim_errors: bool | None = None,
|
|
1003
993
|
**kwargs,
|
|
1004
|
-
) ->
|
|
994
|
+
) -> AnyResource | Error | dict:
|
|
1005
995
|
"""Perform a POST request to create, as defined in :rfc:`RFC7644 §3.3 <7644#section-3.3>`.
|
|
1006
996
|
|
|
1007
997
|
:param resource: The resource to create
|
|
@@ -1039,17 +1029,16 @@ class BaseAsyncSCIMClient(SCIMClient):
|
|
|
1039
1029
|
|
|
1040
1030
|
async def query(
|
|
1041
1031
|
self,
|
|
1042
|
-
resource_model:
|
|
1043
|
-
id:
|
|
1044
|
-
search_request:
|
|
1045
|
-
check_request_payload:
|
|
1046
|
-
check_response_payload:
|
|
1047
|
-
expected_status_codes:
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
raise_scim_errors: Optional[bool] = None,
|
|
1032
|
+
resource_model: type[Resource] | None = None,
|
|
1033
|
+
id: str | None = None,
|
|
1034
|
+
search_request: SearchRequest | dict | None = None,
|
|
1035
|
+
check_request_payload: bool | None = None,
|
|
1036
|
+
check_response_payload: bool | None = None,
|
|
1037
|
+
expected_status_codes: list[int]
|
|
1038
|
+
| None = SCIMClient.QUERY_RESPONSE_STATUS_CODES,
|
|
1039
|
+
raise_scim_errors: bool | None = None,
|
|
1051
1040
|
**kwargs,
|
|
1052
|
-
) ->
|
|
1041
|
+
) -> AnyResource | ListResponse[AnyResource] | Error | dict:
|
|
1053
1042
|
"""Perform a GET request to read resources, as defined in :rfc:`RFC7644 §3.4.2 <7644#section-3.4.2>`.
|
|
1054
1043
|
|
|
1055
1044
|
- If `id` is not :data:`None`, the resource with the exact id will be reached.
|
|
@@ -1113,15 +1102,14 @@ class BaseAsyncSCIMClient(SCIMClient):
|
|
|
1113
1102
|
|
|
1114
1103
|
async def search(
|
|
1115
1104
|
self,
|
|
1116
|
-
search_request:
|
|
1117
|
-
check_request_payload:
|
|
1118
|
-
check_response_payload:
|
|
1119
|
-
expected_status_codes:
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
raise_scim_errors: Optional[bool] = None,
|
|
1105
|
+
search_request: SearchRequest | None = None,
|
|
1106
|
+
check_request_payload: bool | None = None,
|
|
1107
|
+
check_response_payload: bool | None = None,
|
|
1108
|
+
expected_status_codes: list[int]
|
|
1109
|
+
| None = SCIMClient.SEARCH_RESPONSE_STATUS_CODES,
|
|
1110
|
+
raise_scim_errors: bool | None = None,
|
|
1123
1111
|
**kwargs,
|
|
1124
|
-
) ->
|
|
1112
|
+
) -> AnyResource | ListResponse[AnyResource] | Error | dict:
|
|
1125
1113
|
"""Perform a POST search request to read all available resources, as defined in :rfc:`RFC7644 §3.4.3 <7644#section-3.4.3>`.
|
|
1126
1114
|
|
|
1127
1115
|
:param resource_models: Resource type or union of types expected
|
|
@@ -1163,13 +1151,12 @@ class BaseAsyncSCIMClient(SCIMClient):
|
|
|
1163
1151
|
self,
|
|
1164
1152
|
resource_model: type,
|
|
1165
1153
|
id: str,
|
|
1166
|
-
check_response_payload:
|
|
1167
|
-
expected_status_codes:
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
raise_scim_errors: Optional[bool] = None,
|
|
1154
|
+
check_response_payload: bool | None = None,
|
|
1155
|
+
expected_status_codes: list[int]
|
|
1156
|
+
| None = SCIMClient.DELETION_RESPONSE_STATUS_CODES,
|
|
1157
|
+
raise_scim_errors: bool | None = None,
|
|
1171
1158
|
**kwargs,
|
|
1172
|
-
) ->
|
|
1159
|
+
) -> Error | dict | None:
|
|
1173
1160
|
"""Perform a DELETE request to create, as defined in :rfc:`RFC7644 §3.6 <7644#section-3.6>`.
|
|
1174
1161
|
|
|
1175
1162
|
:param resource_model: The type of the resource to delete.
|
|
@@ -1199,15 +1186,14 @@ class BaseAsyncSCIMClient(SCIMClient):
|
|
|
1199
1186
|
|
|
1200
1187
|
async def replace(
|
|
1201
1188
|
self,
|
|
1202
|
-
resource:
|
|
1203
|
-
check_request_payload:
|
|
1204
|
-
check_response_payload:
|
|
1205
|
-
expected_status_codes:
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
raise_scim_errors: Optional[bool] = None,
|
|
1189
|
+
resource: AnyResource | dict,
|
|
1190
|
+
check_request_payload: bool | None = None,
|
|
1191
|
+
check_response_payload: bool | None = None,
|
|
1192
|
+
expected_status_codes: list[int]
|
|
1193
|
+
| None = SCIMClient.REPLACEMENT_RESPONSE_STATUS_CODES,
|
|
1194
|
+
raise_scim_errors: bool | None = None,
|
|
1209
1195
|
**kwargs,
|
|
1210
|
-
) ->
|
|
1196
|
+
) -> AnyResource | Error | dict:
|
|
1211
1197
|
"""Perform a PUT request to replace a resource, as defined in :rfc:`RFC7644 §3.5.1 <7644#section-3.5.1>`.
|
|
1212
1198
|
|
|
1213
1199
|
:param resource: The new resource to replace.
|
|
@@ -1248,15 +1234,14 @@ class BaseAsyncSCIMClient(SCIMClient):
|
|
|
1248
1234
|
self,
|
|
1249
1235
|
resource_model: type[ResourceT],
|
|
1250
1236
|
id: str,
|
|
1251
|
-
patch_op:
|
|
1252
|
-
check_request_payload:
|
|
1253
|
-
check_response_payload:
|
|
1254
|
-
expected_status_codes:
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
raise_scim_errors: Optional[bool] = None,
|
|
1237
|
+
patch_op: PatchOp[ResourceT] | dict,
|
|
1238
|
+
check_request_payload: bool | None = None,
|
|
1239
|
+
check_response_payload: bool | None = None,
|
|
1240
|
+
expected_status_codes: list[int]
|
|
1241
|
+
| None = SCIMClient.PATCH_RESPONSE_STATUS_CODES,
|
|
1242
|
+
raise_scim_errors: bool | None = None,
|
|
1258
1243
|
**kwargs,
|
|
1259
|
-
) ->
|
|
1244
|
+
) -> ResourceT | Error | dict | None:
|
|
1260
1245
|
"""Perform a PATCH request to modify a resource, as defined in :rfc:`RFC7644 §3.5.2 <7644#section-3.5.2>`.
|
|
1261
1246
|
|
|
1262
1247
|
:param resource_model: The type of the resource to modify.
|