我在API中使用了一套与Pyramid / Cornice一起使用的Colander SchemaNodes。对于一些查询字符串args,传递范围(即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)
绑定到我的Cornice视图:
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])
?答案 0 :(得分:0)
我认为你应该看看:
您可以传递给SchemaNode的可调用者:
它允许您在将数据传递给验证器
之前对其进行操作并可选择在:
允许您在实例化架构后设置其他属性。