diff options
| author | Jeremy Kersten <jke@odoo.com> | 2019-09-12 09:45:11 +0000 |
|---|---|---|
| committer | Jeremy Kersten <jke@odoo.com> | 2019-09-30 13:58:14 +0000 |
| commit | be8fc2296b3822baffe0bc68cb4b7efdfe53fa91 (patch) | |
| tree | 08f0f825cfe2ffa652557f244f36880149d2f585 /odoo/http.py | |
| parent | b6b42ef73f4c517d9b7bc2da4909c13d7fe8f2c6 (diff) | |
[IMP] base, http_routing, website: allow custom routing rule
After this commit, you will be able (in technical mode) to update the url for
the python controllers.
Eg.
You can now rename /shop in /garden and /shop/product/ in /garden/vegetable/
Most of urls will be replaced at fly in the renderd qweb, with the function
url_for but all old urls will keep available. So if you access url /shop you
will be automatically redirected to /garden (308 Permanent Redirect).
As for cdn and other post-process of att, the automatically replacement in the
rendered qweb is only done when you will be not website editor. But the new
dispatch of URL will be applied in all cases.
For developper, since it is Permanent Redirect, don't forget to clear cache or
open chrome debug tool (with option 'Disable cache while DevTools is Open) to
see your lasts changes.
closes odoo/odoo#36555
Signed-off-by: Jérémy Kersten (jke) <jke@openerp.com>
Diffstat (limited to 'odoo/http.py')
| -rw-r--r-- | odoo/http.py | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/odoo/http.py b/odoo/http.py index 94445401801..721746ee7ce 100644 --- a/odoo/http.py +++ b/odoo/http.py @@ -908,9 +908,8 @@ class EndPoint(object): def __call__(self, *args, **kw): return self.method(*args, **kw) -def routing_map(modules, nodb_only, converters=None): - routing_map = werkzeug.routing.Map(strict_slashes=False, converters=converters) +def _generate_routing_rules(modules, nodb_only, converters=None): def get_subclasses(klass): def valid(c): return c.__module__.startswith('odoo.addons.') and c.__module__.split(".")[2] in modules @@ -949,16 +948,8 @@ def routing_map(modules, nodb_only, converters=None): assert routing['routes'], "Method %r has not route defined" % mv endpoint = EndPoint(mv, routing) for url in routing['routes']: - if routing.get("combine", False): - # deprecated v7 declaration - url = o._cp_path.rstrip('/') + '/' + url.lstrip('/') - if url.endswith("/") and len(url) > 1: - url = url[: -1] + yield (url, endpoint, routing) - xtra_keys = 'defaults subdomain build_only strict_slashes redirect_to alias host'.split() - kw = {k: routing[k] for k in xtra_keys if k in routing} - routing_map.add(werkzeug.routing.Rule(url, endpoint=endpoint, methods=routing['methods'], **kw)) - return routing_map #---------------------------------------------------------- # HTTP Sessions @@ -1276,7 +1267,10 @@ class Root(object): @lazy_property def nodb_routing_map(self): _logger.info("Generating nondb routing") - return routing_map([''] + odoo.conf.server_wide_modules, True) + routing_map = werkzeug.routing.Map(strict_slashes=False, converters=None) + for url, endpoint, routing in odoo.http._generate_routing_rules([''] + odoo.conf.server_wide_modules, True): + routing_map.add(werkzeug.routing.Rule(url, endpoint=endpoint, methods=routing['methods'])) + return routing_map def __call__(self, environ, start_response): """ Handle a WSGI request |
