Custom Metadata Classes
Subclass FieldMetadata to add application-specific fields, then use generics for full type
safety.
from dataclasses import dataclass, field
from fields_metadata import MetadataExtractor, FieldMetadata
@dataclass
class AppMetadata(FieldMetadata):
priority: str | None = None
validation_rules: list[str] = field(default_factory=list)
custom_flag: bool = False
# Generic syntax — no runtime parameter needed
extractor = MetadataExtractor[AppMetadata]()
metadata = extractor.extract(MyModel)
assert isinstance(metadata["field_name"], AppMetadata)
metadata["field_name"].priority = "high"
metadata["field_name"].validation_rules.append("required")
Benefits:
- Type safety: mypy infers the correct type throughout
- IDE support: autocomplete for custom fields
- Applies everywhere: nested, computed, derived, and multivalued fields all use the custom class