19
19
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20
20
"""
21
21
22
- from typing import Set
22
+ from typing import Set , TYPE_CHECKING , Optional
23
23
24
24
from aws_lambda_powertools import Logger
25
25
import boto3
26
26
import botocore
27
27
28
+ if TYPE_CHECKING :
29
+ from mypy_boto3_servicecatalog import ServiceCatalogClient , ListPrincipalsForPortfolioPaginator
30
+
28
31
logger = Logger (child = True )
29
32
30
33
__all__ = ["ServiceCatalog" ]
31
34
32
35
33
36
class ServiceCatalog :
34
- def __init__ (self , session : boto3 .Session ) -> None :
37
+ def __init__ (self , session : Optional [ boto3 .Session ] = None ) -> None :
35
38
if not session :
36
39
session = boto3 ._get_default_session ()
37
- self .client = session .client ("servicecatalog" )
40
+ self .client : ServiceCatalogClient = session .client ("servicecatalog" )
38
41
39
42
def accept_portfolio_share (self , portfolio_id : str ) -> None :
40
43
try :
41
- self .client .accept_portfolio_share (
42
- PortfolioId = portfolio_id , PortfolioShareType = "AWS_ORGANIZATIONS"
43
- )
44
+ self .client .accept_portfolio_share (PortfolioId = portfolio_id , PortfolioShareType = "AWS_ORGANIZATIONS" )
44
45
except botocore .exceptions .ClientError :
45
46
logger .exception ("Unable to accept portfolio share" )
46
47
raise
47
48
48
- def associate_principal_with_portfolio (
49
- self , portfolio_id : str , principal_arn : str
50
- ) -> None :
49
+ def associate_principal_with_portfolio (self , portfolio_id : str , principal_arn : str ) -> None :
51
50
try :
52
51
self .client .associate_principal_with_portfolio (
53
52
PortfolioId = portfolio_id ,
@@ -58,13 +57,9 @@ def associate_principal_with_portfolio(
58
57
logger .exception ("Unable to associate princpal with portfolio" )
59
58
raise
60
59
61
- def disassociate_principal_from_portfolio (
62
- self , portfolio_id : str , principal_arn : str
63
- ) -> None :
60
+ def disassociate_principal_from_portfolio (self , portfolio_id : str , principal_arn : str ) -> None :
64
61
try :
65
- self .client .disassociate_principal_from_portfolio (
66
- PortfolioId = portfolio_id , PrincipalARN = principal_arn
67
- )
62
+ self .client .disassociate_principal_from_portfolio (PortfolioId = portfolio_id , PrincipalARN = principal_arn )
68
63
except botocore .exceptions .ClientError as error :
69
64
if error .response ["Error" ]["Code" ] != "ResourceNotFoundException" :
70
65
logger .exception ("Unable to disassociate princpal from portfolio" )
@@ -73,7 +68,7 @@ def disassociate_principal_from_portfolio(
73
68
def list_principals_for_portfolio (self , portfolio_id : str ) -> Set [str ]:
74
69
principals = set ()
75
70
76
- paginator = self .client .get_paginator ("list_principals_for_portfolio" )
71
+ paginator : ListPrincipalsForPortfolioPaginator = self .client .get_paginator ("list_principals_for_portfolio" )
77
72
page_iterator = paginator .paginate (PortfolioId = portfolio_id )
78
73
for page in page_iterator :
79
74
for principal in page .get ("Principals" , []):
0 commit comments