class Foo(Base): DB_TABLE = 'foos' abc = INT( choices=XEnum( qw('value label title'), A=(1, 'AA', 'aaa'), B=(2, 'BB', 'bbb'), C=(4, 'CC', 'ccc'), ), multiple=True, default=3, null=True, ) efg = INT(choices={ 1: 'ONE', 2: 'TWO', 4: 'FOUR' }, multiple=True, default=2, null=True) xyz = VARCHAR(choices=XEnum(X='x', Y='y', Z='z'), default='x', null=True) flag = BOOL(choices={ True: 'ON', False: 'OFF' }, default=True, null=True)
class Bar(Base): DB_INDEXES = ( dict(prefix='UNIQUE', on=('foo_id', 'rad')), ) DB_TABLE = 'bars' id = INT(auto_increment=True, primary_key=True) foo_id = BELONGS_TO(Foo) created_by = BELONGS_TO(User) created_at = DATETIME(default=NOW) updated_by = BELONGS_TO(User) updated_at = DATETIME(default=NOW) lock_version = INT(default=1) name = VARCHAR(default='?', unique=True, blank=False) chks = INT(choices=XEnum(A=1, B=2, C=4), multiple=True) rad = BOOL(choices={True: 'ON', False: 'OFF'})
class Baz(Base): DB_TABLE = 'bazs' id = INT(primary_key=True) bar_id = BELONGS_TO(Bar) baz = VARCHAR() is_last = BOOL()
class Foo(Base): DB_TABLE = 'foos' c1 = INT() c2 = BOOL() c3 = DATE() c4 = DATETIME() c5 = VARCHAR() c6 = VARCHAR(null=True, blank=False) c7 = TEXT(null=True, validate=dict(re=r'\Ax')) c8 = BLOB(null=True)
class Bar(Base): DB_TABLE = 'bars' id = INT(primary_key=True) foo_id = BELONGS_TO(Foo) bar = VARCHAR() bazs = HasMany('Baz', 'bar_id', order_by='id') bar2 = HasOne('Bar2') last_baz = HasOne('Baz', lambda q, r: q.where(bar_id=r.id, is_last=True))
class E3(Base): DB_TABLE = 'xs' abc = INT(choices={1: 'AA', 3: 'BB'}, multiple=True)
class E2(Base): DB_TABLE = 'xs' abc = INT(choices=XEnum( A=(1, 'AA'), B=(3, 'BB'), ), multiple=True)
class Bar(Base): DB_TABLE = 'bars' id = INT(auto_increment=True, primary_key=True) foo_id = BELONGS_TO(Foo)
class Foo(Base): DB_TABLE = 'foos' id = INT(auto_increment=True, primary_key=True)
def test_Column(): class Base(model.Model): DB = database.Database() class Foo(Base): DB_TABLE = 'foos' id = INT(auto_increment=True, primary_key=True) name = VARCHAR() # __get__ assert '%r' % Foo.id == 'Foo.id' assert '%r' % Foo.name == 'Foo.name' foo = Foo() assert foo.id is None assert 'id' not in foo.__dict__ assert foo.name is None foo.id = 101 assert foo.id == 101 assert foo.__dict__['id'] == 101 foo = instantiate(Foo, id=100, name='foo') assert set(foo.__dict__) == {'.k2i', '.dbvs'} assert foo.id == 100 assert foo.name == 'foo' assert set(foo.__dict__) == {'.k2i', '.dbvs'} foo = instantiate(Foo) with pytest.raises(ColumnNotLoaded): foo.id cnt = [0] def db2py(v): cnt[0] += 1 return v + 1 Foo.id.db2py = db2py foo = instantiate(Foo, id=100) assert cnt == [0] assert foo.id == 101 assert cnt == [1] assert 'id' in foo.__dict__ assert foo.id == 101 assert cnt == [1] foo = instantiate(Foo, id=100) foo.id = 10 assert 'id' in foo.__dict__ assert foo.id == 10 assert cnt == [1] Foo.id.db2py = None # __init__ with pytest.raises(TypeError): INT(foo=1) # _in_ foo = Foo() assert 'id' not in foo foo.id = 100 assert 'id' in foo foo = instantiate(Foo, id=100) assert 'id' in foo # is_changed foo = Foo() assert not foo.is_changed() assert not foo.is_changed('id') assert foo.__dict__ == {} foo.id = 10 foo.name = 'f' assert foo.is_changed() assert foo.is_changed(txn={}) == dict(id=10, name='f') foo = instantiate(Foo, id=10) assert not foo.is_changed() foo.id = 10 assert not foo.is_changed() foo.id = 11 assert foo.is_changed() foo.name = 'f' assert foo.is_changed(txn={}) == dict(id=11, name='f') Foo.id.py2db = lambda x: x + 1 assert foo.is_changed('id', txn={}) == {'id': 12} assert foo.id == 11 Foo.id.py2db = None class Bar(Base): DB_TABLE = 'bars' foo_id = BELONGS_TO(Foo) foo = instantiate(Foo, id=100, name='foo') assert set(foo.__dict__) == {'.k2i', '.dbvs'} assert foo.id == 100 assert foo.name == 'foo' assert set(foo.__dict__) == {'.k2i', '.dbvs', 'id'} foo = Foo() bar = Bar(foo=foo) assert bar.is_changed(txn={}) == dict(foo_id=None) foo.id = 1 assert bar.is_changed(txn={}) == dict(foo_id=1) # to_be_valid assert not Foo().is_valid() assert Foo(name='?').is_valid() Foo.id.auto_increment = False assert not Foo(name='?').is_valid() assert Foo(id=1, name='?').is_valid() assert not Foo(id=1).is_valid() Foo.name.validate['nn'] = False assert Foo(id=1).is_valid() foo = Foo.instantiate({}, (), None, None) assert foo.is_valid() foo.id = None assert not foo.is_valid() Foo.id.auto_increment = True Foo.name.validate['nn'] = True assert Foo.ddl_sqls() == [ "CREATE TABLE foos (\n" " id INT NOT NULL PRIMARY KEY,\n" " name VARCHAR(255) NOT NULL\n)" ]
class Foo(Base): DB_TABLE = 'foos' id = INT(primary_key=True) foo = VARCHAR() bars = HasMany('Bar', order_by=('id', ))
class User(Base): DB_TABLE = 'users' id = INT(auto_increment=True, primary_key=True) name = VARCHAR()
class Foo(Base): DB_TABLE = 'foos' id = INT(primary_key=True) foo = VARCHAR()