diff options
author | ianb <devnull@localhost> | 2006-05-07 04:17:31 +0000 |
---|---|---|
committer | ianb <devnull@localhost> | 2006-05-07 04:17:31 +0000 |
commit | cc5077998b6800071449d3823637453464b56322 (patch) | |
tree | c86f337ba581af162ff16d241d729154e01b2892 /paste/request.py | |
parent | 8fa6950d010844c79467d9fb81745eef33d85857 (diff) | |
download | paste-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.py | 39 |
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: |