Skip to content

Commit 6435735

Browse files
committed
tests and fixes for fieldcontainer
1 parent 525dda7 commit 6435735

File tree

2 files changed

+479
-11
lines changed

2 files changed

+479
-11
lines changed

aiorethink/values_and_valuetypes/field_container.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,9 @@ def _check_field_spec(cls):
126126
# simple properties and due diligence
127127
###########################################################################
128128

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))
133132

134133
def __str__(self):
135134
return str(collections.ChainMap(self._declared_fields_values,
@@ -273,8 +272,8 @@ def get_dbvalue(self, fld_name, default = None):
273272
return default
274273

275274

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)
278277

279278

280279
def __setitem__(self, fld_name, value):
@@ -416,7 +415,7 @@ def dbitems(self, which = ALL):
416415
def clear(self, which = ALL):
417416
"""Deletes all fields.
418417
"""
419-
for fld_name in self.keys(which):
418+
for fld_name in list(self.keys(which)):
420419
del self[fld_name]
421420

422421

@@ -443,6 +442,8 @@ def validate(self):
443442
The default implementation validates all updated fields individually.
444443
445444
When you override this, don't forget to call super().validate().
445+
446+
The method returns self.
446447
"""
447448
for fld_name in self._updated_fields.keys():
448449
if self.__class__.has_field_attr(fld_name):
@@ -456,20 +457,22 @@ def validate_field(self, fld_name):
456457
this are fields where aiorethink can not know when updates happen, for
457458
example when you change an element within a list.
458459
459-
The function returns the validated value.
460+
The method returns self.
460461
"""
461-
fld_obj = getattr(self.__class__, fld_name)
462+
fld_obj = getattr(self.__class__, fld_name, None)
462463
if fld_obj == None:
463464
raise ValueError("{} is not a validatable field".
464465
format(fld_name))
465466

466467
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
469470

470471

471472

472473
class FieldContainerValueType(TypedValueType):
474+
"""Subclassing: just override _val_instance_of and you should be fine.
475+
"""
473476
_val_instance_of = FieldContainer
474477

475478
def dbval_to_pyval(self, dbval):

0 commit comments

Comments
 (0)