Supported frameworks¶
What you’ll learn¶
Which constructor/field patterns diwire can extract dependencies from.
Dataclass¶
Run locally¶
uv run python examples/ex_12_supported_frameworks/01_dataclass.py
"""Focused example: dataclass constructor dependency extraction."""
from __future__ import annotations
from dataclasses import dataclass
from diwire import Container
@dataclass(slots=True)
class Dependency:
name: str
@dataclass(slots=True)
class Consumer:
dependency: Dependency
def main() -> None:
container = Container()
dependency = Dependency(name="framework")
container.add_instance(dependency)
container.add(Consumer)
print(
f"dataclass_ok={container.resolve(Consumer).dependency is dependency}",
) # => dataclass_ok=True
if __name__ == "__main__":
main()
NamedTuple¶
Run locally¶
uv run python examples/ex_12_supported_frameworks/02_namedtuple.py
"""Focused example: ``NamedTuple`` dependency extraction."""
from __future__ import annotations
from typing import NamedTuple
from diwire import Container
class Dependency:
pass
class Consumer(NamedTuple):
dependency: Dependency
def main() -> None:
container = Container()
dependency = Dependency()
container.add_instance(dependency)
container.add(Consumer)
print(
f"namedtuple_ok={container.resolve(Consumer).dependency is dependency}",
) # => namedtuple_ok=True
if __name__ == "__main__":
main()
attrs¶
Run locally¶
uv run python examples/ex_12_supported_frameworks/03_attrs.py
"""Focused example: ``attrs.define`` dependency extraction."""
from __future__ import annotations
import attrs
from diwire import Container
class Dependency:
pass
@attrs.define
class Consumer:
dependency: Dependency
def main() -> None:
container = Container()
dependency = Dependency()
container.add_instance(dependency)
container.add(Consumer)
print(f"attrs_ok={container.resolve(Consumer).dependency is dependency}") # => attrs_ok=True
if __name__ == "__main__":
main()
Pydantic¶
Run locally¶
uv run python examples/ex_12_supported_frameworks/04_pydantic.py
"""Focused example: pydantic v2 model field dependency extraction."""
from __future__ import annotations
import pydantic
from diwire import Container
class Dependency:
pass
class Consumer(pydantic.BaseModel):
model_config = pydantic.ConfigDict(arbitrary_types_allowed=True)
dependency: Dependency
def main() -> None:
container = Container()
dependency = Dependency()
container.add_instance(dependency)
container.add(Consumer)
print(
f"pydantic_ok={container.resolve(Consumer).dependency is dependency}",
) # => pydantic_ok=True
if __name__ == "__main__":
main()
msgspec¶
Run locally¶
uv run python examples/ex_12_supported_frameworks/05_msgspec.py
"""Focused example: ``msgspec.Struct`` field dependency extraction."""
from __future__ import annotations
import msgspec
from diwire import Container
class Dependency:
pass
class Consumer(msgspec.Struct):
dependency: Dependency
def main() -> None:
container = Container()
dependency = Dependency()
container.add_instance(dependency)
container.add(Consumer)
print(
f"msgspec_ok={container.resolve(Consumer).dependency is dependency}",
) # => msgspec_ok=True
if __name__ == "__main__":
main()