1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
from boltons.funcutils import (copy_function,
total_ordering,
format_invocation,
InstancePartial,
CachedInstancePartial,
noop)
class Greeter:
def __init__(self, greeting):
self.greeting = greeting
def greet(self, excitement='.'):
return self.greeting.capitalize() + excitement
partial_greet = InstancePartial(greet, excitement='!')
cached_partial_greet = CachedInstancePartial(greet, excitement='...')
def native_greet(self):
return self.greet(';')
class SubGreeter(Greeter):
pass
def test_partials():
g = SubGreeter('hello')
assert g.greet() == 'Hello.'
assert g.native_greet() == 'Hello;'
assert g.partial_greet() == 'Hello!'
assert g.cached_partial_greet() == 'Hello...'
assert CachedInstancePartial(g.greet, excitement='s')() == 'Hellos'
g.native_greet = 'native reassigned'
assert g.native_greet == 'native reassigned'
g.partial_greet = 'partial reassigned'
assert g.partial_greet == 'partial reassigned'
g.cached_partial_greet = 'cached_partial reassigned'
assert g.cached_partial_greet == 'cached_partial reassigned'
def test_copy_function():
def callee():
return 1
callee_copy = copy_function(callee)
assert callee is not callee_copy
assert callee() == callee_copy()
def test_total_ordering():
@total_ordering
class Number:
def __init__(self, val):
self.val = int(val)
def __gt__(self, other):
return self.val > other
def __eq__(self, other):
return self.val == other
num = Number(3)
assert num > 0
assert num == 3
assert num < 5
assert num >= 2
assert num != 1
def test_format_invocation():
assert format_invocation('d') == "d()"
assert format_invocation('f', ('a', 'b')) == "f('a', 'b')"
assert format_invocation('g', (), {'x': 'y'}) == "g(x='y')"
assert format_invocation('h', ('a', 'b'), {'x': 'y', 'z': 'zz'}) == "h('a', 'b', x='y', z='zz')"
def test_noop():
assert noop() is None
assert noop(1, 2) is None
assert noop(a=1, b=2) is None
|