scim2-client 0.6.1__py3-none-any.whl → 0.7.0__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 +130 -146
- scim2_client/engines/httpx.py +84 -98
- scim2_client/engines/werkzeug.py +44 -52
- scim2_client-0.7.0.dist-info/METADATA +298 -0
- scim2_client-0.7.0.dist-info/RECORD +10 -0
- scim2_client-0.7.0.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,7 +417,7 @@ 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
|
|
|
@@ -440,7 +436,7 @@ class SCIMClient:
|
|
|
440
436
|
if resource_model is None:
|
|
441
437
|
req.expected_types = [
|
|
442
438
|
*self.resource_models,
|
|
443
|
-
ListResponse[Union[self.resource_models]],
|
|
439
|
+
ListResponse[Union[self.resource_models]], # noqa: UP007
|
|
444
440
|
]
|
|
445
441
|
|
|
446
442
|
elif resource_model == ServiceProviderConfig:
|
|
@@ -459,9 +455,9 @@ class SCIMClient:
|
|
|
459
455
|
|
|
460
456
|
def _prepare_search_request(
|
|
461
457
|
self,
|
|
462
|
-
search_request:
|
|
463
|
-
check_request_payload:
|
|
464
|
-
expected_status_codes:
|
|
458
|
+
search_request: SearchRequest | None = None,
|
|
459
|
+
check_request_payload: bool | None = None,
|
|
460
|
+
expected_status_codes: list[int] | None = None,
|
|
465
461
|
**kwargs,
|
|
466
462
|
) -> RequestPayload:
|
|
467
463
|
req = RequestPayload(
|
|
@@ -485,14 +481,14 @@ class SCIMClient:
|
|
|
485
481
|
)
|
|
486
482
|
|
|
487
483
|
req.url = req.request_kwargs.pop("url", "/.search")
|
|
488
|
-
req.expected_types = [ListResponse[Union[self.resource_models]]]
|
|
484
|
+
req.expected_types = [ListResponse[Union[self.resource_models]]] # noqa: UP007
|
|
489
485
|
return req
|
|
490
486
|
|
|
491
487
|
def _prepare_delete_request(
|
|
492
488
|
self,
|
|
493
489
|
resource_model: type,
|
|
494
490
|
id: str,
|
|
495
|
-
expected_status_codes:
|
|
491
|
+
expected_status_codes: list[int] | None = None,
|
|
496
492
|
**kwargs,
|
|
497
493
|
) -> RequestPayload:
|
|
498
494
|
req = RequestPayload(
|
|
@@ -507,9 +503,9 @@ class SCIMClient:
|
|
|
507
503
|
|
|
508
504
|
def _prepare_replace_request(
|
|
509
505
|
self,
|
|
510
|
-
resource:
|
|
511
|
-
check_request_payload:
|
|
512
|
-
expected_status_codes:
|
|
506
|
+
resource: AnyResource | dict,
|
|
507
|
+
check_request_payload: bool | None = None,
|
|
508
|
+
expected_status_codes: list[int] | None = None,
|
|
513
509
|
**kwargs,
|
|
514
510
|
) -> RequestPayload:
|
|
515
511
|
req = RequestPayload(
|
|
@@ -563,9 +559,9 @@ class SCIMClient:
|
|
|
563
559
|
self,
|
|
564
560
|
resource_model: type[ResourceT],
|
|
565
561
|
id: str,
|
|
566
|
-
patch_op:
|
|
567
|
-
check_request_payload:
|
|
568
|
-
expected_status_codes:
|
|
562
|
+
patch_op: PatchOp[ResourceT] | dict,
|
|
563
|
+
check_request_payload: bool | None = None,
|
|
564
|
+
expected_status_codes: list[int] | None = None,
|
|
569
565
|
**kwargs,
|
|
570
566
|
) -> RequestPayload:
|
|
571
567
|
"""Prepare a PATCH request payload.
|
|
@@ -625,9 +621,9 @@ class SCIMClient:
|
|
|
625
621
|
self,
|
|
626
622
|
resource_model: type[ResourceT],
|
|
627
623
|
id: str,
|
|
628
|
-
patch_op:
|
|
624
|
+
patch_op: PatchOp[ResourceT] | dict,
|
|
629
625
|
**kwargs,
|
|
630
|
-
) ->
|
|
626
|
+
) -> ResourceT | Error | dict | None:
|
|
631
627
|
raise NotImplementedError()
|
|
632
628
|
|
|
633
629
|
def build_resource_models(
|
|
@@ -649,7 +645,7 @@ class SCIMClient:
|
|
|
649
645
|
extension = Extension.from_schema(schema_obj)
|
|
650
646
|
extensions = extensions + (extension,)
|
|
651
647
|
if extensions:
|
|
652
|
-
model = model[Union[extensions]]
|
|
648
|
+
model = model[Union[extensions]] # noqa: UP007
|
|
653
649
|
resource_models.append(model)
|
|
654
650
|
|
|
655
651
|
return tuple(resource_models)
|
|
@@ -660,15 +656,14 @@ class BaseSyncSCIMClient(SCIMClient):
|
|
|
660
656
|
|
|
661
657
|
def create(
|
|
662
658
|
self,
|
|
663
|
-
resource:
|
|
664
|
-
check_request_payload:
|
|
665
|
-
check_response_payload:
|
|
666
|
-
expected_status_codes:
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
raise_scim_errors: Optional[bool] = None,
|
|
659
|
+
resource: AnyResource | dict,
|
|
660
|
+
check_request_payload: bool | None = None,
|
|
661
|
+
check_response_payload: bool | None = None,
|
|
662
|
+
expected_status_codes: list[int]
|
|
663
|
+
| None = SCIMClient.CREATION_RESPONSE_STATUS_CODES,
|
|
664
|
+
raise_scim_errors: bool | None = None,
|
|
670
665
|
**kwargs,
|
|
671
|
-
) ->
|
|
666
|
+
) -> AnyResource | Error | dict:
|
|
672
667
|
"""Perform a POST request to create, as defined in :rfc:`RFC7644 §3.3 <7644#section-3.3>`.
|
|
673
668
|
|
|
674
669
|
:param resource: The resource to create
|
|
@@ -706,17 +701,16 @@ class BaseSyncSCIMClient(SCIMClient):
|
|
|
706
701
|
|
|
707
702
|
def query(
|
|
708
703
|
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,
|
|
704
|
+
resource_model: type[AnyResource] | None = None,
|
|
705
|
+
id: str | None = None,
|
|
706
|
+
search_request: SearchRequest | dict | None = None,
|
|
707
|
+
check_request_payload: bool | None = None,
|
|
708
|
+
check_response_payload: bool | None = None,
|
|
709
|
+
expected_status_codes: list[int]
|
|
710
|
+
| None = SCIMClient.QUERY_RESPONSE_STATUS_CODES,
|
|
711
|
+
raise_scim_errors: bool | None = None,
|
|
718
712
|
**kwargs,
|
|
719
|
-
) ->
|
|
713
|
+
) -> AnyResource | ListResponse[AnyResource] | Error | dict:
|
|
720
714
|
"""Perform a GET request to read resources, as defined in :rfc:`RFC7644 §3.4.2 <7644#section-3.4.2>`.
|
|
721
715
|
|
|
722
716
|
- If `id` is not :data:`None`, the resource with the exact id will be reached.
|
|
@@ -780,15 +774,14 @@ class BaseSyncSCIMClient(SCIMClient):
|
|
|
780
774
|
|
|
781
775
|
def search(
|
|
782
776
|
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,
|
|
777
|
+
search_request: SearchRequest | None = None,
|
|
778
|
+
check_request_payload: bool | None = None,
|
|
779
|
+
check_response_payload: bool | None = None,
|
|
780
|
+
expected_status_codes: list[int]
|
|
781
|
+
| None = SCIMClient.SEARCH_RESPONSE_STATUS_CODES,
|
|
782
|
+
raise_scim_errors: bool | None = None,
|
|
790
783
|
**kwargs,
|
|
791
|
-
) ->
|
|
784
|
+
) -> AnyResource | ListResponse[AnyResource] | Error | dict:
|
|
792
785
|
"""Perform a POST search request to read all available resources, as defined in :rfc:`RFC7644 §3.4.3 <7644#section-3.4.3>`.
|
|
793
786
|
|
|
794
787
|
:param resource_models: Resource type or union of types expected
|
|
@@ -830,13 +823,12 @@ class BaseSyncSCIMClient(SCIMClient):
|
|
|
830
823
|
self,
|
|
831
824
|
resource_model: type,
|
|
832
825
|
id: str,
|
|
833
|
-
check_response_payload:
|
|
834
|
-
expected_status_codes:
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
raise_scim_errors: Optional[bool] = None,
|
|
826
|
+
check_response_payload: bool | None = None,
|
|
827
|
+
expected_status_codes: list[int]
|
|
828
|
+
| None = SCIMClient.DELETION_RESPONSE_STATUS_CODES,
|
|
829
|
+
raise_scim_errors: bool | None = None,
|
|
838
830
|
**kwargs,
|
|
839
|
-
) ->
|
|
831
|
+
) -> Error | dict | None:
|
|
840
832
|
"""Perform a DELETE request to create, as defined in :rfc:`RFC7644 §3.6 <7644#section-3.6>`.
|
|
841
833
|
|
|
842
834
|
:param resource_model: The type of the resource to delete.
|
|
@@ -866,15 +858,14 @@ class BaseSyncSCIMClient(SCIMClient):
|
|
|
866
858
|
|
|
867
859
|
def replace(
|
|
868
860
|
self,
|
|
869
|
-
resource:
|
|
870
|
-
check_request_payload:
|
|
871
|
-
check_response_payload:
|
|
872
|
-
expected_status_codes:
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
raise_scim_errors: Optional[bool] = None,
|
|
861
|
+
resource: AnyResource | dict,
|
|
862
|
+
check_request_payload: bool | None = None,
|
|
863
|
+
check_response_payload: bool | None = None,
|
|
864
|
+
expected_status_codes: list[int]
|
|
865
|
+
| None = SCIMClient.REPLACEMENT_RESPONSE_STATUS_CODES,
|
|
866
|
+
raise_scim_errors: bool | None = None,
|
|
876
867
|
**kwargs,
|
|
877
|
-
) ->
|
|
868
|
+
) -> AnyResource | Error | dict:
|
|
878
869
|
"""Perform a PUT request to replace a resource, as defined in :rfc:`RFC7644 §3.5.1 <7644#section-3.5.1>`.
|
|
879
870
|
|
|
880
871
|
:param resource: The new resource to replace.
|
|
@@ -915,15 +906,14 @@ class BaseSyncSCIMClient(SCIMClient):
|
|
|
915
906
|
self,
|
|
916
907
|
resource_model: type[ResourceT],
|
|
917
908
|
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,
|
|
909
|
+
patch_op: PatchOp[ResourceT] | dict,
|
|
910
|
+
check_request_payload: bool | None = None,
|
|
911
|
+
check_response_payload: bool | None = None,
|
|
912
|
+
expected_status_codes: list[int]
|
|
913
|
+
| None = SCIMClient.PATCH_RESPONSE_STATUS_CODES,
|
|
914
|
+
raise_scim_errors: bool | None = None,
|
|
925
915
|
**kwargs,
|
|
926
|
-
) ->
|
|
916
|
+
) -> ResourceT | Error | dict | None:
|
|
927
917
|
"""Perform a PATCH request to modify a resource, as defined in :rfc:`RFC7644 §3.5.2 <7644#section-3.5.2>`.
|
|
928
918
|
|
|
929
919
|
:param resource_model: The type of the resource to modify.
|
|
@@ -993,15 +983,14 @@ class BaseAsyncSCIMClient(SCIMClient):
|
|
|
993
983
|
|
|
994
984
|
async def create(
|
|
995
985
|
self,
|
|
996
|
-
resource:
|
|
997
|
-
check_request_payload:
|
|
998
|
-
check_response_payload:
|
|
999
|
-
expected_status_codes:
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
raise_scim_errors: Optional[bool] = None,
|
|
986
|
+
resource: AnyResource | dict,
|
|
987
|
+
check_request_payload: bool | None = None,
|
|
988
|
+
check_response_payload: bool | None = None,
|
|
989
|
+
expected_status_codes: list[int]
|
|
990
|
+
| None = SCIMClient.CREATION_RESPONSE_STATUS_CODES,
|
|
991
|
+
raise_scim_errors: bool | None = None,
|
|
1003
992
|
**kwargs,
|
|
1004
|
-
) ->
|
|
993
|
+
) -> AnyResource | Error | dict:
|
|
1005
994
|
"""Perform a POST request to create, as defined in :rfc:`RFC7644 §3.3 <7644#section-3.3>`.
|
|
1006
995
|
|
|
1007
996
|
:param resource: The resource to create
|
|
@@ -1039,17 +1028,16 @@ class BaseAsyncSCIMClient(SCIMClient):
|
|
|
1039
1028
|
|
|
1040
1029
|
async def query(
|
|
1041
1030
|
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,
|
|
1031
|
+
resource_model: type[Resource] | None = None,
|
|
1032
|
+
id: str | None = None,
|
|
1033
|
+
search_request: SearchRequest | dict | None = None,
|
|
1034
|
+
check_request_payload: bool | None = None,
|
|
1035
|
+
check_response_payload: bool | None = None,
|
|
1036
|
+
expected_status_codes: list[int]
|
|
1037
|
+
| None = SCIMClient.QUERY_RESPONSE_STATUS_CODES,
|
|
1038
|
+
raise_scim_errors: bool | None = None,
|
|
1051
1039
|
**kwargs,
|
|
1052
|
-
) ->
|
|
1040
|
+
) -> AnyResource | ListResponse[AnyResource] | Error | dict:
|
|
1053
1041
|
"""Perform a GET request to read resources, as defined in :rfc:`RFC7644 §3.4.2 <7644#section-3.4.2>`.
|
|
1054
1042
|
|
|
1055
1043
|
- If `id` is not :data:`None`, the resource with the exact id will be reached.
|
|
@@ -1113,15 +1101,14 @@ class BaseAsyncSCIMClient(SCIMClient):
|
|
|
1113
1101
|
|
|
1114
1102
|
async def search(
|
|
1115
1103
|
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,
|
|
1104
|
+
search_request: SearchRequest | None = None,
|
|
1105
|
+
check_request_payload: bool | None = None,
|
|
1106
|
+
check_response_payload: bool | None = None,
|
|
1107
|
+
expected_status_codes: list[int]
|
|
1108
|
+
| None = SCIMClient.SEARCH_RESPONSE_STATUS_CODES,
|
|
1109
|
+
raise_scim_errors: bool | None = None,
|
|
1123
1110
|
**kwargs,
|
|
1124
|
-
) ->
|
|
1111
|
+
) -> AnyResource | ListResponse[AnyResource] | Error | dict:
|
|
1125
1112
|
"""Perform a POST search request to read all available resources, as defined in :rfc:`RFC7644 §3.4.3 <7644#section-3.4.3>`.
|
|
1126
1113
|
|
|
1127
1114
|
:param resource_models: Resource type or union of types expected
|
|
@@ -1163,13 +1150,12 @@ class BaseAsyncSCIMClient(SCIMClient):
|
|
|
1163
1150
|
self,
|
|
1164
1151
|
resource_model: type,
|
|
1165
1152
|
id: str,
|
|
1166
|
-
check_response_payload:
|
|
1167
|
-
expected_status_codes:
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
raise_scim_errors: Optional[bool] = None,
|
|
1153
|
+
check_response_payload: bool | None = None,
|
|
1154
|
+
expected_status_codes: list[int]
|
|
1155
|
+
| None = SCIMClient.DELETION_RESPONSE_STATUS_CODES,
|
|
1156
|
+
raise_scim_errors: bool | None = None,
|
|
1171
1157
|
**kwargs,
|
|
1172
|
-
) ->
|
|
1158
|
+
) -> Error | dict | None:
|
|
1173
1159
|
"""Perform a DELETE request to create, as defined in :rfc:`RFC7644 §3.6 <7644#section-3.6>`.
|
|
1174
1160
|
|
|
1175
1161
|
:param resource_model: The type of the resource to delete.
|
|
@@ -1199,15 +1185,14 @@ class BaseAsyncSCIMClient(SCIMClient):
|
|
|
1199
1185
|
|
|
1200
1186
|
async def replace(
|
|
1201
1187
|
self,
|
|
1202
|
-
resource:
|
|
1203
|
-
check_request_payload:
|
|
1204
|
-
check_response_payload:
|
|
1205
|
-
expected_status_codes:
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
raise_scim_errors: Optional[bool] = None,
|
|
1188
|
+
resource: AnyResource | dict,
|
|
1189
|
+
check_request_payload: bool | None = None,
|
|
1190
|
+
check_response_payload: bool | None = None,
|
|
1191
|
+
expected_status_codes: list[int]
|
|
1192
|
+
| None = SCIMClient.REPLACEMENT_RESPONSE_STATUS_CODES,
|
|
1193
|
+
raise_scim_errors: bool | None = None,
|
|
1209
1194
|
**kwargs,
|
|
1210
|
-
) ->
|
|
1195
|
+
) -> AnyResource | Error | dict:
|
|
1211
1196
|
"""Perform a PUT request to replace a resource, as defined in :rfc:`RFC7644 §3.5.1 <7644#section-3.5.1>`.
|
|
1212
1197
|
|
|
1213
1198
|
:param resource: The new resource to replace.
|
|
@@ -1248,15 +1233,14 @@ class BaseAsyncSCIMClient(SCIMClient):
|
|
|
1248
1233
|
self,
|
|
1249
1234
|
resource_model: type[ResourceT],
|
|
1250
1235
|
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,
|
|
1236
|
+
patch_op: PatchOp[ResourceT] | dict,
|
|
1237
|
+
check_request_payload: bool | None = None,
|
|
1238
|
+
check_response_payload: bool | None = None,
|
|
1239
|
+
expected_status_codes: list[int]
|
|
1240
|
+
| None = SCIMClient.PATCH_RESPONSE_STATUS_CODES,
|
|
1241
|
+
raise_scim_errors: bool | None = None,
|
|
1258
1242
|
**kwargs,
|
|
1259
|
-
) ->
|
|
1243
|
+
) -> ResourceT | Error | dict | None:
|
|
1260
1244
|
"""Perform a PATCH request to modify a resource, as defined in :rfc:`RFC7644 §3.5.2 <7644#section-3.5.2>`.
|
|
1261
1245
|
|
|
1262
1246
|
:param resource_model: The type of the resource to modify.
|