Преобразование JSON в проверенные объекты Python в Tornado?

Я пишу игрушечное приложение на Tornado и MongoKit (валидатор ORM для MongoDB) с базовыми методами post/get/put/delete. Например, этот запрос API REST 'http://localhost:8888/user' с телом {"username": "dhh", "datetime_joined": "2012-08-04 20:05:12"} должен создать новый документ в коллекции монго. datetime_joined - это строка в JSON, но datetime в классе MongoKit. Есть ли лучший способ сделать это, чем явное преобразование строки в datetime, как показано в коде ниже? Он отлично работает для datetime в структуре (например, datetime_joined), но, очевидно, не работает для преобразования вложенных datetime (например, datetime_created в приведенном ниже примере). Если вы не конвертируете строки в datetime рекурсивно. Подводя итог, что является хорошей практикой для преобразования строк, которые представляют даты в datetime в MongoKit?

Вот мой пример кода для справки:

def string_to_datetime(value):
    if value is not None:
       return datetime.strptime(value, '%Y-%m-%d %H:%M:%S')
    return None

class User(Document):
    structure = {
        'username': basestring,
        'datetime_joined': datetime,
                'info': {
                  'email': basestring,
                  'datetime_created': datetime
                }
    }

class APIHandler(tornado.web.RequestHandler):
    SUPPORTED_METHODS = ("GET", "HEAD", "POST", "DELETE", "PATCH", "PUT", "OPTIONS")

    def initialize(self):
        self.conn = Connection()
            self.conn.register([User])
        self.clazz = self.conn.User

    def post(self):
        service = json.loads(self.request.body)
        service_document = self.clazz()
        for key in service:
            if key.startswith('datetime'):
                service_document[key] = string_to_datetime(service[key])
            else:
                service_document[key] = service[key]
        service_document.validate()
        service_document.save()

0 ответов

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