# -*- coding: utf-8 -*-"""Parameter Management System for AWS CDKThis module provides a type-safe, extendable parameter system for AWS CDK constructsand stacks using Python dataclasses. The motivation for this system is to addresslimitations when subclassing CDK constructs like cdk.Stack:1. Because cdk Python uses ``def __init__(self, ...):``, subclassing requires repeating parameter definitions to maintain type hints2. Using ``**kwargs`` loses type information and IDE completion support3. Validation of required parameters is handled manually and inconsistently"""importtypingasTimportdataclassesfromfunc_args.apiimportREQ,OPT,remove_optional,T_KWARGS,BaseModelifT.TYPE_CHECKING:# pragma: no coverimportaws_cdkascdk
[docs]@dataclasses.dataclassclassConstructParams(BaseModel):""" Parameter dataclass for CDK Construct initialization. How to extend:: import dataclasses from func_args.api import REQ @dataclasses.dataclass class MyConstructParams(ConstructParams): your_custom_param_1: int = dataclasses.field(default=REQ) your_custom_param_2: str = dataclasses.field(default="my_default_value") """id:str=dataclasses.field(default=REQ)
[docs]defto_construct_kwargs(self)->T_KWARGS:""" Generate keyword arguments for CDK construct initialization. .. note:: To generate keyword arguments for all declared attributes, use the ``.to_kwargs()`` method. """returnremove_optional(id=self.id)
[docs]@dataclasses.dataclassclassStackParams(ConstructParams):""" Parameter dataclass for CDK Stack initialization. How to extend:: import dataclasses from func_args.api import REQ @dataclasses.dataclass class MyStackParams(StackParams): your_custom_param_1: int = dataclasses.field(default=REQ) your_custom_param_2: str = dataclasses.field(default="my_default_value") """analytics_reporting:bool=dataclasses.field(default=OPT)cross_region_references:bool=dataclasses.field(default=OPT)description:str=dataclasses.field(default=OPT)env:T.Union["cdk.Environment",dict[str,T.Any]]=dataclasses.field(default=OPT)notification_arns:T.Sequence[str]=dataclasses.field(default=OPT)permissions_boundary:"cdk.PermissionsBoundary"=dataclasses.field(default=OPT)stack_name:str=dataclasses.field(default=OPT)suppress_template_indentation:bool=dataclasses.field(default=OPT)synthesizer:"cdk.IStackSynthesizer"=dataclasses.field(default=OPT)tags:T.Mapping[str,str]=dataclasses.field(default=OPT)termination_protection:bool=dataclasses.field(default=OPT)
[docs]defto_stack_kwargs(self)->T_KWARGS:""" Generate keyword arguments for CDK Stack initialization. .. note:: To generate keyword arguments for all declared attributes, use the ``.to_kwargs()`` method. """returnremove_optional(id=self.id,analytics_reporting=self.analytics_reporting,cross_region_references=self.cross_region_references,description=self.description,env=self.env,notification_arns=self.notification_arns,permissions_boundary=self.permissions_boundary,stack_name=self.stack_name,suppress_template_indentation=self.suppress_template_indentation,synthesizer=self.synthesizer,tags=self.tags,termination_protection=self.termination_protection,)