Принятие списков в качестве параметров URL с помощью Colander - PullRequest
0 голосов
/ 24 августа 2018

Я пытаюсь принять сериализованную 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?

...