Skip to content

Commit d92b77d

Browse files
committed
feat: the client holds an instance of ServiceProviderConfig
1 parent 67ca0d3 commit d92b77d

File tree

2 files changed

+11
-0
lines changed

2 files changed

+11
-0
lines changed

scim2_client/client.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class SCIMClient:
5454
If a request payload describe a resource that is not in this list, an exception will be raised.
5555
:param resource_types: A collection of :class:`~scim2_models.ResourceType` that will be used to guess the
5656
server endpoints associated with the resources.
57+
:param service_provider_config: An instance of :class:`~scim2_models.ServiceProviderConfig`.
5758
:param check_request_payload: If :data:`False`,
5859
:code:`resource` is expected to be a dict that will be passed as-is in the request.
5960
This value can be overwritten in methods.
@@ -152,12 +153,14 @@ def __init__(
152153
self,
153154
resource_models: Optional[Collection[type[Resource]]] = None,
154155
resource_types: Optional[Collection[ResourceType]] = None,
156+
service_provider_config: Optional[ServiceProviderConfig] = None,
155157
check_request_payload: bool = True,
156158
check_response_payload: bool = True,
157159
raise_scim_errors: bool = True,
158160
):
159161
self.resource_models = tuple(set(resource_models or []) | set(CONFIG_RESOURCES))
160162
self.resource_types = resource_types
163+
self.service_provider_config = service_provider_config
161164
self.check_request_payload = check_request_payload
162165
self.check_response_payload = check_response_payload
163166
self.raise_scim_errors = raise_scim_errors
@@ -799,6 +802,7 @@ def discover(self):
799802
"""Dynamically discover the server models :class:`~scim2_models.Schema` and :class:`~scim2_models.ResourceType`."""
800803
resource_types_response = self.query(ResourceType)
801804
schemas_response = self.query(Schema)
805+
self.service_provider_config = self.query(ServiceProviderConfig)
802806
self.resource_types = resource_types_response.resources
803807
schemas = schemas_response.resources
804808
self.resource_models = self.build_resource_models(self.resource_types, schemas)
@@ -1064,8 +1068,10 @@ async def discover(self):
10641068
"""Dynamically discover the server models :class:`~scim2_models.Schema` and :class:`~scim2_models.ResourceType`."""
10651069
resources_task = asyncio.create_task(self.query(ResourceType))
10661070
schemas_task = asyncio.create_task(self.query(Schema))
1071+
spc_task = asyncio.create_task(self.query(ServiceProviderConfig))
10671072
resource_types_response = await resources_task
10681073
schemas_response = await schemas_task
1074+
self.service_provider_config = await spc_task
10691075
self.resource_types = resource_types_response.resources
10701076
schemas = schemas_response.resources
10711077
self.resource_models = self.build_resource_models(self.resource_types, schemas)

tests/engines/test_httpx.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from httpx import AsyncClient
77
from httpx import Client
88
from scim2_models import SearchRequest
9+
from scim2_models import ServiceProviderConfig
910

1011
from scim2_client.engines.httpx import AsyncSCIMClient
1112
from scim2_client.engines.httpx import SyncSCIMClient
@@ -43,7 +44,9 @@ def test_sync_engine(server):
4344
host, port = server
4445
client = Client(base_url=f"http://{host}:{port}")
4546
scim_client = SyncSCIMClient(client)
47+
4648
scim_client.discover()
49+
assert isinstance(scim_client.service_provider_config, ServiceProviderConfig)
4750
User = scim_client.get_resource_model("User")
4851

4952
request_user = User(user_name="foo", display_name="bar")
@@ -78,7 +81,9 @@ async def test_async_engine(server):
7881
host, port = server
7982
client = AsyncClient(base_url=f"http://{host}:{port}")
8083
scim_client = AsyncSCIMClient(client)
84+
8185
await scim_client.discover()
86+
assert isinstance(scim_client.service_provider_config, ServiceProviderConfig)
8287
User = scim_client.get_resource_model("User")
8388

8489
request_user = User(user_name="foo", display_name="bar")

0 commit comments

Comments
 (0)