pypubsub: Replace deprecated inspect.getargspec

inspect.getargspec was removed in Python 3.11.  This is a backport of:
089c7a73f8
This commit is contained in:
Scott Talbert
2022-08-08 22:35:58 -04:00
parent e220dab240
commit 9986a0d5c2

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