Skip to content

ctx

A simple hashmap for working with types in a contextual manner.

TypeContext

Bases: dict

A key-value mapping which can map between forward references and real types.

__missing__

__missing__(key: TypeNode | type | ForwardRef)

Hook to handle missing type references.

Allows for sharing lookup results between forward references and real types.

Parameters:

  • key (TypeNode | type | ForwardRef) –

    The type or reference.

Source code in src/typelib/ctx.py
def __missing__(self, key: graph.TypeNode | type | refs.ForwardRef):
    """Hook to handle missing type references.

    Allows for sharing lookup results between forward references and real types.

    Args:
        key: The type or reference.
    """
    # Eager wrap in a TypeNode
    if not isinstance(key, graph.TypeNode):
        key = graph.TypeNode(type=key)
        return self[key]

    # If we missed a ForwardRef, we've already tried this, bail out.
    type = key.type
    if isinstance(type, refs.ForwardRef):
        raise KeyError(key)

    ref = refs.forwardref(
        inspection.qualname(type), module=getattr(type, "__module__", None)
    )
    node = dataclasses.replace(key, type=ref)
    return self[node]