示例#1
0
    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)
                                    })
示例#2
0
 def __moyarepr__(self, context):
     return to_expression(context, self.result)
示例#3
0
 def __moyarepr__(self, context):
     return to_expression(context, self.result)
示例#4
0
    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)})