Как изменить формат ошибок всех ошибок, используя Connexion + Tornado - PullRequest
1 голос
/ 08 марта 2019

Я использую Connexion (https://github.com/zalando/connexion), чтобы убедиться, что моя спецификация openapi хорошо соблюдается, и чтобы иметь простые точки интеграции для подключения моих маршрутов к базовым функциям.

В любом случаеответы по умолчанию от Connexion - это json-ответы, следующие за Сведения о проблеме для HTTP API RFC. Это следующий формат, например:

{
    "detail": "None is not of type 'object'",
    "status": 404,
    "title": "BadRequest",
    "type": "about:blank"
}

Однако я хотел бы изменитьформат всех ошибок, отправленных в что-то вроде:

{
    error: {
        code: 400,
        message: 'BadRequest',
        detail: 'ID unknown'
        innererror: {...}
    }
}

Я не могу найти способ перехватить каждую ошибку, чтобы изменить формат того, что возвращается. Я знаю, что могу расширить connection.exception.ProblemException class и добавить dict к параметру ext в его конструкторе, но для любой ошибки 400, например, я не могу его перехватить.

Итак, я знаю, что можно добавитьобработчики ошибок для конкретных кодов ошибок, например:

app.add_error_handler(404, error.normalize)
app.add_error_handler(400, error.normalize)

Однако для обработчика 404 мне удается успешно перехватить ошибку. Но для 400 (например, ошибка проверки json) - перехватне работает.

Как я могу перехватить каждую ошибку, отправленную из Connexion, и изменить формат json, даже если это просто для его расширения, например:

{
    "detail": "Could not find page",
    "error": {
        "code": 404,
        "message": "Could not find requested document."
    },
    "status": 404,
    "title": "NotFound",
    "type": "about:blank"
}

Я используюConnexion, с сервером 'торнадо'.

Заранее спасибо.Том

...