diff options
| author | Xavier Morel <xmo@odoo.com> | 2017-05-26 17:25:04 +0200 |
|---|---|---|
| committer | Xavier Morel <xmo@odoo.com> | 2017-06-12 11:04:23 +0200 |
| commit | a5283f90ce2cc8145ce536ab29984e1ea02a085c (patch) | |
| tree | 667240c3654530b3627651abc20b856405b3406c /addons/website/controllers/main.py | |
| parent | b62ba7ee1adc8e3c41040cafde30c2c93154ce69 (diff) | |
[FIX] P3: QueryURL relying on kw iteration order
Diffstat (limited to 'addons/website/controllers/main.py')
| -rw-r--r-- | addons/website/controllers/main.py | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index 2f97218ce72..e0eb3c34c3a 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -20,7 +20,7 @@ from odoo.http import request from odoo.addons.website.models.website import slug from odoo.addons.web.controllers.main import WebClient, Binary, Home -from odoo.tools import pycompat +from odoo.tools import pycompat, OrderedSet logger = logging.getLogger(__name__) @@ -34,27 +34,29 @@ class QueryURL(object): def __init__(self, path='', path_args=None, **args): self.path = path self.args = args - self.path_args = set(path_args or []) + self.path_args = OrderedSet(path_args or []) def __call__(self, path=None, path_args=None, **kw): path = path or self.path for key, value in pycompat.items(self.args): kw.setdefault(key, value) - path_args = set(path_args or []).union(self.path_args) - paths, fragments = [], [] + path_args = OrderedSet(path_args or []) | self.path_args + paths, fragments = {}, [] for key, value in pycompat.items(kw): if value and key in path_args: if isinstance(value, models.BaseModel): - paths.append((key, slug(value))) + paths[key] = slug(value) else: - paths.append((key, value)) + paths[key] = u"%s" % value elif value: if isinstance(value, list) or isinstance(value, set): fragments.append(werkzeug.url_encode([(key, item) for item in value])) else: fragments.append(werkzeug.url_encode([(key, value)])) - for key, value in paths: - path += '/' + key + '/%s' % value + for key in path_args: + value = paths.get(key) + if value is not None: + path += '/' + key + '/' + value if fragments: path += '?' + '&'.join(fragments) return path |
