diff options
author | ianb <devnull@localhost> | 2005-11-17 01:28:45 +0000 |
---|---|---|
committer | ianb <devnull@localhost> | 2005-11-17 01:28:45 +0000 |
commit | ec5dc5adcdee8867af073468a719b2d3442114f6 (patch) | |
tree | c0f89748bda78cd07e0fb68e2e3787e0556dcf01 /paste/url.py | |
parent | 7970315006667e0e8ffb8602c5219e068e8046a9 (diff) | |
download | paste-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.py | 28 |
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: |