From 1a61014ec85d4cdf937254d6aa1372b8bd730f66 Mon Sep 17 00:00:00 2001 From: Massimo DiPierro Date: Tue, 5 Jun 2012 17:15:17 -0500 Subject: [PATCH] fixed router bug and new test, thanks Jonathan --- VERSION | 2 +- gluon/rewrite.py | 20 ++++++++++---------- gluon/tests/test_router.py | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 11 deletions(-) diff --git a/VERSION b/VERSION index 0cba6e9a..a12f55ce 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 2.00.0 (2012-06-05 10:57:17) dev +Version 2.00.0 (2012-06-05 17:15:12) dev diff --git a/gluon/rewrite.py b/gluon/rewrite.py index b6ee5f6a..39201a62 100644 --- a/gluon/rewrite.py +++ b/gluon/rewrite.py @@ -397,6 +397,16 @@ def load_routers(all_apps): router.languages = set(router.languages) else: router.languages = set() + if router.functions: + if isinstance(router.functions, (set, tuple, list)): + functions = set(router.functions) + if isinstance(router.default_function, str): + functions.add(router.default_function) # legacy compatibility + router.functions = { router.default_controller: functions } + for controller in router.functions: + router.functions[controller] = set(router.functions[controller]) + else: + router.functions = dict() if app != 'BASE': for base_only in ROUTER_BASE_KEYS: router.pop(base_only, None) @@ -412,16 +422,6 @@ def load_routers(all_apps): if router.controllers: router.controllers.add('static') router.controllers.add(router.default_controller) - if router.functions: - if isinstance(router.functions, (set, tuple, list)): - functions = set(router.functions) - if isinstance(router.default_function, str): - functions.add(router.default_function) # legacy compatibility - router.functions = { router.default_controller: functions } - for controller in router.functions: - router.functions[controller] = set(router.functions[controller]) - else: - router.functions = dict() if isinstance(routers.BASE.applications, str) and routers.BASE.applications == 'ALL': routers.BASE.applications = list(all_apps) diff --git a/gluon/tests/test_router.py b/gluon/tests/test_router.py index e258e88f..c8097298 100644 --- a/gluon/tests/test_router.py +++ b/gluon/tests/test_router.py @@ -611,6 +611,42 @@ class TestRouter(unittest.TestCase): self.assertEqual(filter_url('http://d.com/app2/ctr/index/arg'), "/app2/ctr/index ['arg']") self.assertEqual(filter_url('http://d.com/app2/ctr/arg'), "/app2/ctr/arg") + def test_router_functions2(self): + ''' + Test more functions=[something] + ''' + router_functions = dict( + BASE = dict( + default_application = 'init', + applications = 'INIT', + default_controller = 'default', + controllers = ['default', 'ctr'], + default_function = 'index', + functions = ['index','user','register','basicRegister', + 'download','call','data','error'] + ), + ) + + load(rdict=router_functions) + + # outbound + self.assertEqual(str(URL(a='init', c='default', f='index', args=['arg1'])), "/arg1") + self.assertEqual(str(URL(a='init', c='default', f='user', args=['arg1'])), "/user/arg1") + self.assertEqual(str(URL(a='init', c='default', f='user', args=['index'])), "/user/index") + self.assertEqual(str(URL(a='init', c='default', f='index', args=['index'])), "/index/index") + self.assertEqual(str(URL(a='init', c='default', f='index', args=['init'])), "/init") + self.assertEqual(str(URL(a='init', c='default', f='index', args=['ctr'])), "/index/ctr") + self.assertEqual(str(URL(a='init', c='ctr', f='index', args=['arg'])), "/ctr/index/arg") + self.assertEqual(str(URL(a='init', c='ctr', f='ctrf1', args=['arg'])), "/ctr/ctrf1/arg") + self.assertEqual(str(URL(a='init', c='ctr', f='ctrf1', args=['ctrf2'])), "/ctr/ctrf1/ctrf2") + + # inbound + self.assertEqual(filter_url('http://d.com/arg'), "/init/default/index ['arg']") + self.assertEqual(filter_url('http://d.com/user'), "/init/default/user") + self.assertEqual(filter_url('http://d.com/user/arg'), "/init/default/user ['arg']") + self.assertEqual(filter_url('http://d.com/ctr'), "/init/ctr/index") + self.assertEqual(filter_url('http://d.com/ctr/ctrf1/arg'), "/init/ctr/ctrf1 ['arg']") + def test_router_hyphen(self): ''' Test hyphen conversion