@@ -126,10 +126,9 @@ def _check_field_spec(cls):
126
126
# simple properties and due diligence
127
127
###########################################################################
128
128
129
- # TODO make new repr
130
- #def __repr__(self):
131
- # s = "{o.__class__.__name__}({o.__class__.pkey.name}={o.pkey})"
132
- # return s.format(o = self)
129
+ def __repr__ (self ):
130
+ s = "{o.__class__.__name__}({str_rep})"
131
+ return s .format (o = self , str_rep = str (self ))
133
132
134
133
def __str__ (self ):
135
134
return str (collections .ChainMap (self ._declared_fields_values ,
@@ -273,8 +272,8 @@ def get_dbvalue(self, fld_name, default = None):
273
272
return default
274
273
275
274
276
- def get_key_for_dbkey (self , dbkey , default = None ):
277
- return self ._dbname_to_field_name .get (dbkey , default )
275
+ def get_key_for_dbkey (self , dbkey ):
276
+ return self ._dbname_to_field_name .get (dbkey , dbkey )
278
277
279
278
280
279
def __setitem__ (self , fld_name , value ):
@@ -416,7 +415,7 @@ def dbitems(self, which = ALL):
416
415
def clear (self , which = ALL ):
417
416
"""Deletes all fields.
418
417
"""
419
- for fld_name in self .keys (which ):
418
+ for fld_name in list ( self .keys (which ) ):
420
419
del self [fld_name ]
421
420
422
421
@@ -443,6 +442,8 @@ def validate(self):
443
442
The default implementation validates all updated fields individually.
444
443
445
444
When you override this, don't forget to call super().validate().
445
+
446
+ The method returns self.
446
447
"""
447
448
for fld_name in self ._updated_fields .keys ():
448
449
if self .__class__ .has_field_attr (fld_name ):
@@ -456,20 +457,22 @@ def validate_field(self, fld_name):
456
457
this are fields where aiorethink can not know when updates happen, for
457
458
example when you change an element within a list.
458
459
459
- The function returns the validated value .
460
+ The method returns self .
460
461
"""
461
- fld_obj = getattr (self .__class__ , fld_name )
462
+ fld_obj = getattr (self .__class__ , fld_name , None )
462
463
if fld_obj == None :
463
464
raise ValueError ("{} is not a validatable field" .
464
465
format (fld_name ))
465
466
466
467
val = self .get (fld_name , fld_obj .default )
467
- validated_val = fld_obj .validate (val )
468
- return validated_val
468
+ fld_obj .validate (val )
469
+ return self
469
470
470
471
471
472
472
473
class FieldContainerValueType (TypedValueType ):
474
+ """Subclassing: just override _val_instance_of and you should be fine.
475
+ """
473
476
_val_instance_of = FieldContainer
474
477
475
478
def dbval_to_pyval (self , dbval ):
0 commit comments