Дата десериализации "бесконечность" в дуршлаге
Я использую дуршлаг для десериализации и проверки данных 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
?