@@ -118,8 +118,8 @@ def __repr__(self):
118118
119119class 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