漏勺反序列化'无限'日期

时间:2014-09-11 12:39:30

标签: python json-deserialization colander

我使用colander进行反序列化和验证json数据。 我需要在日期字段中处理特殊值infinity-infinity。 但是colander.Date并不支持这样的价值。

class Card(colander.MappingSchema):
    card_no = colander.SchemaNode(colander.String())
    expiration = colander.SchemaNode(colander.Date())

cstruct = {'card_no': '12345', 'expiration': 'infinity'}

schema = Card()
output = schema.deserialize(cstruct)

我有输出

colander.Invalid: {'expiration': 'Invalid date'}

我的工作代码是:

def modify(nodes, kw):
    for node in nodes:
        if (type(node.typ) == colander.Date):
            if kw[node.name] == 'infinity':
                kw[node.name] = str(datetime.max)

cstruct = {'card_no': '12345', 'expiration': 'infinity'}

schema = Card(after_bind=modify)

schema = schema.bind(**cstruct)

output = schema.deserialize(schema.bindings)
print(output)

我有输出

{'card_no': '12345', 'expiration': datetime.date(9999, 12, 31)}

但我不确定,这样做是否是个好主意。

或者我应该为日期字段定义自定义漏勺类型并使用它而不是colander.Date

0 个答案:

没有答案