Я пытаюсь принять сериализованную URL-версию следующего Python dict
, используя Colander в качестве моего бэкэнда проверки:
{'foo': [1,2,3]}
Способ, которым я подошел к этому, главным образом заключался в использовании colander.SequenceSchema
в различных конфигурациях, ни одна из которых не приводит к ошибкам, которые имеют большой смысл:
# first approach
class ListItem(colander.MappingSchema):
item = colander.SchemaNode(colander.Int())
class ListContainer(colander.SequenceSchema):
items = ListItem()
# second approach
class ListContainer(colander.SequenceSchema):
items = colander.SchemaNode(colander.Int())
# third approach
colander.SchemaNode(
colander.Mapping(),
colander.SchemaNode(
colander.Sequence(),
typ=colander.Int(),
name=my_param_name
)
)
Я на самом деле вполне уверен, что первые два подхода эквивалентны.
С точки зрения фактической проверки этого я попытался использовать несколько структур, переданных в params
kwarg при вызове requests.get
:
my_param_name = [1,2,3]
my_param_name = [(my_param_name, 1), (my_param_name, 2), (my_param_name, 3)]
my_param_name = {my_param_name: [1,2,3]}
В любом случае, дуршлаг выплюнет некоторые вариации на my_param_name: u'"1" is not iterable'
, или в последнем случае my_param_name: u'"[1,2,3]" is not iterable'
. Эта ошибка очень тупая, и документы не определяют правильный вариант использования для SequenceSchema
(или даже colander.List
) для принятия массивов в качестве значений в параметре URL, а также из-за относительно низкого значения Colander Принятие, трудно найти проект в Интернете, который использует любой из них таким образом.
Можно ли принять список скалярных примитивных значений в качестве значения параметра URL при прохождении проверки с использованием Colander?