Skip to content

Commit

Permalink
Add helper to reduce base-model boilerplate per #2637
Browse files Browse the repository at this point in the history
  • Loading branch information
coleifer committed Oct 24, 2022
1 parent a769b8e commit 3ca1885
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 0 deletions.
9 changes: 9 additions & 0 deletions peewee.py
Expand Up @@ -474,6 +474,10 @@ def transaction(self, *args, **kwargs):
return _transaction(self, *args, **kwargs)
def savepoint(self):
return _savepoint(self)
@property
def Model(self):
class Meta: database = self
return type('BaseModel', (Model,), {'Meta': Meta})


class ModelDescriptor(object): pass
Expand Down Expand Up @@ -3449,6 +3453,11 @@ def bind_ctx(self, models, bind_refs=True, bind_backrefs=True):
def get_noop_select(self, ctx):
return ctx.sql(Select().columns(SQL('0')).where(SQL('0')))

@property
def Model(self):
class Meta: database = self
return type('BaseModel', (Model,), {'Meta': Meta})


def __pragma__(name):
def __get__(self):
Expand Down
21 changes: 21 additions & 0 deletions tests/db_tests.py
Expand Up @@ -921,3 +921,24 @@ def test_exception_wrapper(self):

if exc is None: raise Exception('expected integrity error not raised')
self.assertTrue(exc.orig.__module__ != 'peewee')


class TestModelPropertyHelper(BaseTestCase):
def test_model_property(self):
database = get_in_memory_db()
class M1(database.Model): pass
class M2(database.Model): pass
class CM1(M1): pass
for M in (M1, M2, CM1):
self.assertTrue(M._meta.database is database)

def test_model_property_on_proxy(self):
db = DatabaseProxy()
class M1(db.Model): pass
class M2(db.Model): pass
class CM1(M1): pass

test_db = get_in_memory_db()
db.initialize(test_db)
for M in (M1, M2, CM1):
self.assertEqual(M._meta.database.database, ':memory:')

0 comments on commit 3ca1885

Please sign in to comment.