summaryrefslogtreecommitdiff
path: root/paste/request.py
diff options
context:
space:
mode:
authorianb <devnull@localhost>2006-05-07 04:17:31 +0000
committerianb <devnull@localhost>2006-05-07 04:17:31 +0000
commitcc5077998b6800071449d3823637453464b56322 (patch)
treec86f337ba581af162ff16d241d729154e01b2892 /paste/request.py
parent8fa6950d010844c79467d9fb81745eef33d85857 (diff)
downloadpaste-cc5077998b6800071449d3823637453464b56322.tar.gz
fix for non-form POSTs, putting all the variables in __body__
Diffstat (limited to 'paste/request.py')
-rw-r--r--paste/request.py39
1 files changed, 24 insertions, 15 deletions
diff --git a/paste/request.py b/paste/request.py
index 9a1db37..02828c4 100644
--- a/paste/request.py
+++ b/paste/request.py
@@ -161,6 +161,10 @@ def parse_formvars(environ, all_as_list=False, include_get_vars=True):
All values should be strings, except for file uploads which are
left as FieldStorage instances.
+ If the request was not a normal form request (e.g., a POST with an
+ XML body) then the body of the request will be put into
+ ``'__body__'``. Other variables from the URL (GET) variables may
+ also be present.
"""
source = (environ.get('QUERY_STRING', ''),
environ['wsgi.input'], environ['REQUEST_METHOD'],
@@ -173,22 +177,27 @@ def parse_formvars(environ, all_as_list=False, include_get_vars=True):
environ=environ,
keep_blank_values=1)
formvars = {}
- for name in fs.keys():
- values = fs[name]
- if not isinstance(values, list):
- values = [values]
- for value in values:
- if not value.filename:
- value = value.value
- if name in formvars:
- if isinstance(formvars[name], list):
- formvars[name].append(value)
+ if not isinstance(fs.value, list):
+ # Non-HTML form submission, so we just
+ # return the field
+ formvars['__body__'] = fs.value
+ else:
+ for name in fs.keys():
+ values = fs[name]
+ if not isinstance(values, list):
+ values = [values]
+ for value in values:
+ if not value.filename:
+ value = value.value
+ if name in formvars:
+ if isinstance(formvars[name], list):
+ formvars[name].append(value)
+ else:
+ formvars[name] = [formvars[name], value]
+ elif all_as_list:
+ formvars[name] = [value]
else:
- formvars[name] = [formvars[name], value]
- elif all_as_list:
- formvars[name] = [value]
- else:
- formvars[name] = value
+ formvars[name] = value
if environ['REQUEST_METHOD'] == 'POST' and include_get_vars:
for name, value in parse_querystring(environ):
if name in formvars: