Changeset 5318
- Timestamp:
- 08/30/08 12:53:17 (4 months ago)
- Files:
-
- branches/1.1/turbogears/controllers.py (modified) (1 diff)
- branches/1.1/turbogears/paginate.py (modified) (4 diffs)
- branches/1.1/turbogears/tests/test_paginate.py (modified) (3 diffs)
- branches/1.1/turbogears/util.py (modified) (2 diffs)
- branches/1.5/turbogears/controllers.py (modified) (1 diff)
- branches/1.5/turbogears/paginate.py (modified) (3 diffs)
- branches/1.5/turbogears/tests/test_paginate.py (modified) (3 diffs)
- branches/1.5/turbogears/util.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/1.1/turbogears/controllers.py
r5241 r5318 371 371 + config.get("tg.ignore_parameters", [])) 372 372 else: 373 # get special parameters used by upstream decorators like paginate 374 try: 375 tg_kw = dict([(k, v) for k, v in kw.items() if k in func._tg_args]) 376 except AttributeError: 377 tg_kw = {} 378 # remove excessive parameters 373 379 args, kw = tg_util.adapt_call(func, args, kw) 380 # add special parameters again 381 kw.update(tg_kw) 374 382 if config.get('server.environment', 'development') == 'development': 375 383 # Only output this in development mode: If it's a field storage object, branches/1.1/turbogears/paginate.py
r5241 r5318 22 22 from formencode.variabledecode import variable_encode 23 23 from turbogears.widgets import PaginateDataGrid 24 from turbogears.util import add_tg_args 24 25 25 26 log = logging.getLogger("turbogears.paginate") 27 26 28 27 29 # lists of databases that lack support for OFFSET … … 101 103 def entangle(func): 102 104 105 get = turbogears.config.get 106 103 107 def decorated(func, *args, **kw): 104 105 get = turbogears.config.get106 108 107 109 def kwpop(name, default=None): … … 135 137 ordering = kwpop('ordering') 136 138 137 log.debug("pagi ante params: page=%s, limit=%s, order=%s",139 log.debug("paginate params: page=%s, limit=%s, order=%s", 138 140 page, limit_, order) 139 141 … … 268 270 269 271 return output 272 273 if not get('tg.strict_parameters', False): 274 # add hint that paginate parameters shall be left intact 275 add_tg_args(func, (var_name + '_tgp_' + arg 276 for arg in ('no', 'limit', 'order', 'ordering'))) 270 277 return decorated 278 271 279 return weak_signature_decorator(entangle) 272 280 branches/1.1/turbogears/tests/test_paginate.py
r5276 r5318 19 19 query_methods = 'Q QA SO SL'.split() 20 20 21 config.update({"tg.strict_parameters": True, 22 "sqlalchemy.dburi": "sqlite:///:memory:"}) 21 config.update({"sqlalchemy.dburi": "sqlite:///:memory:"}) 23 22 24 23 # sqlalchemy setup … … 420 419 Spy.assert_ok(self.body, 'pages', xrange(4, 8)) 421 420 421 def test_strict_parameters(self): 422 config.update({'tg.strict_parameters': True}) 423 try: 424 # check that paginate works with strict parameters as well 425 self.request("/basic?data_tgp_no=2", status=200) 426 assert '"data": [4, 5, 6, 7]' in self.body 427 Spy.assert_ok(self.body, 'current_page', 2) 428 self.request('/custom_limit?data_tgp_limit=2', status=200) 429 assert '"data": [0, 1]' in self.body 430 Spy.assert_ok(self.body, 'limit', 2) 431 self.request("/default_max_pages?data_tgp_no=5", status=200) 432 assert '"data": [40, 41, 42, ' in self.body 433 Spy.assert_ok(self.body, 'pages', xrange(3, 8)) 434 # check that wrong and old style parameters are not accepted 435 self.request("/basic?data_tgp_rubbish=2", status = 500) 436 assert ("basic() got an unexpected keyword argument" 437 " 'data_tgp_rubbish'") in self.body 438 self.request("/basic?tg_paginate_no=2", status=500) 439 assert ("basic() got an unexpected keyword argument" 440 " 'tg_paginate_no'") in self.body 441 finally: 442 config.update({'tg.strict_parameters': False}) 443 422 444 def test_invalid_dynamic_limit(self): 423 445 self.request("/invalid_dynamic", status=500) … … 778 800 Spy.assert_ok(self.body, 'ordering', ['street']) 779 801 802 def test_strict_parameters(self): 803 config.update({'tg.strict_parameters': True}) 804 try: 805 # check that paginate ordering works with strict parameters as well 806 self.request("/basic1?method=Q&data_tgp_ordering=street", status=200) 807 self.assert_order(16, 2, 3, 4, 5, 6, 7, 8, 9, 10) 808 Spy.assert_ok(self.body, 'ordering', ['street']) 809 # check that old style ordering is not accepted any more 810 self.request("/basic1?method=Q&tg_paginate_ordering=street", status=500) 811 assert ("got an unexpected keyword argument" 812 " 'tg_paginate_ordering'") in self.body 813 finally: 814 config.update({'tg.strict_parameters': False}) 815 780 816 def test_reversed(self): 781 817 for test in "reversed1", "reversed2": branches/1.1/turbogears/util.py
r4721 r5318 329 329 args, kw = inject_args(func, injections, args, kw) 330 330 return func(*args, **kw) 331 332 333 def add_tg_args(func, args): 334 """Add hint for special arguments that shall not be removed.""" 335 try: 336 tg_args = func._tg_args 337 except AttributeError: 338 tg_args = set() 339 tg_args.update(args) 340 func._tg_args = tg_args 331 341 332 342 … … 687 697 "get_package_name", "get_model", "load_project_config", 688 698 "ensure_sequence", "has_arg", "to_kw", "from_kw", "adapt_call", 689 "call_on_stack", "remove_keys", "arg_index", "inject_arg", 690 "inject_args", "bind_args", "recursive_update", "combine_contexts", 699 "call_on_stack", "remove_keys", "arg_index", 700 "inject_arg", "inject_args", "add_tg_args", "bind_args", 701 "recursive_update", "combine_contexts", 691 702 "request_available", "flatten_sequence", "load_class", 692 703 "parse_http_accept_header", "simplify_http_accept_header", branches/1.5/turbogears/controllers.py
r5212 r5318 371 371 + request.config.get("tg.ignore_parameters", [])) 372 372 else: 373 # get special parameters used by upstream decorators like paginate 374 try: 375 tg_kw = dict([(k, v) for k, v in kw.items() if k in func._tg_args]) 376 except AttributeError: 377 tg_kw = {} 378 # remove excessive parameters 373 379 args, kw = tg_util.adapt_call(func, args, kw) 380 # add special parameters again 381 kw.update(tg_kw) 374 382 if request.config.get('server.environment', 'development') == 'development': 375 383 # Only output this in development mode: If it's a field storage object, branches/1.5/turbogears/paginate.py
r5026 r5318 22 22 from formencode.variabledecode import variable_encode 23 23 from turbogears.widgets import PaginateDataGrid 24 from turbogears.util import add_tg_args 24 25 25 26 log = logging.getLogger("turbogears.paginate") 27 26 28 27 29 # lists of databases that lack support for OFFSET … … 135 137 ordering = kwpop('ordering') 136 138 137 log.debug("pagi ante params: page=%s, limit=%s, order=%s",139 log.debug("paginate params: page=%s, limit=%s, order=%s", 138 140 page, limit_, order) 139 141 … … 268 270 269 271 return output 272 273 if not turbogears.config.server.get('tg.strict_parameters', False): 274 # add hint that paginate parameters shall be left intact 275 add_tg_args(func, (var_name + '_tgp_' + arg 276 for arg in ('no', 'limit', 'order', 'ordering'))) 270 277 return decorated 278 271 279 return weak_signature_decorator(entangle) 272 280 branches/1.5/turbogears/tests/test_paginate.py
r5242 r5318 19 19 query_methods = 'Q QA SO SL'.split() 20 20 21 config.update({"tg.strict_parameters": True, 22 "sqlalchemy.dburi": "sqlite:///:memory:"}) 21 config.update({"sqlalchemy.dburi": "sqlite:///:memory:"}) 23 22 24 23 # sqlalchemy setup … … 424 423 Spy.assert_ok(self.body, 'pages', xrange(4, 8)) 425 424 425 def test_strict_parameters(self): 426 config.update({'tg.strict_parameters': True}) 427 try: 428 # check that paginate works with strict parameters as well 429 self.request("/basic?data_tgp_no=2", status=200) 430 assert '"data": [4, 5, 6, 7]' in self.body 431 Spy.assert_ok(self.body, 'current_page', 2) 432 self.request('/custom_limit?data_tgp_limit=2', status=200) 433 assert '"data": [0, 1]' in self.body 434 Spy.assert_ok(self.body, 'limit', 2) 435 self.request("/default_max_pages?data_tgp_no=5", status=200) 436 assert '"data": [40, 41, 42, ' in self.body 437 Spy.assert_ok(self.body, 'pages', xrange(3, 8)) 438 # check that wrong and old style parameters are not accepted 439 self.request("/basic?data_tgp_rubbish=2", status = 500) 440 assert ("basic() got an unexpected keyword argument" 441 " 'data_tgp_rubbish'") in self.body 442 self.request("/basic?tg_paginate_no=2", status=500) 443 assert ("basic() got an unexpected keyword argument" 444 " 'tg_paginate_no'") in self.body 445 finally: 446 config.update({'tg.strict_parameters': False}) 447 426 448 def test_invalid_dynamic_limit(self): 427 449 self.request("/invalid_dynamic", status=500) … … 782 804 Spy.assert_ok(self.body, 'ordering', ['street']) 783 805 806 def test_strict_parameters(self): 807 config.update({'tg.strict_parameters': True}) 808 try: 809 # check that paginate ordering works with strict parameters as well 810 self.request("/basic1?method=Q&data_tgp_ordering=street", status=200) 811 self.assert_order(16, 2, 3, 4, 5, 6, 7, 8, 9, 10) 812 Spy.assert_ok(self.body, 'ordering', ['street']) 813 # check that old style ordering is not accepted any more 814 self.request("/basic1?method=Q&tg_paginate_ordering=street", status=500) 815 assert ("got an unexpected keyword argument" 816 " 'tg_paginate_ordering'") in self.body 817 finally: 818 config.update({'tg.strict_parameters': False}) 819 784 820 def test_reversed(self): 785 821 for test in "reversed1", "reversed2": branches/1.5/turbogears/util.py
r4963 r5318 329 329 args, kw = inject_args(func, injections, args, kw) 330 330 return func(*args, **kw) 331 332 333 def add_tg_args(func, args): 334 """Add hint for special arguments that shall not be removed.""" 335 try: 336 tg_args = func._tg_args 337 except AttributeError: 338 tg_args = set() 339 tg_args.update(args) 340 func._tg_args = tg_args 331 341 332 342 … … 684 694 "get_package_name", "get_model", "load_project_config", 685 695 "ensure_sequence", "has_arg", "to_kw", "from_kw", "adapt_call", 686 "call_on_stack", "remove_keys", "arg_index", "inject_arg", 687 "inject_args", "bind_args", "recursive_update", "combine_contexts", 696 "call_on_stack", "remove_keys", "arg_index", 697 "inject_arg", "inject_args", "add_tg_args", "bind_args", 698 "recursive_update", "combine_contexts", 688 699 "request_available", "flatten_sequence", "load_class", 689 700 "parse_http_accept_header", "simplify_http_accept_header",