Skip to content

Commit

Permalink
Merge pull request #18 from atollk/master
Browse files Browse the repository at this point in the history
Replaced calls to deprecated inspect and unittest functions.
  • Loading branch information
14rcole committed Jan 20, 2021
2 parents 1c87c4b + 47f64a9 commit 3d8ff5f
Show file tree
Hide file tree
Showing 7 changed files with 123 additions and 118 deletions.
2 changes: 1 addition & 1 deletion .travis.yml
@@ -1,7 +1,7 @@
language: python
python:
- "2.7"
- "3.6"
- "3.8"

install: pip install tox-travis
script:
Expand Down
9 changes: 4 additions & 5 deletions callbacks/callbacks.py
Expand Up @@ -19,11 +19,10 @@ def __init__(self, target, target_is_method=False):

self.target = target
self.__name__ = target.__name__
if hasattr(target, '_argspec'):
self._argspec = target._argspec
if isinstance(target, SupportsCallbacks):
self._signature = target._signature
else:
self._argspec = inspect.getargspec(target)

self._signature = inspect.signature(target)
self._target_is_method = target_is_method
self._update_docstring(target)
self._initialize()
Expand Down Expand Up @@ -88,7 +87,7 @@ def _update_docstring(self, target):
%s.remove_callbacks() removes all callbacks
%s.list_callbacks() prints callback information
''' % (target.__name__,
inspect.formatargspec(*self._argspec),
self._signature,
old_docstring,
method_or_function[self._target_is_method],
target.__name__,
Expand Down
1 change: 1 addition & 0 deletions requirements.txt
@@ -0,0 +1 @@
six
177 changes: 91 additions & 86 deletions tests/test_callbacks.py
Expand Up @@ -2,15 +2,20 @@
import unittest
import uuid

import typing

from callbacks import supports_callbacks

called_with = []
def callback(*args, **kwargs):
called_with.append((args, kwargs))

@supports_callbacks()
def foo(bar, baz='bone'):
return (bar, baz)
def foo(bar, baz: typing.Union[int, str] = 'bone', *, qux=None):
if qux is None:
return bar, baz
else:
return bar, baz, qux

called_order = []
def cb1(*args, **kwargs):
Expand All @@ -30,20 +35,20 @@ def setUp(self):

def test_with_defaults(self):
result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(len(called_with), 0)
self.assertEqual(result, (10, 20))
self.assertEqual(len(called_with), 0)

foo.add_callback(callback)

result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(len(called_with), 1)
self.assertEquals(called_with[0], (tuple(), {}))
self.assertEqual(result, (10, 20))
self.assertEqual(len(called_with), 1)
self.assertEqual(called_with[0], (tuple(), {}))

result = foo(10, baz=20)
self.assertEquals(result, (10, 20))
self.assertEquals(len(called_with), 2)
self.assertEquals(called_with[1], (tuple(), {}))
self.assertEqual(result, (10, 20))
self.assertEqual(len(called_with), 2)
self.assertEqual(called_with[1], (tuple(), {}))

def test_raises(self):
self.assertRaises(ValueError, foo.add_callback, callback, priority='boo')
Expand Down Expand Up @@ -72,200 +77,200 @@ def test_callbacks_info(self):
b 0.0 1 pre True N/A
c 1.1 0 post False True
d 0.0 0 exception False N/A'''
self.assertEquals(expected_string, foo._callbacks_info)
self.assertEqual(expected_string, foo._callbacks_info)

def test_with_takes_target_args(self):
result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(len(called_with), 0)
self.assertEqual(result, (10, 20))
self.assertEqual(len(called_with), 0)

foo.add_callback(callback, takes_target_args=True)

result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(len(called_with), 1)
self.assertEquals(called_with[0], ((10, 20), {}))
self.assertEqual(result, (10, 20))
self.assertEqual(len(called_with), 1)
self.assertEqual(called_with[0], ((10, 20), {}))

