@@ -44,6 +44,36 @@ def _is_pydantic_model(model: Any) -> TypeGuard[type[BaseModel]]:
4444patch_pydanclick ()
4545
4646
47+ def load_config_files (
48+ schemas_fd , resource_types_fd , service_provider_config_fd
49+ ) -> tuple [
50+ list [type [Resource ]], list [ResourceType ] | None , ServiceProviderConfig | None
51+ ]:
52+ if schemas_fd :
53+ schemas_payload = json .load (schemas_fd )
54+ schemas_obj = [Schema .model_validate (schema ) for schema in schemas_payload ]
55+ resource_models = [Resource .from_schema (schema ) for schema in schemas_obj ]
56+
57+ else :
58+ resource_models = [User , Group ]
59+
60+ if resource_types_fd :
61+ resource_types_payload = json .load (resource_types_fd )
62+ resource_types = [
63+ ResourceType .model_validate (item ) for item in resource_types_payload
64+ ]
65+ else :
66+ resource_types = None
67+
68+ if service_provider_config_fd :
69+ spc_payload = json .load (service_provider_config_fd )
70+ service_provider_config = ServiceProviderConfig .model_validate (spc_payload )
71+ else :
72+ service_provider_config = None
73+
74+ return resource_models , resource_types , service_provider_config
75+
76+
4777@click .group (cls = make_rst_to_ansi_formatter (DOC_URL , group = True ))
4878@click .option ("-u" , "--url" , help = "The SCIM server endpoint." , envvar = "SCIM_CLI_URL" )
4979@click .option (
@@ -86,36 +116,21 @@ def cli(
86116 headers_dict = split_headers (header )
87117 client = Client (base_url = ctx .obj ["URL" ], headers = headers_dict )
88118
89- if schemas :
90- schemas_payload = json .load (schemas )
91- schemas_obj = [Schema .model_validate (schema ) for schema in schemas_payload ]
92- resource_models = [Resource .from_schema (schema ) for schema in schemas_obj ]
93-
94- else :
95- resource_models = [User , Group ]
96-
97- if resource_types :
98- resource_types_payload = json .load (resource_types )
99- resource_types_obj = [
100- ResourceType .model_validate (item ) for item in resource_types_payload
101- ]
102- else :
103- resource_types_obj = None
104-
105- if service_provider_config :
106- spc_payload = json .load (service_provider_config )
107- spc_obj = ServiceProviderConfig .model_validate (spc_payload )
108- else :
109- spc_obj = None
119+ resource_models , resource_types_obj , spc_obj = load_config_files (
120+ schemas , resource_types , service_provider_config
121+ )
110122
111123 scim_client = SyncSCIMClient (
112124 client ,
113125 resource_models = resource_models ,
114126 resource_types = resource_types_obj ,
115127 service_provider_config = spc_obj ,
116128 )
117- if not resource_types :
118- scim_client .register_naive_resource_types ()
129+ scim_client .discover (
130+ schemas = not bool (schemas ),
131+ resource_types = not bool (resource_types ),
132+ service_provider_config = not bool (service_provider_config ),
133+ )
119134
120135 ctx .obj ["client" ] = scim_client
121136 ctx .obj ["resource_models" ] = {
0 commit comments