Skip to content

type_bridge.typed.session

session

Native descriptor/session ownership for owner-aware typed variables.

QuerySession

QuerySession(connection)

Own one native match lineage and its real connection context.

Source code in type_bridge/typed/session.py
def __init__(self, connection: Database | TransactionContext) -> None:
    if not isinstance(connection, (Database, TransactionContext)):
        raise TypeError("QuerySession requires a Database or TransactionContext")
    self.__initialize(connection)

var

var(model: type[ModelT], *, subtypes: Literal[False] = False) -> BoundVar[ModelT]
var(model: type[ModelT], *, subtypes: Literal[True]) -> BoundVar[ModelT]
var(model, *, subtypes=False)

Create a fresh exact or subtype-inclusive native variable.

Source code in type_bridge/typed/session.py
def var(self, model: type[ModelT], *, subtypes: bool = False) -> BoundVar[ModelT]:
    """Create a fresh exact or subtype-inclusive native variable."""
    if not isinstance(model, type) or not issubclass(model, TypeDBType):
        raise TypeError("QuerySession.var requires an Entity or Relation model class")
    if model in _FRAMEWORK_MODEL_ROOTS:
        raise TypeError("QuerySession.var requires a declared Entity or Relation model class")
    if model.is_base():
        raise TypeError("QuerySession.var cannot bind a Python-only base=True model class")
    registered: set[type[TypeDBType]] = set()
    subtype_roots: set[type[TypeDBType]] = set()
    self._register_descriptor_closure(model, registered, subtype_roots)
    if subtypes:
        self._register_loaded_subtypes(model, registered, subtype_roots)
    type_name = model.get_type_name()
    handle = self.__handle.subtypes(type_name) if subtypes else self.__handle.exact(type_name)
    return BoundVar._from_native(handle, model, type_name)

exact

exact(model)

Create a fresh exact-match variable for model.

Source code in type_bridge/typed/session.py
def exact(self, model: type[ModelT]) -> BoundVar[ModelT]:
    """Create a fresh exact-match variable for ``model``."""
    return self.var(model)

subtypes

subtypes(model)

Create a fresh subtype-inclusive variable for model.

Source code in type_bridge/typed/session.py
def subtypes(self, model: type[ModelT]) -> BoundVar[ModelT]:
    """Create a fresh subtype-inclusive variable for ``model``."""
    return self.var(model, subtypes=True)

query

