コード例 #1
0
 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)
コード例 #2
0
 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'})
コード例 #3
0
    class Baz(Base):
        DB_TABLE = 'bazs'

        id = INT(primary_key=True)
        bar_id = BELONGS_TO(Bar)
        baz = VARCHAR()
        is_last = BOOL()
コード例 #4
0
 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)
コード例 #5
0
    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))
コード例 #6
0
 class E3(Base):
     DB_TABLE = 'xs'
     abc = INT(choices={1: 'AA', 3: 'BB'}, multiple=True)
コード例 #7
0
 class E2(Base):
     DB_TABLE = 'xs'
     abc = INT(choices=XEnum(
         A=(1, 'AA'),
         B=(3, 'BB'),
     ), multiple=True)
コード例 #8
0
 class Bar(Base):
     DB_TABLE = 'bars'
     id = INT(auto_increment=True, primary_key=True)
     foo_id = BELONGS_TO(Foo)
コード例 #9
0
 class Foo(Base):
     DB_TABLE = 'foos'
     id = INT(auto_increment=True, primary_key=True)
コード例 #10
0
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)"
    ]
コード例 #11
0
    class Foo(Base):
        DB_TABLE = 'foos'

        id = INT(primary_key=True)
        foo = VARCHAR()
        bars = HasMany('Bar', order_by=('id', ))
コード例 #12
0
 class User(Base):
     DB_TABLE = 'users'
     id = INT(auto_increment=True, primary_key=True)
     name = VARCHAR()
コード例 #13
0
    class Foo(Base):
        DB_TABLE = 'foos'

        id = INT(primary_key=True)
        foo = VARCHAR()