diff options
| author | Jeremy Kersten <jke@odoo.com> | 2019-06-07 06:22:41 +0000 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2019-06-08 13:53:57 +0000 |
| commit | 521f7d36c1ff929ea52e9ed6fd4170bd3b968b19 (patch) | |
| tree | 87aa091eec0fa7960a5e6c11aafa30c1b77eb8af /addons/test_website/controllers/main.py | |
| parent | f167ae7d6e4298474293ede5cbef97d98a0883cc (diff) | |
[IMP] odoo: ignore unsupported args from controller
Before this commit, call a controller defined as:
```
@http.route('/route', type='http', auth='public')
def controller_func(self, foo):
do_it()
```
and called with url like /route?foo=1&bar=2
will crash with an exception:
`TypeError: controller_func() got an unexpected keyword argument 'bar'`
Now, we remove the extra parameters if the controller doesn't support it.
This case is not uncommon, you can easily arrive in this case with utm or
debug as extra parameter.
closes odoo/odoo#33962
Signed-off-by: Christophe Simonis <chs@odoo.com>
Diffstat (limited to 'addons/test_website/controllers/main.py')
| -rw-r--r-- | addons/test_website/controllers/main.py | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/addons/test_website/controllers/main.py b/addons/test_website/controllers/main.py index fad797d6984..259072c81ff 100644 --- a/addons/test_website/controllers/main.py +++ b/addons/test_website/controllers/main.py @@ -4,6 +4,7 @@ from odoo import http from odoo.http import request from odoo.addons.portal.controllers.web import Home +import json class WebsiteTest(Home): @@ -11,3 +12,27 @@ class WebsiteTest(Home): @http.route('/test_view', type='http', auth="public", website=True) def test_view(self, **kw): return request.render('test_website.test_view') + + @http.route('/ignore_args/converteronly/<string:a>/', type='http', auth="public", website=True) + def test_ignore_args_converter_only(self, a): + return request.make_response(json.dumps(dict(a=a, kw=None))) + + @http.route('/ignore_args/none', type='http', auth="public", website=True) + def test_ignore_args_none(self): + return request.make_response(json.dumps(dict(a=None, kw=None))) + + @http.route('/ignore_args/a', type='http', auth="public", website=True) + def test_ignore_args_a(self, a): + return request.make_response(json.dumps(dict(a=a, kw=None))) + + @http.route('/ignore_args/kw', type='http', auth="public", website=True) + def test_ignore_args_kw(self, a, **kw): + return request.make_response(json.dumps(dict(a=a, kw=kw))) + + @http.route('/ignore_args/converter/<string:a>/', type='http', auth="public", website=True) + def test_ignore_args_converter(self, a, b='youhou', **kw): + return request.make_response(json.dumps(dict(a=a, b=b, kw=kw))) + + @http.route('/ignore_args/converter/<string:a>/nokw', type='http', auth="public", website=True) + def test_ignore_args_converter_nokw(self, a, b='youhou'): + return request.make_response(json.dumps(dict(a=a, b=b))) |
