X Tutup
Skip to content

Commit 02002a4

Browse files
committed
add _primary_field and _key support, so that you can use other reference field to connect other Model but not only id field
1 parent b7cc104 commit 02002a4

File tree

3 files changed

+185
-92
lines changed

3 files changed

+185
-92
lines changed

test/test_multidb.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,8 @@ def test_set_session():
257257
>>> app = make_simple_application(project_dir='.')
258258
>>> import uliweb.orm as orm
259259
>>> s = Session('c')
260-
>>> set_session('default', s)
260+
>>> set_session(s, 'default') # doctest: +ELLIPSIS
261+
<uliweb.orm.Session object at ...>
261262
>>> Blog1 = get_model('blog')
262263
>>> print 'blog1', Blog1, Blog1.table, Blog1.tablename, Blog1.get_engine_name(), Blog1.get_session()
263264
blog1 <class 'blog.models.Blog'> blog blog default <Session engine_name:c, auto_transaction=None, auto_close=True>

test/test_orm.py

Lines changed: 46 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1394,21 +1394,21 @@ def test_many2many_save_and_update():
13941394
[]
13951395
>>> g1.users = ['limodou', 'test']
13961396
>>> print Group.users.get_value_for_datastore(g1, cached=True)
1397-
['limodou', 'test']
1397+
[u'limodou', u'test']
13981398
>>> g1.save()
13991399
True
14001400
>>> print Group.users.get_value_for_datastore(g1, cached=True)
1401-
['limodou', 'test']
1401+
[u'limodou', u'test']
14021402
>>> g2 = Group(name='perl', users=['user'])
14031403
>>> g2.save()
14041404
True
14051405
>>> print Group.users.get_value_for_datastore(g2, cached=True)
1406-
['user']
1406+
[u'user']
14071407
>>> g2.users = ['limodou']
14081408
>>> g2.save()
14091409
True
14101410
>>> print Group.users.get_value_for_datastore(g2, cached=True)
1411-
['limodou']
1411+
[u'limodou']
14121412
>>> print g2.users.ids()
14131413
[u'limodou']
14141414
>>> print Group.users.get_value_for_datastore(g2)
@@ -2365,12 +2365,13 @@ def test_reflect_model():
23652365
>>> meta = MetaData()
23662366
>>> table = Table('test', meta)
23672367
>>> insp.reflecttable(table, None)
2368-
>>> print reflect_model(table)
2368+
>>> print reflect_model(table) # doctest: +REPORT_UDIFF
23692369
class Test(Model):
23702370
\"\"\"
23712371
Description:
23722372
\"\"\"
23732373
<BLANKLINE>
2374+
__tablename__ = 'test'
23742375
username = Field(str, max_length=255, index=True, unique=1)
23752376
email = Field(str, max_length=255, server_default='')
23762377
year = Field(int, server_default=20)
@@ -2390,7 +2391,7 @@ class Test(Model):
23902391
@classmethod
23912392
def OnInit(cls):
23922393
Index(test_idx, cls.c.username, cls.c.email, unique=True)
2393-
"""
2394+
"""
23942395

23952396
def test_reference_server_default():
23962397
"""
@@ -2456,7 +2457,9 @@ def test_primary_key():
24562457
... year = Field(int)
24572458
... version = Field(int)
24582459
>>> Test.properties.keys()
2459-
['username', 'version', 'user_id', 'id', 'year']
2460+
['username', 'version', 'user_id', 'year']
2461+
>>> print Test._key
2462+
<IntegerProperty 'type':<type 'int'>, 'verbose_name':None, 'name':'user_id', 'fieldname':'user_id', 'default':0, 'required':False, 'validator':[], 'chocies':None, 'max_length':None, 'kwargs':{'autoincrement': True, 'primary_key': True}>
24602463
"""
24612464

24622465
def test_get_object():
@@ -2665,7 +2668,7 @@ def test_uuid_and_new_fields():
26652668
>>> db.metadata.drop_all()
26662669
>>> class User(Model):
26672670
... __tablename__ = 'test_user'
2668-
... id = Field(UUID, unique=True)
2671+
... id = Field(UUID, primary_key=True, unique=True)
26692672
... sid = Field(UUID_B)
26702673
... username = Field(str, server_default='')
26712674
... year = Field(SMALLINT, server_default='0')
@@ -2677,7 +2680,7 @@ def test_uuid_and_new_fields():
26772680
>>> t = User.table
26782681
>>> x = str(CreateTable(t).compile(dialect=engine.dialect)).strip()
26792682
>>> print x.replace('\\t', '').replace('\\n', '')
2680-
CREATE TABLE test_user (id VARCHAR(32), sid VARBINARY(16), username VARCHAR(255) DEFAULT '', year SMALLINT DEFAULT '0', UNIQUE (id))
2683+
CREATE TABLE test_user (id VARCHAR(32), sid VARBINARY(16), username VARCHAR(255) DEFAULT '', year SMALLINT DEFAULT '0', PRIMARY KEY (id), UNIQUE (id))
26812684
>>> x = str(CreateTable(Group.table).compile(dialect=engine.dialect)).strip()
26822685
>>> print x.replace('\\t', '').replace('\\n', '')
26832686
CREATE TABLE test_group (name VARCHAR(20), user VARCHAR(32), id INTEGER NOT NULL, PRIMARY KEY (id))
@@ -2726,6 +2729,28 @@ def test_save_file():
27262729
<BLANKLINE>
27272730
"""
27282731

2732+
def test_derive():
2733+
"""
2734+
>>> from uliweb import orm
2735+
>>> db = get_connection('sqlite://')
2736+
>>> db.metadata.drop_all()
2737+
>>> set_auto_create(False)
2738+
>>> orm.__models__ = {}
2739+
>>> from sqlalchemy import *
2740+
>>> class User(Model):
2741+
... _primary_field = 'username'
2742+
... username = Field(unicode)
2743+
... year = Field(int, default=30)
2744+
... birth = Field(datetime.date)
2745+
>>> class User1(User):
2746+
... age = Field(int)
2747+
>>> print User1.properties.keys()
2748+
['username', 'age', 'birth', 'year']
2749+
>>> print User1._primary_field
2750+
username
2751+
"""
2752+
2753+
27292754
# if __name__ == '__main__':
27302755
# from sqlalchemy.schema import CreateTable, CreateIndex
27312756
# db = get_connection('sqlite://')
@@ -2756,16 +2781,18 @@ def test_save_file():
27562781
# print repr(g2.user)
27572782

27582783
if __name__ == '__main__':
2784+
from uliweb import orm
27592785
db = get_connection('sqlite://')
2760-
#db.echo = True
27612786
db.metadata.drop_all()
2762-
db.metadata.clear()
2787+
set_auto_create(False)
2788+
orm.__models__ = {}
2789+
from sqlalchemy import *
27632790
class User(Model):
2764-
username = Field(str, max_length=40)
2765-
memo = Field(JSON, default={})
2766-
a = User(username='limodou', memo={'age':30})
2767-
a.save()
2768-
2769-
print a.memo
2770-
b = User.get(1)
2771-
print b.memo
2791+
_primary_field = 'username'
2792+
username = Field(unicode)
2793+
year = Field(int, default=30)
2794+
birth = Field(datetime.date)
2795+
class User1(User):
2796+
age = Field(int)
2797+
print User1.properties.keys()
2798+
print User1._primary_field

0 commit comments

Comments
 (0)
X Tutup