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 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
# stdlib
import inspect
from typing import Any, get_type_hints
# this package
from domdf_python_tools.delegators import delegate_kwargs, delegates
def f(a: int = 1, b: float = 1.1, c: int = 2, d: list = [], e: tuple = (), f: str = '', g: bytes = b'') -> int:
pass
def test_delegate_kwargs():
@delegate_kwargs(f)
def g(b: int, a: int = 7, **kwargs: Any):
pass
@delegate_kwargs(f)
def h(a: int, b: int):
pass
sig = inspect.signature(g)
assert list(sig.parameters.keys()) == ['b', 'a', 'c', 'd', 'e', 'f', 'g']
assert sig.parameters['a'].default == 7
assert sig.parameters['b'].default is inspect.Parameter.empty
assert sig.parameters['c'].default == 2
assert sig.parameters['d'].default == []
assert sig.parameters['e'].default == ()
assert sig.parameters['f'].default == ''
assert sig.parameters['g'].default == b''
assert sig.return_annotation is inspect.Parameter.empty # TODO
assert get_type_hints(g) == {
'b': int,
'a': int,
'c': int,
'd': list,
'e': tuple,
'f': str,
'g': bytes,
"return": int,
}
assert list(inspect.signature(h).parameters.keys()) == ['a', 'b']
def test_delegates():
@delegates(f)
def g(*args, **kwargs):
pass
@delegates(f)
def h(a: int, b: int):
pass
sig = inspect.signature(g)
assert list(sig.parameters.keys()) == ['a', 'b', 'c', 'd', 'e', 'f', 'g']
assert sig.parameters['a'].default == 1
assert sig.parameters['b'].default == 1.1
assert sig.parameters['c'].default == 2
assert sig.parameters['d'].default == []
assert sig.parameters['e'].default == ()
assert sig.parameters['f'].default == ''
assert sig.parameters['g'].default == b''
assert sig.return_annotation == int
assert get_type_hints(g) == {
'a': int,
'b': float,
'c': int,
'd': list,
'e': tuple,
'f': str,
'g': bytes,
"return": int,
}
assert list(inspect.signature(h).parameters.keys()) == ['a', 'b']
def test_delegates_method():
class F:
@delegates(f)
def g(self, *args, **kwargs) -> str:
pass
sig = inspect.signature(F.g)
assert list(sig.parameters.keys()) == ["self", 'a', 'b', 'c', 'd', 'e', 'f', 'g']
assert sig.parameters['a'].default == 1
assert sig.parameters['b'].default == 1.1
assert sig.parameters['c'].default == 2
assert sig.parameters['d'].default == []
assert sig.parameters['e'].default == ()
assert sig.parameters['f'].default == ''
assert sig.parameters['g'].default == b''
assert sig.return_annotation == str
assert get_type_hints(F.g) == {
'a': int,
'b': float,
'c': int,
'd': list,
'e': tuple,
'f': str,
'g': bytes,
"return": str,
}
|