77from gooddata_api_client .exceptions import NotFoundException
88from gooddata_api_client .model .declarative_notification_channels import DeclarativeNotificationChannels
99from gooddata_api_client .model .json_api_csp_directive_in_document import JsonApiCspDirectiveInDocument
10+ from gooddata_api_client .model .json_api_identity_provider_in_document import JsonApiIdentityProviderInDocument
1011from gooddata_api_client .model .json_api_organization_setting_in_document import JsonApiOrganizationSettingInDocument
1112
1213from gooddata_sdk .catalog .catalog_service_base import CatalogServiceBase
1314from gooddata_sdk .catalog .organization .entity_model .directive import CatalogCspDirective
15+ from gooddata_sdk .catalog .organization .entity_model .identity_provider import CatalogIdentityProvider
1416from gooddata_sdk .catalog .organization .entity_model .jwk import CatalogJwk , CatalogJwkDocument
1517from gooddata_sdk .catalog .organization .entity_model .organization import CatalogOrganizationDocument
1618from gooddata_sdk .catalog .organization .entity_model .setting import CatalogOrganizationSetting
19+ from gooddata_sdk .catalog .organization .layout .identity_provider import CatalogDeclarativeIdentityProvider
1720from gooddata_sdk .catalog .organization .layout .notification_channel import CatalogDeclarativeNotificationChannel
1821from gooddata_sdk .client import GoodDataApiClient
19- from gooddata_sdk .utils import load_all_entities
22+ from gooddata_sdk .utils import load_all_entities , load_all_entities_dict
2023
2124
2225class CatalogOrganizationService (CatalogServiceBase ):
@@ -188,7 +191,7 @@ def create_organization_setting(self, organization_setting: CatalogOrganizationS
188191
189192 Args:
190193 organization_setting (CatalogOrganizationSettings):
191- A catalog organization setting an object to be created.
194+ A catalog organization setting object to be created.
192195
193196 Returns:
194197 None
@@ -225,7 +228,7 @@ def update_organization_setting(self, organization_setting: CatalogOrganizationS
225228
226229 Args:
227230 organization_setting (CatalogOrganizationSettings):
228- A catalog organization setting an object to be updated.
231+ A catalog organization setting object to be updated.
229232
230233 Returns:
231234 None
@@ -249,7 +252,7 @@ def list_csp_directives(self) -> list[CatalogCspDirective]:
249252 """Returns a list of all csp directives in the current organization.
250253
251254 Returns:
252- list[CatalogOrganizationSettings ]:
255+ list[CatalogCspDirective ]:
253256 List of csp directives in the current organization.
254257 """
255258 get_csp_directives = functools .partial (
@@ -277,7 +280,7 @@ def create_csp_directive(self, csp_directive: CatalogCspDirective) -> None:
277280
278281 Args:
279282 csp_directive (CatalogCspDirective):
280- A catalog csp directive an object to be created.
283+ A catalog csp directive object to be created.
281284
282285 Returns:
283286 None
@@ -309,7 +312,7 @@ def update_csp_directive(self, csp_directive: CatalogCspDirective) -> None:
309312
310313 Args:
311314 csp_directive (CatalogCspDirective):
312- A catalog csp directive an object to be updated.
315+ A catalog csp directive object to be updated.
313316
314317 Returns:
315318 None
@@ -324,6 +327,86 @@ def update_csp_directive(self, csp_directive: CatalogCspDirective) -> None:
324327 except NotFoundException :
325328 raise ValueError (f"Can not update { csp_directive .id } csp directive. This csp directive does not exist." )
326329
330+ def list_identity_providers (self ) -> list [CatalogIdentityProvider ]:
331+ """Returns a list of all identity providers in the current organization.
332+
333+ Returns:
334+ list[CatalogIdentityProvider]:
335+ List of identity providers in the current organization.
336+ """
337+ get_identity_providers = functools .partial (
338+ self ._entities_api .get_all_entities_identity_providers ,
339+ _check_return_type = False ,
340+ )
341+ identity_providers = load_all_entities_dict (get_identity_providers , camel_case = False )
342+ return [
343+ CatalogIdentityProvider .from_dict (identity_provider , camel_case = False )
344+ for identity_provider in identity_providers ["data" ]
345+ ]
346+
347+ def get_identity_provider (self , identity_provider_id : str ) -> CatalogIdentityProvider :
348+ """Get an individual identity provider.
349+
350+ Args:
351+ identity_provider_id (str):
352+ Identity provider identification string e.g. "demo"
353+
354+ Returns:
355+ CatalogIdentityProvider:
356+ Catalog identity provider object containing structure of the identity provider.
357+ """
358+ identity_provider_api = self ._entities_api .get_entity_identity_providers (id = identity_provider_id ).data
359+ return CatalogIdentityProvider .from_api (identity_provider_api )
360+
361+ def create_identity_provider (self , identity_provider : CatalogIdentityProvider ) -> None :
362+ """Create a new identity provider.
363+
364+ Args:
365+ identity_provider (CatalogIdentityProvider):
366+ A catalog identity provider object to be created.
367+
368+ Returns:
369+ None
370+ """
371+ identity_provider_document = JsonApiIdentityProviderInDocument (data = identity_provider .to_api ())
372+ self ._entities_api .create_entity_identity_providers (
373+ json_api_identity_provider_in_document = identity_provider_document
374+ )
375+
376+ def delete_identity_provider (self , identity_provider_id : str ) -> None :
377+ """Delete an identity provider.
378+
379+ Args:
380+ identity_provider_id (str):
381+ Identity provider identification string e.g. "demo"
382+
383+ Returns:
384+ None
385+ """
386+ self ._entities_api .delete_entity_identity_providers (identity_provider_id )
387+
388+ def update_identity_provider (self , identity_provider : CatalogIdentityProvider ) -> None :
389+ """Update an identity provider.
390+
391+ Args:
392+ identity_provider (CatalogIdentityProvider):
393+ A catalog identity provider object to be updated.
394+
395+ Returns:
396+ None
397+
398+ Raises:
399+ ValueError:
400+ Identity provider does not exist.
401+ """
402+ try :
403+ identity_provider_document = JsonApiIdentityProviderInDocument (data = identity_provider .to_api ())
404+ self ._entities_api .update_entity_identity_providers (identity_provider .id , identity_provider_document )
405+ except NotFoundException :
406+ raise ValueError (
407+ f"Can not update { identity_provider .id } identity provider. " f"This identity provider does not exist."
408+ )
409+
327410 # Layout APIs
328411
329412 def get_declarative_notification_channels (self ) -> list [CatalogDeclarativeNotificationChannel ]:
@@ -354,3 +437,29 @@ def put_declarative_notification_channels(
354437 """
355438 api_ncs = [nc .to_api () for nc in notification_channels ]
356439 self ._layout_api .set_notification_channels (DeclarativeNotificationChannels (notification_channels = api_ncs ))
440+
441+ def get_declarative_identity_providers (self ) -> list [CatalogDeclarativeIdentityProvider ]:
442+ """
443+ Get all declarative identity providers in the current organization.
444+
445+ Returns:
446+ list[CatalogDeclarativeIdentityProvider]:
447+ List of declarative identity providers.
448+ """
449+ return [
450+ CatalogDeclarativeIdentityProvider .from_api (idp ) for idp in self ._layout_api .get_identity_providers_layout ()
451+ ]
452+
453+ def put_declarative_identity_providers (self , identity_providers : list [CatalogDeclarativeIdentityProvider ]) -> None :
454+ """
455+ Put declarative identity providers in the current organization.
456+
457+ Args:
458+ identity_providers (list[CatalogDeclarativeIdentityProvider]):
459+ List of declarative identity providers.
460+
461+ Returns:
462+ None
463+ """
464+ api_idps = [idp .to_api () for idp in identity_providers ]
465+ self ._layout_api .set_identity_providers (declarative_identity_provider = api_idps )
0 commit comments