You are passing in an extra positional argument:
args = ([],)
There is one value in that tuple, a list object. It is applied after the other three arguments passed to get_strategy()
, so to request
. Python sees you calling:
get_strategy("backends", "strategy", "storage", [],
request="myReq", backend="myBackend", redirect_uri=None,
acess_token="myAccToken", id="myId")
and the 4 positional arguments are applied against the backends
, strategy
, storage
and request
parameters respectively.
If you meant to pass in 3 positional arguments, then specify args
as an empty tuple:
args = ()
and things work just fine:
>>> def get_strategy(backends, strategy, storage, request=None, backend=None, *args, **kwargs):
... print request
...
>>> def load_strategy(*args, **kwargs):
... get_strategy("backends", "strategy", "storage", *args, **kwargs)
...
>>> args = ()
>>> kwargs = {"acess_token":"myAccToken", "id":"myId"}
>>> load_strategy(request="myReq", backend="myBackend", redirect_uri=None, *args, **kwargs)
myReq