1
0
mirror of https://github.com/scrapy/scrapy.git synced 2025-03-01 18:27:23 +00:00

PEP8 on pydispatch/robustapply.py

This commit is contained in:
joehillen 2012-12-12 08:53:32 -08:00
parent 8778af5c5b
commit c505b33672

View File

@ -8,44 +8,48 @@ those which are acceptable.
import inspect import inspect
def function( receiver ): def function(receiver):
"""Get function-like callable object for given receiver """Get function-like callable object for given receiver
returns (function_or_method, codeObject, fromMethod) returns (function_or_method, codeObject, fromMethod)
If fromMethod is true, then the callable already If fromMethod is true, then the callable already
has its first argument bound has its first argument bound
""" """
if inspect.isclass(receiver) and hasattr(receiver, '__call__'): if inspect.isclass(receiver) and hasattr(receiver, '__call__'):
# receiver is a class instance; assume it is callable. # receiver is a class instance; assume it is callable.
# Reassign receiver to the actual method that will be called. # Reassign receiver to the actual method that will be called.
if hasattr( receiver.__call__, 'im_func') or hasattr( receiver.__call__, 'im_code'): if hasattr(receiver.__call__, 'im_func') or \
receiver = receiver.__call__ hasattr(receiver.__call__, 'im_code'):
if hasattr( receiver, 'im_func' ): receiver = receiver.__call__
# an instance-method...
return receiver, receiver.im_func.func_code, 1 if hasattr( receiver, 'im_func' ):
elif not hasattr( receiver, 'func_code'): # an instance-method...
raise ValueError('unknown reciever type %s %s'%(receiver, type(receiver))) return receiver, receiver.im_func.func_code, 1
return receiver, receiver.func_code, 0 elif not hasattr(receiver, 'func_code'):
raise ValueError('unknown reciever type %s %s'%(receiver, type(receiver)))
return receiver, receiver.func_code, 0
def robustApply(receiver, *arguments, **named): def robustApply(receiver, *arguments, **named):
"""Call receiver with arguments and an appropriate subset of named """Call receiver with arguments and an appropriate subset of named
""" """
receiver, codeObject, startIndex = function( receiver ) receiver, codeObject, startIndex = function(receiver)
acceptable = codeObject.co_varnames[startIndex+len(arguments):codeObject.co_argcount] acceptable = codeObject.co_varnames[startIndex+len(arguments):codeObject.co_argcount]
for name in codeObject.co_varnames[startIndex:startIndex+len(arguments)]: for name in codeObject.co_varnames[startIndex:startIndex+len(arguments)]:
if named.has_key( name ): if named.has_key(name):
raise TypeError( raise TypeError(
"""Argument %r specified both positionally and as a keyword for calling %r"""% ( """Argument %r specified both positionally and as a keyword for calling %r"""% (
name, receiver, name, receiver,
) )
) )
if not (codeObject.co_flags & 8):
# fc does not have a **kwds type parameter, therefore
# remove unacceptable arguments.
for arg in named.keys():
if arg not in acceptable:
del named[arg]
return receiver(*arguments, **named)
if not (codeObject.co_flags & 8):
# fc does not have a **kwds type parameter, therefore
# remove unacceptable arguments.
for arg in named.keys():
if arg not in acceptable:
del named[arg]
return receiver(*arguments, **named)