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,95 @@ 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+ Raises:
387+ ValueError:
388+ Identity provider does not exist.
389+ """
390+ try :
391+ self ._entities_api .delete_entity_identity_providers (identity_provider_id )
392+ except NotFoundException :
393+ raise ValueError (
394+ f"Can not delete { identity_provider_id } identity provider. " f"This identity provider does not exist."
395+ )
396+
397+ def update_identity_provider (self , identity_provider : CatalogIdentityProvider ) -> None :
398+ """Update an identity provider.
399+
400+ Args:
401+ identity_provider (CatalogIdentityProvider):
402+ A catalog identity provider object to be updated.
403+
404+ Returns:
405+ None
406+
407+ Raises:
408+ ValueError:
409+ Identity provider does not exist.
410+ """
411+ try :
412+ identity_provider_document = JsonApiIdentityProviderInDocument (data = identity_provider .to_api ())
413+ self ._entities_api .update_entity_identity_providers (identity_provider .id , identity_provider_document )
414+ except NotFoundException :
415+ raise ValueError (
416+ f"Can not update { identity_provider .id } identity provider. " f"This identity provider does not exist."
417+ )
418+
327419 # Layout APIs
328420
329421 def get_declarative_notification_channels (self ) -> list [CatalogDeclarativeNotificationChannel ]:
@@ -354,3 +446,29 @@ def put_declarative_notification_channels(
354446 """
355447 api_ncs = [nc .to_api () for nc in notification_channels ]
356448 self ._layout_api .set_notification_channels (DeclarativeNotificationChannels (notification_channels = api_ncs ))
449+
450+ def get_declarative_identity_providers (self ) -> list [CatalogDeclarativeIdentityProvider ]:
451+ """
452+ Get all declarative identity providers in the current organization.
453+
454+ Returns:
455+ list[CatalogDeclarativeIdentityProvider]:
456+ List of declarative identity providers.
457+ """
458+ return [
459+ CatalogDeclarativeIdentityProvider .from_api (idp ) for idp in self ._layout_api .get_identity_providers_layout ()
460+ ]
461+
462+ def put_declarative_identity_providers (self , identity_providers : list [CatalogDeclarativeIdentityProvider ]) -> None :
463+ """
464+ Put declarative identity providers in the current organization.
465+
466+ Args:
467+ identity_providers (list[CatalogDeclarativeIdentityProvider]):
468+ List of declarative identity providers.
469+
470+ Returns:
471+ None
472+ """
473+ api_idps = [idp .to_api () for idp in identity_providers ]
474+ self ._layout_api .set_identity_providers (declarative_identity_provider = api_idps )
0 commit comments