Управление проверенными данными в Colander SchemaNode

У меня есть набор схем узлов Colander, используемых с API в Pyramid / Cornice. Для некоторых аргументов строки запроса передается диапазон (т.е. time=X-Y означает диапазон времени от X до Y, где X и Y - целые числа, представляющие эпохи). В настоящее время я проверяю это с RegEx() Валидатор, чтобы гарантировать, что эпоха или диапазон эпох передается в:

class TimeOrRange(SchemaNode):
    schema_type = String
    location = "querystring"
    description = 'Time (or range) in epochs: ssssssssss(-ssssssssss)'
    validator = Regex("^[0-9]{10}\-{0,1}[0-9]{0,10}$")

Затем я использую это в MappingSchema, которая затем привязывается к моему карнизу с помощью @view(schema=TimedThingGet):

class TimedThingGet(MappingSchema):
    time = TimeOrRange(missing=drop)

Что я хотел бы сделать, это обновить возвращаемое значение в моем TimeOrRange Код SchemaNode так time в TimedThingGet это кортеж временных диапазонов. Другими словами, если time=X-Y передается в TimedThingGet экземпляр, то time=(x, y) возвращается в проверенных данных. Точно так же, если только X затем я хочу Y быть установленным в эпоху now(),

Это выглядит как set_value() это путь, и вот где проблема получить некоторый дополнительный кредит:

  1. Есть ли set_value Вам позвонили до или после проверки?
  2. Есть ли set_value иметь доступ к валидатору, так что RegEx валидатор, который создает группы регулярных выражений, может быть использован для установки моего кортежа: time=(validated.match.group[1], validated.match.group[2])?

1 ответ

Решение

Я думаю, что вы должны посмотреть на:

Призыватель Preparer, который вы можете передать в SchemaNode:

http://docs.pylonsproject.org/projects/colander/en/latest/interfaces.html?highlight=preparer

Это позволит вам манипулировать данными до их передачи в валидаторы

И, возможно, по адресу:

http://docs.pylonsproject.org/projects/colander/en/latest/binding.html

Что позволяет вам устанавливать дополнительные свойства после создания экземпляра схемы.

Другие вопросы по тегам