在Colander SchemaNode中处理经过验证的数据

时间:2015-07-09 22:12:53

标签: python pyramid colander cornice

我在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()是可行的方式,而且问题在这里得到了额外的信用:

  1. 在验证之前或之后调用set_value吗?
  2. set_value是否有权访问验证程序,以便可以使用创建正则表达式组的RegEx验证程序来设置我的元组:time=(validated.match.group[1], validated.match.group[2])

1 个答案:

答案 0 :(得分:0)

我认为你应该看看:

您可以传递给SchemaNode的可调用者:

documentation

它允许您在将数据传递给验证器

之前对其进行操作

并可选择在:

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

允许您在实例化架构后设置其他属性。