result = foo(10, baz=20)
self.assertEquals(result, (10, 20))
self.assertEquals(len(called_with), 2)
self.assertEquals(called_with[1], ((10, ), {'baz':20}))
self.assertEqual(result, (10, 20))
self.assertEqual(len(called_with), 2)
self.assertEqual(called_with[1], ((10, ), {'baz':20}))

def test_with_takes_target_result(self):
result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(len(called_with), 0)
self.assertEqual(result, (10, 20))
self.assertEqual(len(called_with), 0)

foo.add_callback(callback, takes_target_result=True)

result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(len(called_with), 1)
self.assertEquals(called_with[0], (((10, 20), ), {}))
self.assertEqual(result, (10, 20))
self.assertEqual(len(called_with), 1)
self.assertEqual(called_with[0], (((10, 20), ), {}))

result = foo(10, baz=20)
self.assertEquals(result, (10, 20))
self.assertEquals(len(called_with), 2)
self.assertEquals(called_with[1], (((10, 20), ), {}))
self.assertEqual(result, (10, 20))
self.assertEqual(len(called_with), 2)
self.assertEqual(called_with[1], (((10, 20), ), {}))

def test_with_takes_target_result_and_args(self):
result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(len(called_with), 0)
self.assertEqual(result, (10, 20))
self.assertEqual(len(called_with), 0)

foo.add_callback(callback, takes_target_result=True,
takes_target_args=True)

result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(len(called_with), 1)
self.assertEquals(called_with[0], (((10, 20), 10, 20), {}))
self.assertEqual(result, (10, 20))
self.assertEqual(len(called_with), 1)
self.assertEqual(called_with[0], (((10, 20), 10, 20), {}))

result = foo(10, baz=20)
self.assertEquals(result, (10, 20))
self.assertEquals(len(called_with), 2)
self.assertEquals(called_with[1], (((10, 20), 10), {'baz':20}))
self.assertEqual(result, (10, 20))
self.assertEqual(len(called_with), 2)
self.assertEqual(called_with[1], (((10, 20), 10), {'baz':20}))

def test_before(self):
result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(len(called_with), 0)
self.assertEqual(result, (10, 20))
self.assertEqual(len(called_with), 0)

foo.add_pre_callback(callback)

result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(len(called_with), 1)
self.assertEquals(called_with[0], (tuple(), {}))
self.assertEqual(result, (10, 20))
self.assertEqual(len(called_with), 1)
self.assertEqual(called_with[0], (tuple(), {}))

result = foo(10, baz=20)
self.assertEquals(result, (10, 20))
self.assertEquals(len(called_with), 2)
self.assertEquals(called_with[1], (tuple(), {}))
self.assertEqual(result, (10, 20))
self.assertEqual(len(called_with), 2)
self.assertEqual(called_with[1], (tuple(), {}))

def test_before_with_target_args(self):
result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(len(called_with), 0)
self.assertEqual(result, (10, 20))
self.assertEqual(len(called_with), 0)

foo.add_pre_callback(callback, takes_target_args=True)

result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(len(called_with), 1)
self.assertEquals(called_with[0], ((10, 20), {}))
self.assertEqual(result, (10, 20))
self.assertEqual(len(called_with), 1)
self.assertEqual(called_with[0], ((10, 20), {}))

result = foo(10, baz=20)
self.assertEquals(result, (10, 20))
self.assertEquals(len(called_with), 2)
self.assertEquals(called_with[1], ((10, ), {'baz':20}))
self.assertEqual(result, (10, 20))
self.assertEqual(len(called_with), 2)
self.assertEqual(called_with[1], ((10, ), {'baz':20}))

def test_multiple_before(self):
result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(len(called_order), 0)
self.assertEqual(result, (10, 20))
self.assertEqual(len(called_order), 0)

foo.add_pre_callback(cb1)
foo.add_pre_callback(cb2)
foo.add_pre_callback(cb3)

