Как один подкласс endpoints.ServiceException?

В документации упоминается «подкласс конечных точек.ServiceException» по адресу https://developers.google.com/appengine/docs/python/endpoints/exceptions. Однако на самом деле подклассы не могут выражать ничего, кроме строкового сообщения, «состояния» и http-кода.

Чтобы любое приложение имело более интеллектуальную обработку исключений, ошибки должны нести больше.

Как можно создать подкласс класса исключения, предоставляя собственное сообщение/состояние?


person 12345    schedule 06.05.2013    source источник


Ответы (1)


В настоящее время нет возможности расширить полезную нагрузку, но вы можете настроить код состояния.

Как это сделано в endpoints.api_exceptions для ошибки 400:

import httplib
class BadRequestException(ServiceException):
  """Bad request exception that is mapped to a 400 response."""
  http_status = httplib.BAD_REQUEST

Текущий список (по состоянию на 08.05.2013) кодов состояния, поддерживаемых для ошибок:

  • httplib.BAD_REQUEST: 400
  • httplib.UNAUTHORIZED: 401
  • httplib.FORBIDDEN: 403
  • httplib.NOT_FOUND: 404
  • httplib.CONFLICT: 409
  • httplib.GONE: 410
  • httplib.PRECONDITION_FAILED: 412
  • httplib.REQUEST_ENTITY_TOO_LARGE: 413

и эти коды состояния будут сопоставлены с другими кодами:

  • httplib.PAYMENT_REQUIRED: 402 сопоставлено с 404
  • httplib.METHOD_NOT_ALLOWED: 405 сопоставлено с 501
  • httplib.NOT_ACCEPTABLE: 406 сопоставлено с 404
  • httplib.PROXY_AUTHENTICATION_REQUIRED: 407 сопоставлено с 404
  • httplib.REQUEST_TIMEOUT: 408 сопоставлено с 503
  • httplib.LENGTH_REQUIRED: 411 сопоставлено с 404
  • httplib.REQUEST_URI_TOO_LONG: 414 сопоставлено с 404
  • httplib.UNSUPPORTED_MEDIA_TYPE: 415 сопоставлено с 404
  • httplib.REQUESTED_RANGE_NOT_SATISFIABLE: 416 сопоставлено с 404
  • httplib.EXPECTATION_FAILED: 417 сопоставлено с 404

Кроме того, если ваш ответ представляет собой объект message_types.VoidMessage, вы сможете отправить 204 ответ без содержания (httplib.NO_CONTENT).

person bossylobster    schedule 08.05.2013