File: test_create_from_signature.py

package info (click to toggle)
python-makefun 1.15.4-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 440 kB
  • sloc: python: 2,384; makefile: 2
file content (37 lines) | stat: -rw-r--r-- 1,153 bytes parent folder | download
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
import sys

import pytest

from makefun import create_function

try:  # python 3.3+
    from inspect import signature, Signature, Parameter
except ImportError:
    from funcsigs import signature, Signature, Parameter


def my_handler(*args, **kwargs):
    """This docstring will be used in the generated function by default"""
    print("my_handler called !")
    return args, kwargs


def test_positional_only():
    """Tests that as of today one cannot create positional-only functions"""

    params = [Parameter('a', kind=Parameter.POSITIONAL_ONLY),
              Parameter('args', kind=Parameter.VAR_POSITIONAL),
              Parameter('kwargs', kind=Parameter.VAR_KEYWORD)]

    func_signature = Signature(parameters=params)

    if sys.version_info < (3, 8):
        with pytest.raises(SyntaxError):
            create_function(func_signature, my_handler, func_name="foo")
    else:
        dynamic_fun =create_function(func_signature, my_handler, func_name="foo")
        assert "\n" + dynamic_fun.__source__ == """
def foo(a, /, *args, **kwargs):
    return _func_impl_(a, *args, **kwargs)
"""
        assert dynamic_fun(0, 1) == ((0, 1), {})