# HG changeset patch # User Sylvain Thénault # Date 1478254751 -3600 # Node ID 3cd5ac8d43edad38474010ef7bcae3ed2f324952 # Parent 1bdfe9d4ab83d9a81053b177255a4fddd8b32893 Fix unexpected req.relative_path() when calling CWTC.app_handle_request with path argument The _deprecated_path_arg decorator can not be used in this case, since it won't ensure backward compat if path value has been specified and is not similar as req's path (which is generally the case). This problem has been introduced by 904ee9cd0cf9. diff -r 1bdfe9d4ab83 -r 3cd5ac8d43ed cubicweb/devtools/testlib.py --- a/cubicweb/devtools/testlib.py Fri Nov 04 13:12:10 2016 +0100 +++ b/cubicweb/devtools/testlib.py Fri Nov 04 11:19:11 2016 +0100 @@ -27,6 +27,7 @@ from contextlib import contextmanager from inspect import isgeneratorfunction from itertools import chain +from warnings import warn import tempfile from six import text_type, string_types, reraise @@ -725,8 +726,12 @@ ctrl = self.vreg['controllers'].select('ajax', req) yield ctrl.publish(), req - @application._deprecated_path_arg - def app_handle_request(self, req): + def app_handle_request(self, req, path=None): + if path is not None: + warn('[3.24] path argument got removed from app_handle_request parameters, ' + 'give it to the request constructor', DeprecationWarning) + if req.relative_path(False) != path: + req._url = path return self.app.core_handle(req) @deprecated("[3.15] app_handle_request is the new and better way" diff -r 1bdfe9d4ab83 -r 3cd5ac8d43ed cubicweb/web/application.py --- a/cubicweb/web/application.py Fri Nov 04 13:12:10 2016 +0100 +++ b/cubicweb/web/application.py Fri Nov 04 11:19:11 2016 +0100 @@ -55,6 +55,9 @@ func_name = func.func_name if PY2 else func.__name__ warn('[3.24] path argument got removed from "%s" parameters' % func_name, DeprecationWarning) + path = args[0] if args else kwargs['path'] + assert path == req.relative_path(False), \ + 'mismatching path, {0} vs {1}'.format(path, req.relative_path(False)) return func(self, req) return wrapper diff -r 1bdfe9d4ab83 -r 3cd5ac8d43ed cubicweb/web/test/unittest_application.py --- a/cubicweb/web/test/unittest_application.py Fri Nov 04 13:12:10 2016 +0100 +++ b/cubicweb/web/test/unittest_application.py Fri Nov 04 11:19:11 2016 +0100 @@ -762,7 +762,7 @@ def test_handle_deprecation(self): """Test deprecation warning for *_handle methods.""" - with self.admin_access.web_request(url='nothing') as req: + with self.admin_access.web_request(url='foo') as req: with self.assertWarns(DeprecationWarning) as cm: self.app.core_handle(req, 'foo') self.assertIn('path argument got removed from "core_handle"',