From e11a836c10951594e706ed19ee2decb9812786b4 Mon Sep 17 00:00:00 2001 From: Jeremy Kersten Date: Wed, 29 Jun 2016 19:39:48 +0200 Subject: [PATCH] [REF] website, website_blog, website_sale: move QueryURL to be common --- addons/website/controllers/main.py | 33 +++++++++++++++++++++++++ addons/website_blog/controllers/main.py | 32 +----------------------- addons/website_sale/controllers/main.py | 21 +--------------- 3 files changed, 35 insertions(+), 51 deletions(-) diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index fbae3fd57ca..b9ab6b13e17 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -16,6 +16,8 @@ from openerp.addons.base.ir.ir_qweb import AssetsBundle from openerp.addons.web.controllers.main import WebClient, Binary from openerp.addons.web import http from openerp.http import request +from openerp.osv.orm import browse_record +from openerp.addons.website.models.website import slug logger = logging.getLogger(__name__) @@ -24,6 +26,37 @@ MAX_IMAGE_WIDTH, MAX_IMAGE_HEIGHT = IMAGE_LIMITS = (1024, 768) LOC_PER_SITEMAP = 45000 SITEMAP_CACHE_TIME = datetime.timedelta(hours=12) + +class QueryURL(object): + def __init__(self, path='', path_args=None, **args): + self.path = path + self.args = args + self.path_args = set(path_args or []) + + def __call__(self, path=None, path_args=None, **kw): + path = path or self.path + for k, v in self.args.items(): + kw.setdefault(k, v) + path_args = set(path_args or []).union(self.path_args) + paths, fragments = [], [] + for key, value in kw.items(): + if value and key in path_args: + if isinstance(value, browse_record): + paths.append((key, slug(value))) + else: + paths.append((key, 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 + if fragments: + path += '?' + '&'.join(fragments) + return path + + class Website(openerp.addons.web.controllers.main.Home): #------------------------------------------------------ # View diff --git a/addons/website_blog/controllers/main.py b/addons/website_blog/controllers/main.py index 39fab7ad96c..3ef3c670256 100644 --- a/addons/website_blog/controllers/main.py +++ b/addons/website_blog/controllers/main.py @@ -8,43 +8,13 @@ from openerp import tools from openerp.addons.web import http from openerp.addons.web.http import request from openerp.addons.website.models.website import slug, unslug +from odoo.addons.website.controllers.main import QueryURL from openerp.exceptions import UserError -from openerp.osv.orm import browse_record from openerp.tools.translate import _ from openerp import SUPERUSER_ID from openerp.tools import html2plaintext -class QueryURL(object): - def __init__(self, path='', path_args=None, **args): - self.path = path - self.args = args - self.path_args = set(path_args or []) - - def __call__(self, path=None, path_args=None, **kw): - path = path or self.path - for k, v in self.args.items(): - kw.setdefault(k, v) - path_args = set(path_args or []).union(self.path_args) - paths, fragments = [], [] - for key, value in kw.items(): - if value and key in path_args: - if isinstance(value, browse_record): - paths.append((key, slug(value))) - else: - paths.append((key, 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 - if fragments: - path += '?' + '&'.join(fragments) - return path - - class WebsiteBlog(http.Controller): _blog_post_per_page = 20 _post_comment_per_page = 10 diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index 7b51e3c3987..705179699fb 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -5,6 +5,7 @@ import werkzeug from odoo import http, tools, _ from odoo.http import request from odoo.addons.website.models.website import slug +from odoo.addons.website.controllers.main import QueryURL PPG = 20 # Products Per Page PPR = 4 # Products Per Row @@ -80,26 +81,6 @@ class TableCompute(object): # TODO keep with input type hidden -class QueryURL(object): - def __init__(self, path='', **args): - self.path = path - self.args = args - - def __call__(self, path=None, **kw): - if not path: - path = self.path - for k, v in self.args.items(): - kw.setdefault(k, v) - l = [] - for k, v in kw.items(): - if v: - if isinstance(v, list) or isinstance(v, set): - l.append(werkzeug.url_encode([(k, i) for i in v])) - else: - l.append(werkzeug.url_encode([(k, v)])) - if l: - path += '?' + '&'.join(l) - return path class WebsiteSale(http.Controller):