summaryrefslogtreecommitdiff
path: root/webob
diff options
context:
space:
mode:
authorSergey Schetinin <sergey@maluke.com>2011-02-21 10:21:53 +0200
committerSergey Schetinin <sergey@maluke.com>2011-02-21 10:21:53 +0200
commitfe9d695a0f3d6234d09a7a43aaed62a0c8f743d2 (patch)
treef73962c086ff77d67d7ac61a8e7f81153bff4841 /webob
parentaa8341d632c95e4b6076f85da89c57b95111cd30 (diff)
downloadwebob-fe9d695a0f3d6234d09a7a43aaed62a0c8f743d2.tar.gz
fix cgi.FieldStorage 'multipart/form-data' parsing (the field names are not unquoted). see also https://bitbucket.org/ianb/webob/issue/2
Diffstat (limited to 'webob')
-rw-r--r--webob/multidict.py13
1 files changed, 10 insertions, 3 deletions
diff --git a/webob/multidict.py b/webob/multidict.py
index 16f05bb..8965686 100644
--- a/webob/multidict.py
+++ b/webob/multidict.py
@@ -3,7 +3,7 @@
"""
Gives a multi-value dictionary object (MultiDict) plus several wrappers
"""
-import cgi, copy, sys, warnings
+import cgi, copy, sys, warnings, urllib
from UserDict import DictMixin
@@ -53,12 +53,19 @@ class MultiDict(DictMixin):
Create a dict from a cgi.FieldStorage instance
"""
obj = cls()
+ if fs.type == 'multipart/form-data':
+ # cgi.FieldStorage parser for this ctype
+ # does not unquote the field names
+ fix_name = urllib.unquote
+ else:
+ fix_name = lambda n: n
# fs.list can be None when there's nothing to parse
for field in fs.list or ():
+ name = fix_name(field.name)
if field.filename:
- obj.add(field.name, field)
+ obj.add(name, field)
else:
- obj.add(field.name, field.value)
+ obj.add(name, field.value)
return obj
def __getitem__(self, key):