Дата десериализации "бесконечность" в дуршлаге

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

Другие вопросы по тегам