сладострастный и sqlalchemy.util._collections.result ' - PullRequest
0 голосов
/ 21 мая 2019

Я хотел бы проверить sqlalchemy.util._collections.result с чувственными: https://github.com/alecthomas/voluptuous.

Я знаю, что 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 в кортеж (это работает), но я хочу использовать эту проверку в модульных тестах, и поэтому я хочу избежать как можно большего изменения данных, которые я собираюсь проверить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...