summaryrefslogtreecommitdiff
path: root/paste/url.py
diff options
context:
space:
mode:
authorianb <devnull@localhost>2005-11-17 01:28:45 +0000
committerianb <devnull@localhost>2005-11-17 01:28:45 +0000
commitec5dc5adcdee8867af073468a719b2d3442114f6 (patch)
treec0f89748bda78cd07e0fb68e2e3787e0556dcf01 /paste/url.py
parent7970315006667e0e8ffb8602c5219e068e8046a9 (diff)
downloadpaste-ec5dc5adcdee8867af073468a719b2d3442114f6.tar.gz
If there are nested dictionaries in a URL variable, use variable_encode to de-nest them
Diffstat (limited to 'paste/url.py')
-rw-r--r--paste/url.py28
1 files changed, 20 insertions, 8 deletions
diff --git a/paste/url.py b/paste/url.py
index 6b5004c..a0cc727 100644
--- a/paste/url.py
+++ b/paste/url.py
@@ -7,6 +7,8 @@ This module implements a class for handling URLs.
import urllib
import cgi
from paste import wsgilib
+# Imported lazily from FormEncode:
+variabledecode = None
__all__ = ["URL", "Image"]
@@ -121,11 +123,24 @@ class URLResource(object):
attrs=self.attrs,
params=new_params)
- def var(self, **kw):
- for key in kw.keys():
+ def coerce_vars(self, vars):
+ global variabledecode
+ need_variable_encode = False
+ for key, value in vars.items():
+ if isinstance(value, dict):
+ need_variable_encode = True
if key.endswith('_'):
- kw[key[:-1]] = kw[key]
- del kw[key]
+ vars[key[:-1]] = vars[key]
+ del vars[key]
+ if need_variable_encode:
+ if variabledecode is None:
+ from formencode import variabledecode
+ vars = variabledecode.variable_encode(vars)
+ return vars
+
+
+ def var(self, **kw):
+ kw = self.coerce_vars(kw)
new_vars = self.vars + kw.items()
return self.__class__(self.url, vars=new_vars,
attrs=self.attrs,
@@ -137,10 +152,7 @@ class URLResource(object):
extends the keys. Setting a variable to None here will
effectively delete it.
"""
- for key in kw.keys():
- if key.endswith('_'):
- kw[key[:-1]] = kw[key]
- del kw[key]
+ kw = self.coerce_vars(kw)
new_vars = []
for name, values in self.vars:
if name in kw: