Source code for asyncqlio.orm.inspection
"""
Inspection module - contains utilities for inspecting Table objects and Row objects.
"""
import typing
from asyncqlio.orm import session as md_session
from asyncqlio.orm.schema import column as md_column, table as md_table
[docs]def get_row_session(row: 'md_table.Table') -> 'md_session.Session':
"""
Gets the :class:`.Session` associated with a :class:`.TableRow`.
:param row: The :class:`.Table` instance to inspect.
"""
return row._session
[docs]def get_row_history(row: 'md_table.Table') \
-> 'typing.Dict[md_column.Column, typing.Dict[str, typing.Any]]':
"""
Gets the history for the specified row.
This returns a dict, indexed by Column, with values being another dict with `old` and `new` keys
that represent the old and new values of the item.
"""
d = {}
for column in row.table.iter_columns():
old_value = row.get_old_value(column)
new_value = row.get_column_value(column, return_default=False)
d[column] = {"old": old_value, "new": new_value}
return d
[docs]def get_pk(row: 'md_table.Table', as_tuple: bool = True):
"""
Gets the primary key for a Table row.
:param row: The :class:`.Table` instance to extract the PK from.
:param as_tuple: Should this PK always be returned as a tuple?
"""
pk = row.primary_key
if as_tuple and not isinstance(pk, tuple):
return pk,
return pk
# marker methods
def _set_mangled(row: 'md_table.Table', name: str, mark: typing.Any):
setattr(row, "_Table__{}".format(name), mark)
return row
def _get_mangled(row: 'md_table.Table', name: str):
return getattr(row, "_Table__{}".format(name))