Skip to content

Commit b9d7572

Browse files
committed
feat: discover has parameters to select which objects to discover
1 parent 7a11943 commit b9d7572

File tree

3 files changed

+71
-19
lines changed

3 files changed

+71
-19
lines changed

doc/changelog.rst

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
Changelog
22
=========
33

4+
[0.4.2] - Unreleased
5+
--------------------
6+
7+
Added
8+
^^^^^
9+
- :class:`~scim2_client.client.BaseSyncSCIMClient.discover` has parameters to select which objects to discover.
10+
11+
412
[0.4.1] - 2024-12-02
513
--------------------
614

scim2_client/client.py

Lines changed: 49 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -798,14 +798,25 @@ def replace(
798798
"""
799799
raise NotImplementedError()
800800

801-
def discover(self):
802-
"""Dynamically discover the server models :class:`~scim2_models.Schema` and :class:`~scim2_models.ResourceType`."""
803-
resource_types_response = self.query(ResourceType)
804-
schemas_response = self.query(Schema)
805-
self.service_provider_config = self.query(ServiceProviderConfig)
806-
self.resource_types = resource_types_response.resources
807-
schemas = schemas_response.resources
808-
self.resource_models = self.build_resource_models(self.resource_types, schemas)
801+
def discover(self, schemas=True, resource_types=True, service_provider_config=True):
802+
"""Dynamically discover the server configuration objects.
803+
804+
:param schemas: Whether to discover the :class:`~scim2_models.Schema` endpoint.
805+
:param resource_types: Whether to discover the :class:`~scim2_models.ResourceType` endpoint.
806+
:param service_provider_config: Whether to discover the :class:`~scim2_models.ServiceProviderConfig` endpoint.
807+
"""
808+
if resource_types:
809+
resource_types_response = self.query(ResourceType)
810+
self.resource_types = resource_types_response.resources
811+
812+
if schemas:
813+
schemas_response = self.query(Schema)
814+
self.resource_models = self.build_resource_models(
815+
self.resource_types, schemas_response.resources
816+
)
817+
818+
if service_provider_config:
819+
self.service_provider_config = self.query(ServiceProviderConfig)
809820

810821

811822
class BaseAsyncSCIMClient(SCIMClient):
@@ -1064,14 +1075,33 @@ async def replace(
10641075
"""
10651076
raise NotImplementedError()
10661077

1067-
async def discover(self):
1068-
"""Dynamically discover the server models :class:`~scim2_models.Schema` and :class:`~scim2_models.ResourceType`."""
1069-
resources_task = asyncio.create_task(self.query(ResourceType))
1070-
schemas_task = asyncio.create_task(self.query(Schema))
1071-
spc_task = asyncio.create_task(self.query(ServiceProviderConfig))
1072-
resource_types_response = await resources_task
1073-
schemas_response = await schemas_task
1074-
self.service_provider_config = await spc_task
1075-
self.resource_types = resource_types_response.resources
1076-
schemas = schemas_response.resources
1077-
self.resource_models = self.build_resource_models(self.resource_types, schemas)
1078+
async def discover(
1079+
self, schemas=True, resource_types=True, service_provider_config=True
1080+
):
1081+
"""Dynamically discover the server configuration objects.
1082+
1083+
:param schemas: Whether to discover the :class:`~scim2_models.Schema` endpoint.
1084+
:param resource_types: Whether to discover the :class:`~scim2_models.ResourceType` endpoint.
1085+
:param service_provider_config: Whether to discover the :class:`~scim2_models.ServiceProviderConfig` endpoint.
1086+
"""
1087+
if schemas:
1088+
schemas_task = asyncio.create_task(self.query(Schema))
1089+
1090+
if resource_types:
1091+
resources_types_task = asyncio.create_task(self.query(ResourceType))
1092+
1093+
if service_provider_config:
1094+
spc_task = asyncio.create_task(self.query(ServiceProviderConfig))
1095+
1096+
if resource_types:
1097+
resource_types_response = await resources_types_task
1098+
self.resource_types = resource_types_response.resources
1099+
1100+
if schemas:
1101+
schemas_response = await schemas_task
1102+
self.resource_models = self.build_resource_models(
1103+
self.resource_types, schemas_response.resources
1104+
)
1105+
1106+
if service_provider_config:
1107+
self.service_provider_config = await spc_task

tests/engines/test_httpx.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,13 @@ def test_sync_engine(server):
4545
client = Client(base_url=f"http://{host}:{port}")
4646
scim_client = SyncSCIMClient(client)
4747

48+
scim_client.discover(
49+
schemas=False, resource_types=False, service_provider_config=False
50+
)
51+
assert not scim_client.resource_models
52+
assert not scim_client.resource_types
53+
assert not scim_client.service_provider_config
54+
4855
scim_client.discover()
4956
assert isinstance(scim_client.service_provider_config, ServiceProviderConfig)
5057
User = scim_client.get_resource_model("User")
@@ -82,6 +89,13 @@ async def test_async_engine(server):
8289
client = AsyncClient(base_url=f"http://{host}:{port}")
8390
scim_client = AsyncSCIMClient(client)
8491

92+
await scim_client.discover(
93+
schemas=False, resource_types=False, service_provider_config=False
94+
)
95+
assert not scim_client.resource_models
96+
assert not scim_client.resource_types
97+
assert not scim_client.service_provider_config
98+
8599
await scim_client.discover()
86100
assert isinstance(scim_client.service_provider_config, ServiceProviderConfig)
87101
User = scim_client.get_resource_model("User")

0 commit comments

Comments
 (0)