pylightning: Allow both kwargs as well as positional args

We don't allow a mix (just like JSON-RPC), but we can use either or
now.

Signed-off-by: Christian Decker <decker.christian@gmail.com>
This commit is contained in:
Christian Decker 2018-12-05 15:33:59 +01:00
parent b7da41e674
commit a50529bcb0
2 changed files with 10 additions and 3 deletions

View File

@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
### Changed
- JSON API: `pay` and `decodepay` accept and ignore `lightning:` prefixes.
- pylightning: Allow either keyword arguments or positional arguments.
### Deprecated

View File

@ -48,8 +48,13 @@ class UnixDomainSocketRpc(object):
"""
name = name.replace('_', '-')
def wrapper(**kwargs):
return self.call(name, payload=kwargs)
def wrapper(*args, **kwargs):
if len(args) != 0 and len(kwargs) != 0:
raise RpcError("Cannot mix positional and non-positional arguments")
elif len(args) != 0:
return self.call(name, payload=args)
else:
return self.call(name, payload=kwargs)
return wrapper
def call(self, method, payload=None):
@ -58,7 +63,8 @@ class UnixDomainSocketRpc(object):
if payload is None:
payload = {}
# Filter out arguments that are None
payload = {k: v for k, v in payload.items() if v is not None}
if isinstance(payload, dict):
payload = {k: v for k, v in payload.items() if v is not None}
# FIXME: we open a new socket for every readobj call...
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)