turns out we want populate_defaults to happen in __init__, fix so things work right

This commit is contained in:
Noah Levitt 2017-03-07 17:46:48 -08:00
parent 3fd2e5cf60
commit 7b17ed1057
3 changed files with 11 additions and 11 deletions

View File

@ -164,12 +164,10 @@ class Document(dict, object):
''' '''
if pk is None: if pk is None:
return None return None
doc = cls(rr) d = rr.table(cls.table).get(pk).run()
doc[doc.pk_field] = pk if d is None:
try:
doc.refresh()
except KeyError:
return None return None
doc = cls(rr, d)
return doc return doc
@classmethod @classmethod
@ -200,8 +198,9 @@ class Document(dict, object):
dict.__setattr__(self, 'rr', rr) dict.__setattr__(self, 'rr', rr)
self._pk = None self._pk = None
self._clear_updates() self._clear_updates()
for k in d: for k in d or {}:
self[k] = watch(d[k], callback=self._updated, field=k) self[k] = watch(d[k], callback=self._updated, field=k)
self.populate_defaults()
def _clear_updates(self): def _clear_updates(self):
self._updates = {} self._updates = {}
@ -293,7 +292,6 @@ class Document(dict, object):
touched. touched.
''' '''
should_insert = False should_insert = False
self.populate_defaults()
try: try:
self[self.pk_field] # raises KeyError if missing self[self.pk_field] # raises KeyError if missing
if self._updates: if self._updates:

View File

@ -3,7 +3,7 @@ import codecs
setuptools.setup( setuptools.setup(
name='doublethink', name='doublethink',
version='0.2.0.dev70', version='0.2.0.dev71',
packages=['doublethink'], packages=['doublethink'],
classifiers=[ classifiers=[
'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 2.7',

View File

@ -287,14 +287,16 @@ def test_default_values(rr):
Person.table_ensure(rr) Person.table_ensure(rr)
p = Person(rr, {}) p = Person(rr, {})
assert not "age" in p
assert p.age is None
p.save()
assert p.age == 0 assert p.age == 0
assert not p.id
p.save()
assert p.id assert p.id
assert p.age == 0
p.age = 50 p.age = 50
assert p.age == 50
p.save() p.save()
assert p.age == 50
q = Person.load(rr, p.id) q = Person.load(rr, p.id)
assert q.age == 50 assert q.age == 50