Changeset 5311
- Timestamp:
- 08/30/08 11:06:39 (4 months ago)
- Files:
-
- branches/1.0/turbogears/controllers.py (modified) (1 diff)
- branches/1.0/turbogears/paginate.py (modified) (2 diffs)
- branches/1.0/turbogears/tests/test_paginate.py (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/1.0/turbogears/controllers.py
r5241 r5311 395 395 + config.get("tg.ignore_parameters", [])) 396 396 else: 397 # get special parameters used by upstream decorators like paginate 398 try: 399 tg_kw = dict([(k, v) for k, v in kw.items() if k in func._tg_args]) 400 except AttributeError: 401 tg_kw = {} 402 # remove excessive parameters 397 403 args, kw = tg_util.adapt_call(func, args, kw) 404 # add special parameters again 405 kw.update(tg_kw) 398 406 if config.get('server.environment', 'development') == 'development': 399 407 # Only output this in development mode: If it's a field storage object, branches/1.0/turbogears/paginate.py
r5241 r5311 113 113 def entangle(func): 114 114 115 get = turbogears.config.get 116 115 117 def decorated(func, *args, **kw): 116 117 get = turbogears.config.get118 118 119 119 def kwpop(name, default=None): … … 299 299 300 300 return output 301 if not get('tg.strict_parameters', False): 302 # add hint that paginate parameters shall be left intact 303 try: 304 args = func._tg_args 305 except AttributeError: 306 args = set() 307 for arg in 'no', 'limit', 'order', 'ordering': 308 args.add(var_name + '_tgp_' + arg) 309 args.add('tg_paginate_' + arg) 310 func._tg_args = args 301 311 return decorated 302 312 return weak_signature_decorator(entangle) branches/1.0/turbogears/tests/test_paginate.py
r5241 r5311 25 25 query_methods.remove('SR') 26 26 27 config.update({"tg.strict_parameters": True, 28 "sqlalchemy.dburi": "sqlite:///:memory:"}) 27 config.update({"sqlalchemy.dburi": "sqlite:///:memory:"}) 29 28 30 29 # sqlalchemy setup … … 270 269 create_request(url) 271 270 self.body = cherrypy.response.body[0] 271 self.status = cherrypy.response.status 272 272 if "fail: " in self.body: 273 273 print self.body … … 469 469 Spy.assert_ok(self.body, 'pages', xrange(4, 8)) 470 470 471 def test_strict_parameters(self): 472 config.update({'tg.strict_parameters': True}) 473 try: 474 self.request("/basic?tg_paginate_no=2") 475 assert self.status.startswith('200') 476 assert '"data": [4, 5, 6, 7]' in self.body 477 Spy.assert_ok(self.body, 'current_page', 2) 478 self.request("/basic?data_tgp_no=2") 479 assert self.status.startswith('200') 480 assert '"data": [4, 5, 6, 7]' in self.body 481 Spy.assert_ok(self.body, 'current_page', 2) 482 self.request('/custom_limit?tg_paginate_limit=2') 483 assert self.status.startswith('200') 484 assert '"data": [0, 1]' in self.body 485 Spy.assert_ok(self.body, 'limit', 2) 486 self.request('/custom_limit?data_tgp_limit=2') 487 assert self.status.startswith('200') 488 assert '"data": [0, 1]' in self.body 489 Spy.assert_ok(self.body, 'limit', 2) 490 self.request("/default_max_pages?data_tgp_no=5") 491 assert self.status.startswith('200') 492 assert '"data": [40, 41, 42, ' in self.body 493 Spy.assert_ok(self.body, 'pages', xrange(3, 8)) 494 self.request("/default_max_pages?tg_paginate_no=5") 495 assert self.status.startswith('200') 496 assert '"data": [40, 41, 42, ' in self.body 497 Spy.assert_ok(self.body, 'pages', xrange(3, 8)) 498 self.request("/basic?data_tgp_rubbish=2") 499 assert self.status.startswith('500') 500 assert ("basic() got an unexpected keyword argument" 501 " 'data_tgp_rubbish'") in self.body 502 self.request("/basic?tg_paginate_rubbish=2") 503 assert self.status.startswith('500') 504 assert ("basic() got an unexpected keyword argument" 505 " 'tg_paginate_rubbish'") in self.body 506 finally: 507 config.update({'tg.strict_parameters': False}) 508 471 509 def test_invalid_dynamic_limit(self): 472 510 self.request("/invalid_dynamic") 473 assert cherrypy.response.status.startswith("500")511 assert self.status.startswith("500") 474 512 assert 'paginate: dynamic_limit (foobar) not found in output dict' in self.body 475 513 … … 851 889 Spy.assert_ok(self.body, 'ordering', ['street']) 852 890 891 def test_strict_parameters(self): 892 config.update({'tg.strict_parameters': True}) 893 try: 894 self.request("/basic1?method=Q&data_tgp_ordering=street") 895 assert self.status.startswith('200') 896 self.assert_order(16, 2, 3, 4, 5, 6, 7, 8, 9, 10) 897 Spy.assert_ok(self.body, 'ordering', ['street']) 898 self.request("/basic1?method=Q&tg_paginate_ordering=street") 899 self.assert_order(16, 2, 3, 4, 5, 6, 7, 8, 9, 10) 900 Spy.assert_ok(self.body, 'ordering', ['street']) 901 finally: 902 config.update({'tg.strict_parameters': False}) 903 853 904 def test_default_reversed(self): 854 905 for test in "reversed1", "reversed2", "reversed3": … … 871 922 for method in query_methods: 872 923 self.request("/wrong_reversed?method=%s" % method) 873 assert cherrypy.response.status.startswith("500")924 assert self.status.startswith("500") 874 925 assert ('paginate: default_reversed (deprecated) only allowed' 875 926 ' when default_order is a basestring') in self.body