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