Quick Start
from dataclasses import dataclass
from typing import Annotated
from annotated_types import DocInfo, Ge
from fields_metadata import MetadataExtractor, HumanReadableId
@dataclass
class Address:
street: str
city: str
@dataclass
class Person:
name: Annotated[str, HumanReadableId(), DocInfo("Person's full name")]
age: Annotated[int, Ge(0), DocInfo("Person's age in years")]
email: str | None = None
address: Address | None = None
extractor = MetadataExtractor()
metadata = extractor.extract(Person)
print(metadata["name"].doc) # "Person's full name"
print(metadata["name"].extra["human_readable_id"]) # True
print(metadata["age"].numeric) # True
print(metadata["age"].extra["min_value"]) # 0
print(metadata["email"].optional) # True
# Nested field
if "address.street" in metadata:
street = metadata["address.street"]
print(street.field_name) # "street"
print(street.parent_field) # metadata["address"]
Next: Caching | Querying | Field Metadata