Andrew Geissler | 517393d | 2023-01-13 08:55:19 -0600 | [diff] [blame^] | 1 | Upstream-Status: Backport [https://github.com/wxWidgets/Phoenix/commit/9986a0d5] |
| 2 | |
| 3 | Signed-off-by: Kai Kang <kai.kang@windriver.com> |
| 4 | |
| 5 | From 9986a0d5c24b5d45ddf571d60351f68765a8a9be Mon Sep 17 00:00:00 2001 |
| 6 | From: Scott Talbert <swt@techie.net> |
| 7 | Date: Mon, 8 Aug 2022 22:35:58 -0400 |
| 8 | Subject: [PATCH] pypubsub: Replace deprecated inspect.getargspec |
| 9 | |
| 10 | inspect.getargspec was removed in Python 3.11. This is a backport of: |
| 11 | https://github.com/schollii/pypubsub/commit/089c7a73f85c76a3aa22e4b10c71db1bf65a8637 |
| 12 | --- |
| 13 | wx/lib/pubsub/core/callables.py | 23 +++++++++++++++-------- |
| 14 | 1 file changed, 15 insertions(+), 8 deletions(-) |
| 15 | |
| 16 | diff --git a/wx/lib/pubsub/core/callables.py b/wx/lib/pubsub/core/callables.py |
| 17 | index 65eb1ebe..7e798c54 100644 |
| 18 | --- a/wx/lib/pubsub/core/callables.py |
| 19 | +++ b/wx/lib/pubsub/core/callables.py |
| 20 | @@ -12,7 +12,7 @@ CallArgsInfo regarding its autoTopicArgName data member. |
| 21 |
|
| 22 | """
|
| 23 |
|
| 24 | -from inspect import getargspec, ismethod, isfunction
|
| 25 | +from inspect import ismethod, isfunction, signature, Parameter
|
| 26 |
|
| 27 | from .. import py2and3
|
| 28 |
|
| 29 | @@ -133,19 +133,26 @@ class CallArgsInfo: |
| 30 | self.autoTopicArgName = None."""
|
| 31 |
|
| 32 | #args, firstArgIdx, defaultVals, acceptsAllKwargs
|
| 33 | - (allParams, varParamName, varOptParamName, defaultVals) = getargspec(func)
|
| 34 | - if defaultVals is None:
|
| 35 | - defaultVals = []
|
| 36 | - else:
|
| 37 | - defaultVals = list(defaultVals)
|
| 38 | + allParams = []
|
| 39 | + defaultVals = []
|
| 40 | + varParamName = None
|
| 41 | + varOptParamName = None
|
| 42 | + for argName, param in signature(func).parameters.items():
|
| 43 | + if param.default != Parameter.empty:
|
| 44 | + defaultVals.append(param.default)
|
| 45 | + if param.kind == Parameter.VAR_POSITIONAL:
|
| 46 | + varParamName = argName
|
| 47 | + elif param.kind == Parameter.VAR_KEYWORD:
|
| 48 | + varOptParamName = argName
|
| 49 | + else:
|
| 50 | + allParams.append(argName)
|
| 51 |
|
| 52 | self.acceptsAllKwargs = (varOptParamName is not None)
|
| 53 | self.acceptsAllUnnamedArgs = (varParamName is not None)
|
| 54 | -
|
| 55 | self.allParams = allParams
|
| 56 | - del self.allParams[0:firstArgIdx] # does nothing if firstArgIdx == 0
|
| 57 |
|
| 58 | self.numRequired = len(self.allParams) - len(defaultVals)
|
| 59 | + assert len(self.allParams) >= len(defaultVals)
|
| 60 | assert self.numRequired >= 0
|
| 61 |
|
| 62 | # if listener wants topic, remove that arg from args/defaultVals
|
| 63 | -- |
| 64 | 2.34.1 |
| 65 | |