У меня есть набор узлов схемы дуршлага, используемых с пирамидой/карнизом в API. Для некоторых аргументов строки запроса передается диапазон (т. е. 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, которая затем привязывается к моему представлению Cornice с помощью @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()
— это то, что нужно, и вот где проблема получает дополнительную оценку:
- Вызывается ли
set_value
до или после проверки? - Имеет ли
set_value
доступ к валидатору, чтобы валидаторRegEx
, создающий группы регулярных выражений, можно было затем использовать для установки моего кортежа:time=(validated.match.group[1], validated.match.group[2])
?