class I(dobject): s = datt(int) n = datt(int) x = datt(int) __dobject_key__ =[s, 'n']
def test_subst_reshape(): class A(dobject): a = datt(int) b = datt(int) c = datt(int) __dobject_key__ = [a, b] A1 = A._re(_subst=dict(b='s'), _name='A1') with pytest.raises(ValueError): a1 = A1(a=1, b=2, c=3) a1 = A1(a=1, s=2, c=3) assert a1.a == 1 and a1.s == 2 and a1.c == 3 A1 = A._re(_subst=dict(b='s'), b=datt(float), _name='A1') a1 = A1(A(a=1, b=2, c=3)) print(a1) assert a1.a == 1 and a1.s == 2 and a1.b is None and a1.c == 3 # switch a = A(a=1, b=2, c=3) A2 = A._re(_subst=dict(b='c', c='b'), b=datt(float), _name='A2') a = A(a=4, b=5, c=6) a2 = A2(a) assert a.b == 5 and a.c == 6 assert a2.b == 6 and a2.c == 5
def test_subst_reshape(): class A(dobject): a = datt(int) b = datt(int) c = datt(int) __dobject_key__ = [a, b] A1 = A._re(_subst = dict( b = 's'), _name='A1') with pytest.raises(ValueError): a1 = A1(a=1, b=2, c=3) a1 = A1(a=1, s=2, c=3) assert a1.a == 1 and a1.s == 2 and a1.c == 3 A1 = A._re(_subst = dict(b = 's'), b = datt(float), _name = 'A1') a1 = A1(A(a=1, b=2, c=3)) print(a1) assert a1.a == 1 and a1.s == 2 and a1.b is None and a1.c == 3 # switch a = A(a=1, b=2, c=3) A2 = A._re(_subst = dict(b = 'c', c='b'), b = datt(float), _name = 'A2') a = A(a=4, b=5, c=6) a2 = A2(a) assert a.b == 5 and a.c == 6 assert a2.b == 6 and a2.c == 5
class t_b(dtable): a = datt(int) b = datt(int) c = datt(int) d = datt(int) __dobject_key__ = [a, b]
class A(dobject): a = datt(int) b = datt(int) c = datt(int) d = datt(int) __dobject_key__ = [a, b]
class A(dobject): a = datt(int) b = datt(str) c = datt(float) d = datt(Decimal) e = datt(datetime) __dobject_key__ = [a, b]
async def test_recall2(db, module_dtables): ASet = dset(t_b, _key=dict(a=datt(int))) # define a key of dset ds1 = ASet(a=1) ds1 += [t_b(b=12, c=13, d= 14), t_b(b=22, c=23, d=24)] await dmerge(ds1) db << 'SELECT 1 as sn FROM t_b' await db ds2 = ASet(a=2) print(333, ds2) ds2 += [t_b(b=32, c=33, d= 34), t_b(b=42, c=43, d=44)] await dmerge(ds2) ds1 = await drecall(ASet(a=1)) assert len(ds1) == 2 ds1 += [t_b(b=12, c=113, d=114), t_b(b=62, c=63, d=64)] del ds1[t_b(b=22)] with pytest.raises(KeyError): del ds1[t_b(b=55)] ds0 = await drecall(ASet(a=1)) print("O: ", ds0) print("N: ", ds1) await dmerge(ds1, ds0) ds2 = await drecall(ASet(a=1)) assert ds2[0].c == ds1[0].c assert ds2[1].c == ds1[1].c
def test_new_object(): class A(dobject): a = datt(int) b = datt(str) c = datt(float) d = datt(Decimal) e = datt(datetime) __dobject_key__ = [a, b] A1 = A._re('a') assert len(A1.__dobject_key__) == 1 and len(A1.__dobject_att__) == 0 with pytest.raises(ValueError) as exc: A1 = A._re(_ignore=['a', 'c'], _key=['c', 'e']) # c conflict! A1 = A._re(_ignore=['a', 'c'], _key=['b', 'e']) A2 = A._re(c=datt(date, default=date(2015,7,29))) assert A.c.type == float and A2.c.type == date A3 = A._re('a', 'b', 'c', _subst=dict(a='s')) assert tuple(A3.__dobject_key__) == ('s', 'b') assert tuple(A3.__dobject_att__) == ('c',) print(A3(s=1, b=2, c=3))
def test_dset_declaration1(): class A(dobject): a = datt(int) b = datt(int) __dobject_key__ = [a] class B(dobject): x = datt(int) y = datt(int) __dobject_key__ = [x] # A <>---> B BSet = dset(B, _key=A.a) assert tuple(BSet.__dobject_key__) == ('a',) assert BSet.__dominion_class__ == A assert BSet.a != A.a assert BSet.a.owner_class == BSet BSet = dset(B, _dominion=A, _key=['a']) assert tuple(BSet.__dobject_key__) == ('a',) assert BSet.__dominion_class__ == A assert BSet.a != A.a assert BSet.a.owner_class == BSet with pytest.raises(ValueError): BSet = dset(B, _key=['a']) # the attribute a is undefined BSet = dset(B, _key=dict(a=datt(int))) assert tuple(BSet.__dobject_key__) == ('a',) assert BSet.__dominion_class__ is None assert BSet.a != A.a assert BSet.a.owner_class == BSet
def test_dset_declaration1(): class A(dobject): a = datt(int) b = datt(int) __dobject_key__ = [a] class B(dobject): x = datt(int) y = datt(int) __dobject_key__ = [x] # A <>---> B BSet = dset(B, _key=A.a) assert tuple(BSet.__dobject_key__) == ('a', ) assert BSet.__dominion_class__ == A assert BSet.a != A.a assert BSet.a.owner_class == BSet BSet = dset(B, _dominion=A, _key=['a']) assert tuple(BSet.__dobject_key__) == ('a', ) assert BSet.__dominion_class__ == A assert BSet.a != A.a assert BSet.a.owner_class == BSet with pytest.raises(ValueError): BSet = dset(B, _key=['a']) # the attribute a is undefined BSet = dset(B, _key=dict(a=datt(int))) assert tuple(BSet.__dobject_key__) == ('a', ) assert BSet.__dominion_class__ is None assert BSet.a != A.a assert BSet.a.owner_class == BSet
def case2(page: DPage) -> DSet[test_a]: print(3444, page) page = DPage(start=3, limit=5, sortable='+sn,-line') ASet = dset(test_a, _key=dict(sn=datt(int))) ds1 = ASet(sn=101, _page=page) for i in range(3, 8): ds1 += [test_a(line=i, name='L%03d' % i)] return ds1
def case2(page: DPage) -> DSet[test_a] : print(3444, page) page = DPage(start=3, limit=5, sortable='+sn,-line') ASet = dset(test_a, _key=dict(sn=datt(int))) ds1 = ASet(sn=101, _page=page) for i in range(3,8): ds1 += [test_a(line=i, name='L%03d' % i)] return ds1
def test_recall1(): ASet = dset(t_b, _key=dict(a=datt(int))) # define a key of dset ds1 = ASet(a=11) ds1 += [t_b(b=12, c=13, d= 14), t_b(b=22, c=23, d=24)] dmerge(ds1) r1 = drecall(t_b(a=11, b=12)) assert r1.a == 11 and r1.b == 12 and r1.c == 13 r1 = drecall(t_b(a=99, b=12)) # no found and return empty dobject assert r1 is not None and not bool(r1)
def test_recall1(): ASet = dset(t_b, _key=dict(a=datt(int))) # define a key of dset ds1 = ASet(a=11) ds1 += [t_b(b=12, c=13, d=14), t_b(b=22, c=23, d=24)] dmerge(ds1) r1 = drecall(t_b(a=11, b=12)) assert r1.a == 11 and r1.b == 12 and r1.c == 13 r1 = drecall(t_b(a=99, b=12)) # no found and return empty dobject assert r1 is not None and not bool(r1)
class t_a(dtable): a = datt(int) b = datt(int) c = datt(int, doc="should be constrained") d = datt(int) e = datt(int, doc="should be constrained") f = datt(int) __dobject_key__ = [a, b]
def test_dset_key_error(): ASet = dset(t_b, _key=dict(a=datt(int))) # define a key of dset print() ds1 = ASet(a=1) ds1._add(t_b(b=12, c=13, d= 14)) ds1._add(t_b(b=22, c=23, d=24)) print('-------------------') ds2 = ASet(a=2) ds2._add(t_b(b=32, c=33, d= 34)) ds2._add(t_b(b=42, c=43, d=44)) assert ds2[0].a == 2 print(ds1) print(ds2)
def test_recall2(): ASet = dset(t_b, _key=dict(a=datt(int))) # define a key of dset ds1 = ASet(a=1) ds1 += [t_b(b=12, c=13, d=14), t_b(b=22, c=23, d=24)] dmerge(ds1) ds2 = ASet(a=2) ds2 += [t_b(b=32, c=33, d=34), t_b(b=42, c=43, d=44)] dmerge(ds2) ds1 = drecall(ASet(a=1)) ds1 += [t_b(b=12, c=113, d=114), t_b(b=62, c=63, d=64)] del ds1[t_b(b=22)] with pytest.raises(KeyError): del ds1[t_b(b=55)] ds0 = drecall(ASet(a=1)) print("O: ", ds0) print("N: ", ds1) dmerge(ds1, ds0)
def test_recall2(): ASet = dset(t_b, _key=dict(a=datt(int))) # define a key of dset ds1 = ASet(a=1) ds1 += [t_b(b=12, c=13, d= 14), t_b(b=22, c=23, d=24)] dmerge(ds1) ds2 = ASet(a=2) ds2 += [t_b(b=32, c=33, d= 34), t_b(b=42, c=43, d=44)] dmerge(ds2) ds1 = drecall(ASet(a=1)) ds1 += [t_b(b=12, c=113, d=114), t_b(b=62, c=63, d=64)] del ds1[t_b(b=22)] with pytest.raises(KeyError): del ds1[t_b(b=55)] ds0 = drecall(ASet(a=1)) print("O: ", ds0) print("N: ", ds1) dmerge(ds1, ds0)
def test_case2(): ASet = dset(test_a, _key=dict(sn=datt(int))) ds1 = ASet(sn=101) for i in range(10): ds1 += [test_a(line=i, name='L%03d' % i)] ds1 = ASet(sn=202) for i in range(10): ds1 += [test_a(line=i, name='L%03d' % i)] dmerge(ds1) page = DPage(start=2, limit=3, sortable='+sn,-line') ds1 = ASet(sn=101, _page=page) ds2 = drecall(ds1) print('ds: ', ds2) assert len(ds2) == 3 assert ds2[test_a(line=7)].line == 7 assert not ds2[test_a(line=4)] assert not ds2[test_a(line=8)]
def test_new_object(): class A(dobject): a = datt(int) b = datt(str) c = datt(float) d = datt(Decimal) e = datt(datetime) __dobject_key__ = [a, b] A1 = A._re('a') assert len(A1.__dobject_key__) == 1 and len(A1.__dobject_att__) == 0 with pytest.raises(ValueError) as exc: A1 = A._re(_ignore=['a', 'c'], _key=['c', 'e']) # c conflict! A1 = A._re(_ignore=['a', 'c'], _key=['b', 'e']) A2 = A._re(c=datt(date, default=date(2015, 7, 29))) assert A.c.type == float and A2.c.type == date A3 = A._re('a', 'b', 'c', _subst=dict(a='s')) assert tuple(A3.__dobject_key__) == ('s', 'b') assert tuple(A3.__dobject_att__) == ('c', ) print(A3(s=1, b=2, c=3))
class B(dobject): a = datt(int) # the same name with dset key x = datt(int) y = datt(int) __dobject_key__ = [x]
class A(dobject): a = datt(int) b = datt(int) c = datt(int) d = datt(int)
class B(dobject): a = datt(int) b = datt(int) __dobject_key__ = [b]
class A(dobject): sn = datt(str) name = datt(str)
class C(A, B): c = datt(int) __dobject_key__ = [c]
class B(dobject): a_sn = datt(int) line = datt(int) name = datt(str) __dobject_key__ = [a_sn, line]
class A(dobject): a_sn = datt(int) b = datt(dset(B)) __dobject_key__ = [a_sn]
class t_a(dtable): a = datt(seq_test) b = datt(int) __dobject_key__ = [a]
class A(dobject): a = datt(int) x = datt(dset(B)) __dobject_key__ = [a]
class A(dobject): a = datt(int) b = datt(int) c = datt(int, default=100) d = datt(int)
class B(dobject): a = datt(int) x = datt(int) y = datt(int) __dobject_key__ = [x]
class B(dobject): x = datt(int) y = datt(int) __dobject_key__ = x
class B(dobject): x = datt(int) y = datt(int)
class test_a(dtable): sn = datt(int) line = datt(int) name = datt(str) __dobject_key__ = [sn, line]
class Bill(dobject): sn = datt(int) __dobject_key__ = [sn] items = datt(dset(Item, sn='bill_sn'), doc="")
class t_a(dtable): a = datt(int) b = datt(array(str, dimensions=1)) __dobject_key__ = [a]
class Item(dobject): bill_sn = datt(int) line_no = datt(int) item_sn = datt(int) __dobject_key__ = [line_no]