From fc72cdf3d0c0590054dc32d3dff88f9881ff9e2f Mon Sep 17 00:00:00 2001 From: mdipierro Date: Fri, 1 Nov 2013 20:11:46 -0500 Subject: [PATCH] change in way args are parsed and less test_routes.py --- VERSION | 2 +- gluon/rewrite.py | 11 +++++------ gluon/tests/test_routes.py | 20 ++++++++++---------- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/VERSION b/VERSION index 46973c25..f8203124 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 2.7.4-stable+timestamp.2013.11.01.18.48.46 +Version 2.7.4-stable+timestamp.2013.11.01.20.10.58 diff --git a/gluon/rewrite.py b/gluon/rewrite.py index d42532c3..49fd4605 100644 --- a/gluon/rewrite.py +++ b/gluon/rewrite.py @@ -53,7 +53,7 @@ regex_version = re.compile(r'^(_[\d]+\.[\d]+\.[\d]+)$') # apps in routes_apps_raw must parse raw_args into args regex_url = re.compile('^/((?P\w+)(/(?P\w+)(/(?P(?P\w+)(\.(?P[\w.]+))?(?P.*)))?)?)?$') -regex_args = re.compile('^[/\w@=-]*(\.[/\w@=-]+)*$') +regex_args = re.compile('[^\w/.@=-]') def _router_default(): @@ -623,7 +623,7 @@ def regex_url_in(request, environ): # ################################################## path = urllib.unquote(request.env.path_info) or '/' - path = path.replace('\\', '/').replace(' ','_') + path = path.replace('\\', '/') if path.endswith('/') and len(path) > 1: path = path[:-1] match = regex_url.match(path) @@ -634,7 +634,7 @@ def regex_url_in(request, environ): request.raw_args = request.raw_args[1:] if match.group('c') == 'static': application = match.group('a') - version, filename = None, match.group('z') + version, filename = None, match.group('z').replace(' ','_') if not filename: raise HTTP(404) items = filename.split('/', 1) @@ -658,10 +658,9 @@ def regex_url_in(request, environ): if request.application in routes.routes_apps_raw: # application is responsible for parsing args request.args = None - elif not regex_args.match(request.raw_args): - invalid_url(routes) elif request.raw_args: - request.args = List(request.raw_args.split('/')) + args = regex_args.sub('_',request.raw_args) + request.args = List(args.split('/')) else: request.args = List([]) return (None, None, environ) diff --git a/gluon/tests/test_routes.py b/gluon/tests/test_routes.py index 5b1e5f26..86cc162f 100644 --- a/gluon/tests/test_routes.py +++ b/gluon/tests/test_routes.py @@ -190,16 +190,16 @@ default_application = 'defapp' self.assertRaises(HTTP, filter_url, 'http://domain.com/ctl/bad!fcn') self.assertRaises( HTTP, filter_url, 'http://domain.com/ctl/fcn.bad!ext') - self.assertRaises( - HTTP, filter_url, 'http://domain.com/ctl/fcn/bad!arg') - try: - # 2.7+ only - self.assertRaisesRegexp(HTTP, '400 BAD REQUEST \[invalid path\]', filter_url, 'http://domain.com/init/bad!ctl') - self.assertRaisesRegexp(HTTP, '400 BAD REQUEST \[invalid path\]', filter_url, 'http://domain.com/init/ctlr/bad!fcn') - self.assertRaisesRegexp(HTTP, '400 BAD REQUEST \[invalid path\]', filter_url, 'http://domain.com/init/ctlr/fcn.bad!ext') - self.assertRaisesRegexp(HTTP, '400 BAD REQUEST \[invalid path\]', filter_url, 'http://domain.com/appc/init/fcn/bad!arg') - except AttributeError: - pass + #self.assertRaises( + # HTTP, filter_url, 'http://domain.com/ctl/fcn/bad!arg') + #try: + # # 2.7+ only + # self.assertRaisesRegexp(HTTP, '400 BAD REQUEST \[invalid path\]', filter_url, 'http://domain.com/init/bad!ctl') + # self.assertRaisesRegexp(HTTP, '400 BAD REQUEST \[invalid path\]', filter_url, 'http://domain.com/init/ctlr/bad!fcn') + # self.assertRaisesRegexp(HTTP, '400 BAD REQUEST \[invalid path\]', filter_url, 'http://domain.com/init/ctlr/fcn.bad!ext') + # self.assertRaisesRegexp(HTTP, '400 BAD REQUEST \[invalid path\]', filter_url, 'http://domain.com/appc/init/fcn/bad!arg') + #except AttributeError: + # pass self.assertEqual(filter_url('http://domain.com/welcome/default/fcn_1'), "/welcome/default/fcn_1")