query(selection1: Selection[T1]) -> Query[T1]
query(selection1: Selection[T1], selection2: Selection[T2]) -> Query[T1, T2]
query(selection1: Selection[T1], selection2: Selection[T2], selection3: Selection[T3]) -> Query[T1, T2, T3]
query(selection1: Selection[T1], selection2: Selection[T2], selection3: Selection[T3], selection4: Selection[T4]) -> Query[T1, T2, T3, T4]
query(selection1: Selection[T1], selection2: Selection[T2], selection3: Selection[T3], selection4: Selection[T4], selection5: Selection[T5]) -> Query[T1, T2, T3, T4, T5]
query(selection1: Selection[T1], selection2: Selection[T2], selection3: Selection[T3], selection4: Selection[T4], selection5: Selection[T5], selection6: Selection[T6]) -> Query[T1, T2, T3, T4, T5, T6]
query(selection1: Selection[T1], selection2: Selection[T2], selection3: Selection[T3], selection4: Selection[T4], selection5: Selection[T5], selection6: Selection[T6], selection7: Selection[T7]) -> Query[T1, T2, T3, T4, T5, T6, T7]
query(selection1: Selection[T1], selection2: Selection[T2], selection3: Selection[T3], selection4: Selection[T4], selection5: Selection[T5], selection6: Selection[T6], selection7: Selection[T7], selection8: Selection[T8]) -> Query[T1, T2, T3, T4, T5, T6, T7, T8]
query(selection1: Selection[T1], selection2: Selection[T2], selection3: Selection[T3], selection4: Selection[T4], selection5: Selection[T5], selection6: Selection[T6], selection7: Selection[T7], selection8: Selection[T8], selection9: Selection[T9]) -> Query[T1, T2, T3, T4, T5, T6, T7, T8, T9]
query(selection1: Selection[T1], selection2: Selection[T2], selection3: Selection[T3], selection4: Selection[T4], selection5: Selection[T5], selection6: Selection[T6], selection7: Selection[T7], selection8: Selection[T8], selection9: Selection[T9], selection10: Selection[T10]) -> Query[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]
query(selection1: Selection[T1], selection2: Selection[T2], selection3: Selection[T3], selection4: Selection[T4], selection5: Selection[T5], selection6: Selection[T6], selection7: Selection[T7], selection8: Selection[T8], selection9: Selection[T9], selection10: Selection[T10], selection11: Selection[T11]) -> Query[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11]
query(selection1: Selection[T1], selection2: Selection[T2], selection3: Selection[T3], selection4: Selection[T4], selection5: Selection[T5], selection6: Selection[T6], selection7: Selection[T7], selection8: Selection[T8], selection9: Selection[T9], selection10: Selection[T10], selection11: Selection[T11], selection12: Selection[T12]) -> Query[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12]
query(selection1: Selection[T1], selection2: Selection[T2], selection3: Selection[T3], selection4: Selection[T4], selection5: Selection[T5], selection6: Selection[T6], selection7: Selection[T7], selection8: Selection[T8], selection9: Selection[T9], selection10: Selection[T10], selection11: Selection[T11], selection12: Selection[T12], selection13: Selection[T13]) -> Query[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13]
query(selection1: Selection[T1], selection2: Selection[T2], selection3: Selection[T3], selection4: Selection[T4], selection5: Selection[T5], selection6: Selection[T6], selection7: Selection[T7], selection8: Selection[T8], selection9: Selection[T9], selection10: Selection[T10], selection11: Selection[T11], selection12: Selection[T12], selection13: Selection[T13], selection14: Selection[T14]) -> Query[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14]
query(selection1: Selection[T1], selection2: Selection[T2], selection3: Selection[T3], selection4: Selection[T4], selection5: Selection[T5], selection6: Selection[T6], selection7: Selection[T7], selection8: Selection[T8], selection9: Selection[T9], selection10: Selection[T10], selection11: Selection[T11], selection12: Selection[T12], selection13: Selection[T13], selection14: Selection[T14], selection15: Selection[T15]) -> Query[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15]
query(selection1: Selection[T1], selection2: Selection[T2], selection3: Selection[T3], selection4: Selection[T4], selection5: Selection[T5], selection6: Selection[T6], selection7: Selection[T7], selection8: Selection[T8], selection9: Selection[T9], selection10: Selection[T10], selection11: Selection[T11], selection12: Selection[T12], selection13: Selection[T13], selection14: Selection[T14], selection15: Selection[T15], selection16: Selection[T16]) -> Query[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16]
query(*selections)

Create one native positional query with between 1 and 16 slots.

Source code in type_bridge/typed/session.py
def query(self, *selections: Selection[object]) -> object:
    """Create one native positional query with between 1 and 16 slots."""
    if any(not isinstance(selection, Selection) for selection in selections):
        raise TypeError("QuerySession.query requires Selection values")
    shape = self.__handle.positional(
        [selection._native_selection() for selection in selections]
    )
    handle = self.__handle.query(shape)
    return Query._from_native(
        handle,
        self.__registry,
        self.__connection,
        self.__model_view,
    )

query_as

query_as(declaration, /, **selections)

Create a native named shape checked against one immutable row type.

Source code in type_bridge/typed/session.py
def query_as[DeclaredRowT](
    self,
    declaration: type[DeclaredRowT],
    /,
    **selections: Selection[object],
) -> Query[DeclaredRowT]:
    """Create a native named shape checked against one immutable row type."""
    declarations = _named_declaration(declaration)
    for selection in selections.values():
        if not isinstance(selection, Selection):
            raise TypeError("QuerySession.query_as values must be Selection values")

    names = list(selections)
    selected = list(selections.values())
    native_declarations = [
        (name, type_name, collection) for name, type_name, collection, _ in declarations
    ]
    shape = self.__handle.named_checked(
        native_declarations,
        names,
        [selection._native_selection() for selection in selected],
    )
    _validate_named_selection_models(declarations, selected)
    handle = self.__handle.query(shape)
    return Query._from_native(
        handle,
        self.__registry,
        self.__connection,
        self.__model_view,
        declaration,
    )