pyln: Check to see if we have annotations on funcs before accessing

We were indiscriminately accessing the `__annotations__` which could cause
issues if the function had been wrapped by some functions such as
`functools.partial`. This just checks that the access is safe before doing it.

Suggested-by: jarret <@jarret>
Signed-off-by: Christian Decker <@cdecker>
This commit is contained in:
Christian Decker 2019-12-15 20:10:40 +01:00
parent 8c387932c0
commit de619b1754

View File

@ -317,9 +317,10 @@ class Plugin(object):
@staticmethod
def _coerce_arguments(func, ba):
args = OrderedDict()
annotations = func.__annotations__ if hasattr(func, "__annotations__") else {}
for key, val in ba.arguments.items():
annotation = func.__annotations__.get(key)
if annotation == Millisatoshi:
annotation = annotations.get(key, None)
if annotation is not None and annotation == Millisatoshi:
args[key] = Millisatoshi(val)
else:
args[key] = val