typed_dict¶
这个模块负责对 TypedDict 这种类型注解进行数据建模. 我们后面的注释会以下面的代码作为例子:
class UserTypeDef(TypedDict):
id: Required[int] # <--- 这是一个字段
name: NotRequired[str] # <--- 这是另一个字段
class ModelTypeDef(TypedDict):
attr1: UserTypeDef # <--- 这是一个嵌套 (nested) 的字段
attr2: Required[UserTypeDef] # <--- 这是一个嵌套的字段
attr3: NotRequired[UserTypeDef] # <--- 这是一个嵌套的字段
attr4: Optional[UserTypeDef] # <--- 这是一个嵌套的字段
- class boto3_dataclass.models.typed_dict.TypedDictFieldAnnotation(is_nested_typed_dict: bool = False, nested_type_name: str | None = None, nested_type_subscriptor: Literal['NULL', 'List'] = 'NULL')[source]¶
储存着 TypedDict 中的一个 field 的类型注解信息. 例如:
id: int中的int部分, 不包括id.name: Required[str]中的Required[str]部分.
- Parameters:
is_nested_typed_dict – 是否是另一个 TypedDict 的类型. 例如
id: str,name: Required[str]这些都不是嵌套的 TypedDict, 而attr1: UserTypeDef以及attr2, attr3, attr4都是嵌套的 TypedDict. 这个属性决定了我们在生成 dataclass 的@cached_property的时候, 是直接用boto3_raw_data.get("field_name")返回一直简单的值, 还是用User(boto3_raw_data.get("field_name"))返回一个对象.nested_type_name – 如果是嵌套的 TypedDict 字段, 这里存储着嵌套的 TypedDict 的名称, 例如 ModelTypeDef 中都是
UserTypeDef. 只有在 is_nested_typed_dict 为 True 的情况下 才会有值, 否则为 None.nested_type_subscriptor – 如果是嵌套的 TypedDict 字段, 这里存储着嵌套的 TypedDict 的 特殊形式. 目前只有 List 这一种特殊形式. 因为在 List 的情况下,
@cached_property需要用类似于[User(dct) for dct in boto3_raw_data.get("field_name", [])]的形式来生成代码. 而其他的形式, 例如 Required, NotRequired, Optional 都不需要特殊处理.
- class boto3_dataclass.models.typed_dict.TypedDictField(name: str, anno: ~boto3_dataclass.models.typed_dict.TypedDictFieldAnnotation = <factory>)[source]¶
储存着 TypedDict 的单个字段信息, 例如:
UserTypeDef.id
UserTypeDef.name
- Parameters:
name – 字段名称, 例如
id,name,attr1,attr2, …anno – 字段的类型注解信息, 见
TypedDictFieldAnnotation.
- class boto3_dataclass.models.typed_dict.TypedDictDef(name: str, fields: list[~boto3_dataclass.models.typed_dict.TypedDictField] = <factory>)[source]¶
储存着 TypedDict 的定义信息, 例如:
class UserTypeDef(TypedDict): id: Required[int] name: NotRequired[str]
- Parameters:
name – TypedDict 的名称, 例如
UserTypeDeffields – TypedDict 的字段列表
- property fields_mapping: dict[str, TypedDictField]¶
通过字段名称获取字段定义的映射, 例如
{"id": <TypedDictField>, "name": <TypedDictField>}.
- class boto3_dataclass.models.typed_dict.TypedDefsModule(tdds: list[~boto3_dataclass.models.typed_dict.TypedDictDef] = <factory>)[source]¶
对应一个实现了所有
type_defs.pyi文件中的 TypedDict 的 dataclass. 这个类储存着多个TypedDictDef的定义信息.- property tdds_mapping: dict[str, TypedDictDef]¶
通过 TypedDict 名称获取 TypedDict 定义的映射, 例如
{"UserTypeDef": <TypedDictDef>, ...}.