Common Mixin¶
This mixin provides a common set of functionality that is slightly opinionated. Here’s an example usage:
from sqlalchemy import Column, Integer
from sqlalchemy.orm import declarative_base
from mortar_sqlalchemy.mixins import Common
Base = declarative_base()
class SampleModel(Common, Base):
id = Column(Integer, primary_key=True)
value = Column(Integer)
This mixin provides:
An automatically generated table name:
>>> SampleModel.__tablename__ 'sample_model'
Equality and inequality based on comparison of the column values in the mapped object:
>>> SampleModel(id=1, value=2) == SampleModel(id=1, value=2) True >>> SampleModel(id=1, value=2) == SampleModel(id=3, value=4) False
Hashability based on the Python identity of the object:
>>> s = set() >>> s.add(SampleModel(id=1, value=2)) >>> s.add(SampleModel(id=1, value=2)) >>> s {SampleModel(id=1, value=2), SampleModel(id=1, value=2)}
String representation showing attribute names and values:
>>> str(SampleModel(id=1, value=2)) 'SampleModel(id=1, value=2)' >>> repr(SampleModel(id=3, value=4)) 'SampleModel(id=3, value=4)'
It also registers a testfixtures.compare() comparer that uses the same
equality and inequality as provided by the mixin, along with the ability to
ignore certain columns:
>>> from testfixtures import compare
>>> compare(expected=SampleModel(id=1, value=2), actual=SampleModel(id=2, value=2))
Traceback (most recent call last):
...
AssertionError: SampleModel not as expected:
same:
['value']
values differ:
'id': 1 (expected) != 2 (actual)
>>> compare(
... expected=SampleModel(id=1, value=2),
... actual=SampleModel(id=2, value=2),
... ignore_fields=['id'],
... )