妖艳和sqlalchemy.util._collections.result'

时间:2019-05-21 12:18:29

标签: python sqlalchemy voluptuous

我想用https://github.com/alecthomas/voluptuous验证一个sqlalchemy.util._collections.result

我知道sqlalchemy.util._collections.result是棘手的对象。它们类似于命名元组,但并不是真正的命名元组。

这是我所拥有的:

schema = Schema((str, str, str))
my_result = fancy_function()
schema(my_result)

result的类型为sqlalchemy.util._collections.result

这是我得到的例外:

def validate_sequence(path, data):
        if not isinstance(data, seq_type):
            raise er.SequenceTypeInvalid('expected a %s' % seq_type_name, path)

        # Empty seq schema, allow any data.
        if not schema:
            if data:
                raise er.MultipleInvalid([
                    er.ValueInvalid('not a valid value', [value]) for value in data
                ])
            return data

        out = []
        invalid = None
        errors = []
        index_path = UNDEFINED
        for i, value in enumerate(data):
            index_path = path + [i]
            invalid = None
            for validate in _compiled:
                try:
                    cval = validate(index_path, value)
                    if cval is not Remove:  # do not include Remove values
                        out.append(cval)
                    break
                except er.Invalid as e:
                    if len(e.path) > len(index_path):
                        raise
                    invalid = e
            else:
                errors.append(invalid)
        if errors:
            raise er.MultipleInvalid(errors)

        if _isnamedtuple(data):
>           return type(data)(*out)
E           TypeError: __new__() takes 2 positional arguments but 3 were given

我也尝试过这样的事情:

NT = namedtuple('NT', ["name", "f1", "f2", "f3"])
schema = Schema(NT(str, str, str))

但是我得到了相同的输出。

你有什么主意吗?我可以将sqlalchemy结果转换为元组(它可以工作),但是我想在单元测试中使用此验证,因此,我想避免尽可能多地更改要测试的数据。

0 个答案:

没有答案