Skip to content

API Reference

Complete API documentation for Duckdantic.

Core Modules

Core API (Coming Soon)

Main functions for trait satisfaction checking and field normalization.

Models (Coming Soon)

Duck API classes and Pydantic integration.

Traits (Coming Soon)

Trait and field specifications.

Matching (Coming Soon)

Functions for checking trait satisfaction and getting detailed feedback.

Providers (Coming Soon)

Field extraction from different object types.

Adapters (Coming Soon)

ABC integration and isinstance/issubclass support.

Algebra (Coming Soon)

Set operations on traits (union, intersect, minus).

Quick Reference

Essential Functions

from duckdantic import (
    satisfies,      # Check trait satisfaction
    explain,        # Get detailed feedback
    Duck,           # Create duck types
    TraitSpec,      # Define traits
    FieldSpec,      # Define fields
)

Type Checking

# Basic satisfaction check
satisfies(obj, trait, policy=POLICY_PRAGMATIC)

# Detailed explanation
result = explain(obj, trait, policy)

Duck Types

# Create duck type
UserDuck = Duck(User)

# Check with isinstance
isinstance(data, UserDuck)

# Convert objects
user = UserDuck.convert(data)

Traits

# Define trait
trait = TraitSpec(
    name="MyTrait",
    fields=(
        FieldSpec("field1", str, required=True),
        FieldSpec("field2", int, required=False),
    )
)

Policies

from duckdantic import TypeCompatPolicy, POLICY_PRAGMATIC

# Use default policy
satisfies(obj, trait, POLICY_PRAGMATIC)

# Custom policy
strict = TypeCompatPolicy(
    allow_numeric_widening=False,
    allow_optional_widening=False
)

ABC Integration

from duckdantic import abc_for

# Create ABC from trait
MyABC = abc_for(trait)

# Use with isinstance
isinstance(obj, MyABC)

Method Checking

from duckdantic import MethodSpec, methods_satisfy

methods = [
    MethodSpec("method1", params=[int, str], returns=bool),
    MethodSpec("method2", params=[], returns=None),
]

methods_satisfy(obj, methods)

Set Operations

from duckdantic import union, intersect, minus

# Combine traits
combined = union(trait1, trait2)
overlap = intersect(trait1, trait2)
reduced = minus(trait1, ["field_to_remove"])

Module Organization

duckdantic/
├── __init__.py          # Main exports
├── traits.py            # TraitSpec, FieldSpec
├── match.py             # satisfies, explain
├── models.py            # Duck, DuckModel, DuckType
├── policy.py            # TypeCompatPolicy, AliasMode
├── normalize.py         # Field normalization
├── compare.py           # Trait comparison
├── algebra.py           # Set operations
├── cache.py             # Performance optimization
├── adapters/
│   └── abc.py          # ABC integration
├── build/
│   └── methods.py      # Method checking
└── providers/          # Field extraction
    ├── base.py         # Provider protocol
    ├── pydantic_v2.py  # Pydantic support
    ├── dataclass.py    # Dataclass support
    ├── typeddict.py    # TypedDict support
    └── ...             # Other providers

Type Exports

All main types are exported from the top-level module:

from duckdantic import (
    # Specifications
    TraitSpec,
    FieldSpec,
    MethodSpec,

    # Duck API
    Duck,
    DuckType,
    DuckModel,
    DuckRootModel,

    # Functions
    satisfies,
    explain,
    is_duck_of,
    as_duck,

    # ABC Integration
    abc_for,
    duckisinstance,
    duckissubclass,

    # Method Checking
    methods_satisfy,
    methods_explain,

    # Set Operations
    union,
    intersect,
    minus,

    # Comparison
    compare_traits,
    TraitRelation,

    # Policies
    TypeCompatPolicy,
    POLICY_PRAGMATIC,
    AliasMode,

    # Field Views
    FieldView,
    FieldOrigin,
    FieldAliasSet,

    # Utilities
    normalize_fields,
    normalize_fields_cached,
    clear_cache,
    get_cache_stats,

    # Registry
    TraitRegistry,
)