def logic(self, context): form, dst = self.get_parameters(context, 'src', 'dst') form_data = form.data dst_obj = context[dst] if not hasattr(dst_obj, 'items'): self.throw( 'moya.forms.bad-dst', "Object referenced by 'dst' must be dict or other mapping type (not {})" .format(to_expression(context, dst_obj))) if dst: field_names = self.fields(context) if field_names is None: fields = list(form.fields) else: fields = [form.fields[name] for name in field_names] for field in fields: applyers = form.field_applyers[field.name] if applyers: for apply_field in applyers: with self.closure_call( context, form.app, apply_field.data, form=form, object=dst_obj, values=form.data, value=form.data[field.name]) as call: yield logic.DeferNodeContents(apply_field.element) else: with context.frame(dst): field_dst = field.dst if dst: value = form_data.get(field.name, None) try: context[field_dst] = value except Exception as e: diagnosis_msg = "Check you are setting this field to an appropriate value." self.throw( 'moya.forms.apply-fail', "unable to set for field '{}' to {}". format(dst, context.to_expr(value)), diagnosis=diagnosis_msg, info={ 'field': field.name, 'error': text_type(e) })
def __moyarepr__(self, context): return to_expression(context, self.result)
def logic(self, context): form, dst = self.get_parameters(context, 'src', 'dst') form_data = form.data dst_obj = context[dst] if not hasattr(dst_obj, 'items'): self.throw('moya.forms.bad-dst', "Object referenced by 'dst' must be dict or other mapping type (not {})".format(to_expression(context, dst_obj))) if dst: field_names = self.fields(context) if field_names is None: fields = list(form.fields) else: fields = [form.fields[name] for name in field_names] for field in fields: applyers = form.field_applyers[field.name] if applyers: for apply_field in applyers: with self.closure_call(context, form.app, apply_field.data, form=form, object=dst_obj, values=form.data, value=form.data[field.name]) as call: yield logic.DeferNodeContents(apply_field.element) else: with context.frame(dst): field_dst = field.dst if field_dst: value = form_data.get(field.name, None) try: context[field_dst] = value except Exception as e: diagnosis_msg = "Check you are setting this field to an appropriate value." self.throw('moya.forms.apply-fail', "unable to set field '{}' to {}".format(dst, context.to_expr(value)), diagnosis=diagnosis_msg, info={'field': field.name, 'error': text_type(e)})