tests/test_abstract_model.py
import unittestfrom uuid import uuid1 from .test_cqlalchemy import BaseTestCase def make_abstract_model(db):Line too long (98 > 79 characters) """Taken from https://datastax.github.io/python-driver/cqlengine/models.html#model-inheritance but where we want the base classes to be in separate tables """ class Pet(db.Model): __abstract__ = True # __table_name__ = 'pet' owner_id = db.columns.UUID(primary_key=True) pet_id = db.columns.UUID(primary_key=True) pet_type = db.columns.Text(discriminator_column=True) name = db.columns.Text() def eat(self, food): pass def sleep(self, time): pass class Cat(Pet): # __discriminator_value__ = 'cat' cuteness = db.columns.Float() def tear_up_couch(self): pass class Dog(Pet): # __discriminator_value__ = 'dog' fierceness = db.columns.Float() def bark_all_night(self): pass return Pet, Cat, Dog class AbstractModelTest(BaseTestCase): def test_sync_db(self): (Pet, Cat, Dog) = make_abstract_model(self.db) self.db.sync_db() mycat = Cat.create(owner_id=uuid1(), pet_id=uuid1(), name="Tiddles", cuteness=9001) self.assertTrue(isinstance(mycat, Cat)) self.assertEqual(mycat.cuteness, 9001) if __name__ == '__main__': unittest.main()