|
|
@@ -8,7 +8,7 @@ def iter_field(field, leafs_only=True, path=(), parent=None):
|
|
|
if issubclass(field.field_class, FormField):
|
|
|
field_class = field.kwargs['form_class']
|
|
|
if path and not leafs_only:
|
|
|
- yield path, field_class
|
|
|
+ yield path, field_class, parent
|
|
|
|
|
|
for subfield_name, subfield in field_class._unbound_fields:
|
|
|
yield from iter_field(subfield, leafs_only, path + (subfield_name,), parent)
|
|
|
@@ -24,7 +24,7 @@ def iter_form_class(form_class, leafs_only=True, path=()):
|
|
|
field = getattr(form_class, path[-1]) if path else form_class
|
|
|
|
|
|
if path and not leafs_only:
|
|
|
- yield path, field
|
|
|
+ yield path, field, None
|
|
|
|
|
|
try:
|
|
|
for subfield_name, subfield in field._unbound_fields:
|
|
|
@@ -36,7 +36,7 @@ def iter_form_class(form_class, leafs_only=True, path=()):
|
|
|
yield from iter_form_class(field, leafs_only, path)
|
|
|
|
|
|
def iter_form(form, leafs_only=True):
|
|
|
- for key, field, iterate_on in iter_form_class(form.__class__):
|
|
|
+ for key, field, iterate_on in iter_form_class(form.__class__, leafs_only):
|
|
|
if iterate_on:
|
|
|
value = rgetattr(form, iterate_on)
|
|
|
for n, entry in enumerate(value.entries):
|
|
|
@@ -66,13 +66,27 @@ def iter_schema_class(schema, leafs_only=True, path=()):
|
|
|
yield from iter_schema_class_field(field, leafs_only, path + (key,))
|
|
|
|
|
|
def iter_schema(schema, leafs_only=True):
|
|
|
+ def get_schema_value(schema, key):
|
|
|
+ try:
|
|
|
+ return rgetattr(schema, key)
|
|
|
+ except AttributeError:
|
|
|
+ return recursive_get(getattr(schema, key[0]), *key[1:])
|
|
|
+
|
|
|
for key, field, iterate_on in iter_schema_class(schema.__class__, leafs_only):
|
|
|
if iterate_on:
|
|
|
- sub_values = rgetattr(schema, iterate_on)
|
|
|
- if isinstance(sub_values, list):
|
|
|
- for n, sub_value in enumerate(sub_values):
|
|
|
- yield key + (n,), sub_value
|
|
|
- else:
|
|
|
- raise NotImplementedError()
|
|
|
+ try:
|
|
|
+ sub_values = get_schema_value(schema, iterate_on)
|
|
|
+ if isinstance(sub_values, list):
|
|
|
+ for n, sub_value in enumerate(sub_values):
|
|
|
+ yield key + (n,), sub_value
|
|
|
+ else:
|
|
|
+ raise NotImplementedError()
|
|
|
+ except AttributeError:
|
|
|
+ ...
|
|
|
+
|
|
|
continue
|
|
|
- yield key, rgetattr(schema, key)
|
|
|
+
|
|
|
+ try:
|
|
|
+ yield key, get_schema_value(schema, key)
|
|
|
+ except AttributeError:
|
|
|
+ ...
|