Skip to content

Commit 6e0dcc9

Browse files
committed
fix defaults
1 parent 811f75d commit 6e0dcc9

2 files changed

Lines changed: 29 additions & 15 deletions

File tree

CHANGELOG.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33

44
* changed the default value of reject_zero in NotNull from True to False
55
* added to_default function to reset a document to its default values
6+
* fixed bug in default documents where default values could be overwritten
7+
* default value for fields is now None
8+
* defaual value for fields can now be a callable
69

710
1.3.5
811
=====

pyArango/collection.py

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,8 @@ def __repr__(self):
118118

119119
class Field(object):
120120
"""The class for defining pyArango fields."""
121-
def __init__(self, validators = None, default = ""):
122-
"""validators must be a list of validators"""
121+
def __init__(self, validators = None, default = None):
122+
"""validators must be a list of validators. default can also be a callable"""
123123
if not validators:
124124
validators = []
125125
self.validators = validators
@@ -238,16 +238,6 @@ class Collection(with_metaclass(Collection_metaclass, object)):
238238

239239
def __init__(self, database, jsonData):
240240

241-
def getDefaultDoc(fields, dct):
242-
for k, v in fields.items():
243-
if isinstance(v, dict):
244-
dct[k] = getDefaultDoc(fields[k], {})
245-
elif isinstance(v, Field):
246-
dct[k] = v.default
247-
else:
248-
raise ValueError("Field '%s' is of invalid type '%s'" % (k, type(v)) )
249-
return dct
250-
251241
self.database = database
252242
self.connection = self.database.connection
253243
self.name = self.__class__.__name__
@@ -267,13 +257,30 @@ def getDefaultDoc(fields, dct):
267257
"fulltext" : {},
268258
}
269259
self.indexes_by_name = {}
270-
271-
self.defaultDocument = getDefaultDoc(self._fields, {})
260+
self.defaultDocument = None #getDefaultDoc(self._fields, {})
272261
self._isBulkInProgress = False
273262
self._bulkSize = 0
274263
self._bulkCache = []
275264
self._bulkMode = BulkMode.NONE
276265

266+
def getDefaultDocument(self, fields=None, dct=None):
267+
if dct is None:
268+
dct = {}
269+
if fields is None:
270+
fields = self._fields
271+
272+
for k, v in fields.items():
273+
if isinstance(v, dict):
274+
dct[k] = self.getDefaultDocument(fields[k], None)
275+
elif isinstance(v, Field):
276+
if callable(v.default):
277+
dct[k] = v.default()
278+
else :
279+
dct[k] = v.default
280+
else:
281+
raise ValueError("Field '%s' is of invalid type '%s'" % (k, type(v)) )
282+
return dct
283+
277284
def getURL(self):
278285
return "%s/collection/%s" % (self.database.getURL(), self.name)
279286

@@ -316,7 +323,11 @@ def delete(self):
316323

317324
def createDocument(self, initDict = None):
318325
"""create and returns a completely empty document or one populated with initDict"""
319-
res = dict(self.defaultDocument)
326+
# res = dict(self.defaultDocument)
327+
res = self.getDefaultDocument()
328+
from icecream import ic
329+
ic(res)
330+
320331
if initDict is not None:
321332
res.update(initDict)
322333

0 commit comments

Comments
 (0)