|
@@ -75,15 +75,8 @@ class SchemaToForm:
|
|
|
def set_data(self):
|
|
def set_data(self):
|
|
|
for src_key, value in iter_schema(self.schema):
|
|
for src_key, value in iter_schema(self.schema):
|
|
|
dest_key = self.lut(src_key)
|
|
dest_key = self.lut(src_key)
|
|
|
- if is_int(dest_key[-1]):
|
|
|
|
|
- *parent_key, idx = dest_key
|
|
|
|
|
-
|
|
|
|
|
- dest_field = rgetattr(self.form, tuple(parent_key))
|
|
|
|
|
- dest_field.entries[idx].data = value
|
|
|
|
|
-
|
|
|
|
|
- else:
|
|
|
|
|
- dest_field = self.get_field(self.form, dest_key)
|
|
|
|
|
- setattr(dest_field, 'data', value)
|
|
|
|
|
|
|
+ dest_field = self.get_field(self.form, dest_key)
|
|
|
|
|
+ dest_field.data = value
|
|
|
|
|
|
|
|
def set_baked(self):
|
|
def set_baked(self):
|
|
|
for k, field in iter_form(self.form, leafs_only=False):
|
|
for k, field in iter_form(self.form, leafs_only=False):
|
|
@@ -92,21 +85,18 @@ class SchemaToForm:
|
|
|
field._baked_instance = self.get_schema(self.schema, k)
|
|
field._baked_instance = self.get_schema(self.schema, k)
|
|
|
|
|
|
|
|
def set_errors(self):
|
|
def set_errors(self):
|
|
|
- for k, error_list in nested_dict_iter(self.errors):
|
|
|
|
|
- field = self.get_field(self.form, k)
|
|
|
|
|
|
|
+ for path, error_list in nested_dict_iter(self.errors):
|
|
|
|
|
+ field = self.get_field(self.form, path)
|
|
|
if isinstance(field, FormField):
|
|
if isinstance(field, FormField):
|
|
|
setattr(field.form, '_errors', error_list)
|
|
setattr(field.form, '_errors', error_list)
|
|
|
else:
|
|
else:
|
|
|
setattr(field, 'errors', error_list)
|
|
setattr(field, 'errors', error_list)
|
|
|
|
|
|
|
|
- for k, error_list in nested_dict_iter(self.errors):
|
|
|
|
|
- try:
|
|
|
|
|
- rgetattr(self.form, k)
|
|
|
|
|
- except TypeError:
|
|
|
|
|
- try:
|
|
|
|
|
- *field_list, n = k
|
|
|
|
|
- form = rgetattr(self.form, tuple(field_list))
|
|
|
|
|
- except TypeError:
|
|
|
|
|
- *field_list, n, key = k
|
|
|
|
|
- form = rgetattr(self.form, tuple(field_list))
|
|
|
|
|
- form.errors = [entry.errors for entry in form.entries]
|
|
|
|
|
|
|
+ for path, error_list in nested_dict_iter(self.errors):
|
|
|
|
|
+ paths_with_list = [
|
|
|
|
|
+ (path[:n], path[n], path[n+1:])
|
|
|
|
|
+ for n, val in enumerate(path) if is_int(val)
|
|
|
|
|
+ ]
|
|
|
|
|
+ for field_list, _, _ in paths_with_list:
|
|
|
|
|
+ form = rgetattr(self.form, tuple(field_list))
|
|
|
|
|
+ form.errors = [entry.errors for entry in form.entries]
|