Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Exposing inargs and inkwargs as Callable.args and .kwargs #1453

Merged
merged 2 commits into from May 18, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
9 changes: 5 additions & 4 deletions holoviews/core/spaces.py
Expand Up @@ -458,7 +458,8 @@ def __init__(self, callable, **params):
**dict(params, name=util.callable_name(callable)))
self._memoized = {}
self._is_overlay = False

self.args = None
self.kwargs = None

@property
def argspec(self):
Expand All @@ -485,7 +486,7 @@ def clone(self, callable=None, **overrides):

def __call__(self, *args, **kwargs):
# Nothing to do for callbacks that accept no arguments
(inargs, inkwargs) = (args, kwargs)
(self.args, self.kwargs) = (args, kwargs)
if not args and not kwargs: return self.callable()
inputs = [i for i in self.inputs if isinstance(i, DynamicMap)]
streams = []
Expand Down Expand Up @@ -518,8 +519,8 @@ def __call__(self, *args, **kwargs):
try:
ret = self.callable(*args, **kwargs)
except:
posstr = ', '.join(['%r' % el for el in inargs]) if inargs else ''
kwstr = ', '.join('%s=%r' % (k,v) for k,v in inkwargs.items())
posstr = ', '.join(['%r' % el for el in self.args]) if self.args else ''
kwstr = ', '.join('%s=%r' % (k,v) for k,v in self.kwargs.items())
argstr = ', '.join([el for el in [posstr, kwstr] if el])
message = ("Exception raised in callable '{name}' of type '{ctype}'.\n"
"Invoked as {name}({argstr})")
Expand Down
21 changes: 21 additions & 0 deletions tests/testcallable.py
Expand Up @@ -198,6 +198,27 @@ def mixed_example(a,b, c=10, d=20):
self.assertEqual(Callable(mixed_example)(3,5,5), 33)


class TestLastArgsKwargs(ComparisonTestCase):

def test_args_none_before_invocation(self):
c = Callable(lambda x,y: x+y)
self.assertEqual(c.args, None)

def test_kwargs_none_before_invocation(self):
c = Callable(lambda x,y: x+y)
self.assertEqual(c.kwargs, None)

def test_args_invocation(self):
c = Callable(lambda x,y: x+y)
c(1,2)
self.assertEqual(c.args, (1,2))

def test_kwargs_invocation(self):
c = Callable(lambda x,y: x+y)
c(x=1,y=4)
self.assertEqual(c.kwargs, dict(x=1,y=4))


class TestDynamicMapInvocation(ComparisonTestCase):
"""
Test that DynamicMap passes kdims and stream parameters correctly to
Expand Down