Merge pull request #2228 from swt2c/pypubsub_getargspec

pypubsub: Replace deprecated inspect.getargspec
This commit is contained in:
Scott Talbert
2022-08-10 13:49:39 -04:00
committed by GitHub

View File

@@ -12,7 +12,7 @@ CallArgsInfo regarding its autoTopicArgName data member.
"""
from inspect import getargspec, ismethod, isfunction
from inspect import ismethod, isfunction, signature, Parameter
from .. import py2and3
@@ -133,19 +133,26 @@ class CallArgsInfo:
self.autoTopicArgName = None."""
#args, firstArgIdx, defaultVals, acceptsAllKwargs
(allParams, varParamName, varOptParamName, defaultVals) = getargspec(func)
if defaultVals is None:
defaultVals = []
else:
defaultVals = list(defaultVals)
allParams = []
defaultVals = []
varParamName = None
varOptParamName = None
for argName, param in signature(func).parameters.items():
if param.default != Parameter.empty:
defaultVals.append(param.default)
if param.kind == Parameter.VAR_POSITIONAL:
varParamName = argName
elif param.kind == Parameter.VAR_KEYWORD:
varOptParamName = argName
else:
allParams.append(argName)
self.acceptsAllKwargs = (varOptParamName is not None)
self.acceptsAllUnnamedArgs = (varParamName is not None)
self.allParams = allParams
del self.allParams[0:firstArgIdx] # does nothing if firstArgIdx == 0
self.numRequired = len(self.allParams) - len(defaultVals)
assert len(self.allParams) >= len(defaultVals)
assert self.numRequired >= 0
# if listener wants topic, remove that arg from args/defaultVals