Skip to content

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

Legacy Syntax

# Pre-v1.2.0 — still works, but less type-safe
extractor = MetadataExtractor(metadata_class=AppMetadata)