Skip to content

funkify

funkify ⚓︎

funkify ~ make modules callable

Functions⚓︎

funkify.default_export(funk: T, *, key: Optional[str] = None) -> T ⚓︎

Assign a function to a module's call attr

Parameters:

Name Type Description Default
funk T

function to be made callable

required
key str

module name as it would appear in sys.modules

None

Returns:

Type Description
T

Callable[..., T]: the function passed in

Raises:

Type Description
AttributeError

if key is None and exported obj no module attr

ValueError

if key is not in sys.modules

Source code in libs/funkify/funkify/__init__.py
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
def default_export(
    funk: T,
    *,
    key: Optional[str] = None,
) -> T:
    """Assign a function to a module's __call__ attr

    Args:
        funk: function to be made callable
        key (str): module name as it would appear in sys.modules

    Returns:
        Callable[..., T]: the function passed in

    Raises:
        AttributeError: if key is None and exported obj no __module__ attr
        ValueError: if key is not in sys.modules

    """
    try:
        _module: str = key or funk.__module__
    except AttributeError as ae:
        raise AttributeError(
            f"funk ({funk}) has no __module__ attribute; plz provide module key"
        ) from ae

    class ModuleCls(ModuleType):
        def __call__(self, *args: Any, **kwargs: Any) -> T:
            return cast(T, funk(*args, **kwargs))  # type: ignore[operator]

    class ModuleClsStaticValue(ModuleCls):
        def __call__(self, *args: Any, **kwargs: Any) -> T:
            return funk

    mod_cls = ModuleCls if callable(funk) else ModuleClsStaticValue

    try:
        sys.modules[_module].__class__ = mod_cls
    except KeyError as ke:
        raise ValueError(f"{_module} not found in sys.modules") from ke
    return funk

funkify.funkify(funk: Callable[..., T], *, key: Optional[str] = None) -> Callable[..., T] ⚓︎

Assign a function to a module's call attr

Parameters:

Name Type Description Default
funk Callable[..., T]

function to be made callable

required
key str

module name as it would appear in sys.modules

None

Returns:

Type Description
Callable[..., T]

Callable[..., T]: the function passed in

Source code in libs/funkify/funkify/__init__.py
67
68
69
70
71
72
73
74
75
76
77
78
79
@default_export
def funkify(funk: Callable[..., T], *, key: Optional[str] = None) -> Callable[..., T]:
    """Assign a function to a module's __call__ attr

    Args:
        funk: function to be made callable
        key (str): module name as it would appear in sys.modules

    Returns:
        Callable[..., T]: the function passed in

    """
    return default_export(funk=funk, key=key)

Modules⚓︎

funkify.__about__ ⚓︎

Package metadata/info

funkify.__main__ ⚓︎

pkg entry ~ python -m funkify

Functions⚓︎
funkify.__main__.main() -> None ⚓︎

Print package metadata

Source code in libs/funkify/funkify/__main__.py
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def main() -> None:
    """Print package metadata"""
    import json

    sys.stdout.write(
        json.dumps(
            {
                "package": __title__,
                "version": __version__,
                "pkgroot": __pkgroot__,
            },
            indent=2,
        )
    )