result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(called_order, ['cb1','cb2','cb3'])
self.assertEqual(result, (10, 20))
self.assertEqual(called_order, ['cb1','cb2','cb3'])

def test_multiple_before_priority(self):
result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(len(called_order), 0)
self.assertEqual(result, (10, 20))
self.assertEqual(len(called_order), 0)

foo.add_pre_callback(cb1)
foo.add_pre_callback(cb2, priority=1)
foo.add_pre_callback(cb3, priority=1)

result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(called_order, ['cb2','cb3','cb1'])
self.assertEqual(result, (10, 20))
self.assertEqual(called_order, ['cb2','cb3','cb1'])

def test_multiple(self):
result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(len(called_order), 0)
self.assertEqual(result, (10, 20))
self.assertEqual(len(called_order), 0)

foo.add_callback(cb1)
foo.add_callback(cb2)
foo.add_callback(cb3)

result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(called_order, ['cb1','cb2','cb3'])
self.assertEqual(result, (10, 20))
self.assertEqual(called_order, ['cb1','cb2','cb3'])

def test_multiple_priority(self):
result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(len(called_order), 0)
self.assertEqual(result, (10, 20))
self.assertEqual(len(called_order), 0)

foo.add_callback(cb1)
foo.add_callback(cb2, priority=1)
foo.add_callback(cb3, priority=1)

result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(called_order, ['cb2','cb3','cb1'])
self.assertEqual(result, (10, 20))
self.assertEqual(called_order, ['cb2','cb3','cb1'])

def test_remove_callback(self):
result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(len(called_order), 0)
self.assertEqual(result, (10, 20))
self.assertEqual(len(called_order), 0)

foo.add_callback(cb1)
label = foo.add_callback(cb2)
foo.add_callback(cb3)

result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(called_order, ['cb1','cb2','cb3'])
self.assertEqual(result, (10, 20))
self.assertEqual(called_order, ['cb1','cb2','cb3'])

foo.remove_callback(label)

result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(called_order, ['cb1','cb2','cb3', 'cb1', 'cb3'])
self.assertEqual(result, (10, 20))
self.assertEqual(called_order, ['cb1','cb2','cb3', 'cb1', 'cb3'])

def test_remove_callbacks(self):
result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(len(called_order), 0)
self.assertEqual(result, (10, 20))
self.assertEqual(len(called_order), 0)

l1 = foo.add_callback(cb1)
l2 = foo.add_callback(cb2)
foo.add_callback(cb3)

result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(called_order, ['cb1','cb2','cb3'])
self.assertEqual(result, (10, 20))
self.assertEqual(called_order, ['cb1','cb2','cb3'])

foo.remove_callbacks([l1, l2])

result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(called_order, ['cb1','cb2','cb3', 'cb3'])
self.assertEqual(result, (10, 20))
self.assertEqual(called_order, ['cb1','cb2','cb3', 'cb3'])

foo.remove_callbacks()

result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(called_order, ['cb1','cb2','cb3', 'cb3'])
self.assertEqual(result, (10, 20))
self.assertEqual(called_order, ['cb1','cb2','cb3', 'cb3'])

def test_labels(self):
result = foo(10, 20)
self.assertEquals(result, (10, 20))
self.assertEquals(len(called_order), 0)
self.assertEqual(result, (10, 20))
self.assertEqual(len(called_order), 0)

l1 = foo.add_callback(cb1, label=1)
l2 = foo.add_pre_callback(cb2, label=2)
l3 = foo.add_callback(cb3)

self.assertEquals(l1, 1)
self.assertEquals(l2, 2)
self.assertEquals(type(l3), type(uuid.uuid4()))
self.assertEqual(l1, 1)
self.assertEqual(l2, 2)
self.assertEqual(type(l3), type(uuid.uuid4()))

0 comments on commit 3d8ff5f

Please sign in to comment.