You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
1.7KB

  1. from ..datastructures import CharsetAccept
  2. from ..datastructures import LanguageAccept
  3. from ..datastructures import MIMEAccept
  4. from ..http import parse_accept_header
  5. from ..utils import cached_property
  6. class AcceptMixin(object):
  7. """A mixin for classes with an :attr:`~BaseResponse.environ` attribute
  8. to get all the HTTP accept headers as
  9. :class:`~werkzeug.datastructures.Accept` objects (or subclasses
  10. thereof).
  11. """
  12. @cached_property
  13. def accept_mimetypes(self):
  14. """List of mimetypes this client supports as
  15. :class:`~werkzeug.datastructures.MIMEAccept` object.
  16. """
  17. return parse_accept_header(self.environ.get("HTTP_ACCEPT"), MIMEAccept)
  18. @cached_property
  19. def accept_charsets(self):
  20. """List of charsets this client supports as
  21. :class:`~werkzeug.datastructures.CharsetAccept` object.
  22. """
  23. return parse_accept_header(
  24. self.environ.get("HTTP_ACCEPT_CHARSET"), CharsetAccept
  25. )
  26. @cached_property
  27. def accept_encodings(self):
  28. """List of encodings this client accepts. Encodings in a HTTP term
  29. are compression encodings such as gzip. For charsets have a look at
  30. :attr:`accept_charset`.
  31. """
  32. return parse_accept_header(self.environ.get("HTTP_ACCEPT_ENCODING"))
  33. @cached_property
  34. def accept_languages(self):
  35. """List of languages this client accepts as
  36. :class:`~werkzeug.datastructures.LanguageAccept` object.
  37. .. versionchanged 0.5
  38. In previous versions this was a regular
  39. :class:`~werkzeug.datastructures.Accept` object.
  40. """
  41. return parse_accept_header(
  42. self.environ.get("HTTP_ACCEPT_LANGUAGE"), LanguageAccept
  43. )