summaryrefslogtreecommitdiff
path: root/paste/wsgiwrappers.py
diff options
context:
space:
mode:
authorbbangert <devnull@localhost>2007-01-31 22:33:30 +0000
committerbbangert <devnull@localhost>2007-01-31 22:33:30 +0000
commitafa02337bac78d6a37e59866efebb075ed72114a (patch)
treeedd6a0e4a2ac0ff0e3fadd7dea0c8631bf37cf04 /paste/wsgiwrappers.py
parentd4b707763246138d461560277743c2f3562c1abc (diff)
downloadpaste-afa02337bac78d6a37e59866efebb075ed72114a.tar.gz
Added WSGIRequest.mimetypes property and unit tests for it.
Diffstat (limited to 'paste/wsgiwrappers.py')
-rw-r--r--paste/wsgiwrappers.py22
1 files changed, 20 insertions, 2 deletions
diff --git a/paste/wsgiwrappers.py b/paste/wsgiwrappers.py
index f41cbd1..587c5ae 100644
--- a/paste/wsgiwrappers.py
+++ b/paste/wsgiwrappers.py
@@ -15,6 +15,7 @@ from paste.registry import StackedObjectProxy
from paste.response import HeaderDict
from paste.wsgilib import encode_unicode_app_iter
from paste.httpheaders import ACCEPT_LANGUAGE
+from paste.mimeparse import desired_matches
_CHARSET_RE = re.compile(r'.*;\s*charset=(.*?)(;|$)', re.I)
@@ -72,8 +73,12 @@ class WSGIRequest(object):
specified by the client.
The class variable ``defaults`` specifies default values for
- ``charset``, ``errors``, and ``langauge``. These can be overridden for the
- current request via the registry.
+ ``charset``, ``errors``, ``mimetypes``, and ``langauge``. These can be
+ overridden for the current request via the registry.
+
+ The ``mimetypes`` option should be a list of mime-types in their desired
+ order. This determines the valid mime-types in order based on what the
+ browser declared it can accept via the HTTP Accept header.
The ``language`` default value is considered the fallback during i18n
translations to ensure in odd cases that mixed languages don't occur should
@@ -97,6 +102,7 @@ class WSGIRequest(object):
"""
defaults = StackedObjectProxy(default=dict(charset=None, errors='strict',
decode_param_names=False,
+ mimetypes=['text/html'],
language='en-us'))
def __init__(self, environ):
self.environ = environ
@@ -114,6 +120,7 @@ class WSGIRequest(object):
self.errors = defaults.get('errors', 'strict')
self.decode_param_names = defaults.get('decode_param_names', False)
self._languages = None
+ self._mimetypes = None
body = environ_getter('wsgi.input')
scheme = environ_getter('wsgi.url_scheme')
@@ -132,6 +139,17 @@ class WSGIRequest(object):
return self.environ.get('HTTP_HOST', self.environ.get('SERVER_NAME'))
host = property(host, doc=host.__doc__)
+ def mimetypes(self):
+ """Return a list of developer-specified mime-types that the browser's
+ HTTP Accept header allows in the order provided by
+ defaults['mimetypes']"""
+ if self._mimetypes is not None:
+ return self._mimetypes
+ mytypes = self.defaults.get('mimetypes', ['text/html'])
+ self._mimetypes = desired_matches(mytypes, self.environ.get('HTTP_ACCEPT', '*/*'))
+ return self._mimetypes
+ mimetypes = property(mimetypes, doc=mimetypes.__doc__)
+
def languages(self):
"""Return a list of preferred languages, most preferred first.