Merge "Be gracious in deprecation of method signatures related to threadlocal removal."

This commit is contained in:
Jenkins
2014-06-26 20:28:55 +00:00
committed by Gerrit Code Review
2 changed files with 57 additions and 9 deletions

View File

@@ -73,7 +73,10 @@ class RestController(object):
)
try:
result = handler(method, args, request)
if len(getargspec(handler).args) == 3:
result = handler(method, args)
else:
result = handler(method, args, request)
#
# If the signature of the handler does not match the number
@@ -99,7 +102,10 @@ class RestController(object):
# return the result
return result
def _handle_lookup(self, args, request):
def _handle_lookup(self, args, request=None):
if request is None:
self._raise_method_deprecation_warning(self.handle_lookup)
# filter empty strings from the arg list
args = list(six.moves.filter(bool, args))
@@ -162,10 +168,13 @@ class RestController(object):
request
)
def _handle_unknown_method(self, method, remainder, request):
def _handle_unknown_method(self, method, remainder, request=None):
'''
Routes undefined actions (like RESET) to the appropriate controller.
'''
if request is None:
self._raise_method_deprecation_warning(self._handle_unknown_method)
# try finding a post_{custom} or {custom} method first
controller = self._find_controller('post_%s' % method, method)
if controller:
@@ -183,10 +192,13 @@ class RestController(object):
abort(404)
def _handle_get(self, method, remainder, request):
def _handle_get(self, method, remainder, request=None):
'''
Routes ``GET`` actions to the appropriate controller.
'''
if request is None:
self._raise_method_deprecation_warning(self._handle_get)
# route to a get_all or get if no additional parts are available
if not remainder or remainder == ['']:
controller = self._find_controller('get_all', 'get')
@@ -224,10 +236,13 @@ class RestController(object):
abort(404)
def _handle_delete(self, method, remainder, request):
def _handle_delete(self, method, remainder, request=None):
'''
Routes ``DELETE`` actions to the appropriate controller.
'''
if request is None:
self._raise_method_deprecation_warning(self._handle_delete)
if remainder:
match = self._handle_custom_action(method, remainder, request)
if match:
@@ -254,10 +269,13 @@ class RestController(object):
abort(404)
def _handle_post(self, method, remainder, request):
def _handle_post(self, method, remainder, request=None):
'''
Routes ``POST`` requests.
'''
if request is None:
self._raise_method_deprecation_warning(self._handle_post)
# check for custom POST/PUT requests
if remainder:
match = self._handle_custom_action(method, remainder, request)
@@ -275,10 +293,13 @@ class RestController(object):
abort(404)
def _handle_put(self, method, remainder, request):
def _handle_put(self, method, remainder, request=None):
return self._handle_post(method, remainder, request)
def _handle_custom_action(self, method, remainder, request):
def _handle_custom_action(self, method, remainder, request=None):
if request is None:
self._raise_method_deprecation_warning(self._handle_custom_action)
remainder = [r for r in remainder if r]
if remainder:
if method in ('put', 'delete'):
@@ -302,3 +323,18 @@ class RestController(object):
Sets default routing arguments.
'''
request.pecan.setdefault('routing_args', []).extend(args)
def _raise_method_deprecation_warning(self, handler):
warnings.warn(
(
"The function signature for %s.%s.%s is changing "
"in the next version of pecan.\nPlease update to: "
"`%s(self, method, remainder, request)`." % (
self.__class__.__module__,
self.__class__.__name__,
handler.__name__,
handler.__name__
)
),
DeprecationWarning
)

View File

@@ -24,13 +24,25 @@ class NonCanonicalPath(Exception):
self.remainder = remainder
def lookup_controller(obj, remainder, request):
def lookup_controller(obj, remainder, request=None):
'''
Traverses the requested url path and returns the appropriate controller
object, including default routes.
Handles common errors gracefully.
'''
if request is None:
warnings.warn(
(
"The function signature for %s.lookup_controller is changing "
"in the next version of pecan.\nPlease update to: "
"`lookup_controller(self, obj, remainder, request)`." % (
__name__,
)
),
DeprecationWarning
)
notfound_handlers = []
while True:
try: