class AnnotatedDefault:
def __init__(self, default):
self.default = default
@classmethod
def get_typed_dict_defaults(cls, typed_dict: type[dict]):
return {
k: v.__metadata__[0].default
for k, v in typed_dict.__annotations__.items()
if hasattr(v,"__metadata__")
and isinstance(v.__metadata__[0], cls)
}
class MyDopeTypedDict(TypedDict, total=False):
environment: Annotated[str, AnnotatedDefault("local")]
release: Annotated[str, AnnotatedDefault("local")]
sample_rate: Annotated[float, AnnotatedDefault(0.2)]
integrations: Annotated[dict[str, dict],
AnnotatedDefault(
{
"logging": dict(level=logging.INFO, event_level=logging.ERROR),
}
),
]
server_name: str
defaults = AnnotatedDefault.get_typed_dict_defaults(MyDopeTypedDict)