winipedia-utils 0.1.63__py3-none-any.whl → 0.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of winipedia-utils might be problematic. Click here for more details.
- winipedia_utils/concurrent/concurrent.py +245 -242
- winipedia_utils/concurrent/multiprocessing.py +130 -115
- winipedia_utils/concurrent/multithreading.py +93 -93
- winipedia_utils/consts.py +23 -23
- winipedia_utils/data/__init__.py +1 -1
- winipedia_utils/data/dataframe/__init__.py +1 -0
- winipedia_utils/data/dataframe/cleaning.py +378 -0
- winipedia_utils/data/structures/__init__.py +1 -0
- winipedia_utils/data/structures/dicts.py +16 -0
- winipedia_utils/django/__init__.py +24 -24
- winipedia_utils/django/bulk.py +538 -538
- winipedia_utils/django/command.py +334 -334
- winipedia_utils/django/database.py +289 -289
- winipedia_utils/git/__init__.py +1 -1
- winipedia_utils/git/gitignore/__init__.py +1 -1
- winipedia_utils/git/gitignore/gitignore.py +136 -136
- winipedia_utils/git/pre_commit/__init__.py +1 -1
- winipedia_utils/git/pre_commit/config.py +70 -70
- winipedia_utils/git/pre_commit/hooks.py +109 -109
- winipedia_utils/git/pre_commit/run_hooks.py +49 -49
- winipedia_utils/iterating/__init__.py +1 -1
- winipedia_utils/iterating/iterate.py +29 -29
- winipedia_utils/logging/ansi.py +6 -6
- winipedia_utils/logging/config.py +64 -64
- winipedia_utils/logging/logger.py +26 -26
- winipedia_utils/modules/class_.py +119 -119
- winipedia_utils/modules/function.py +101 -103
- winipedia_utils/modules/module.py +379 -379
- winipedia_utils/modules/package.py +390 -390
- winipedia_utils/oop/mixins/meta.py +333 -331
- winipedia_utils/oop/mixins/mixin.py +37 -37
- winipedia_utils/os/__init__.py +1 -1
- winipedia_utils/os/os.py +63 -63
- winipedia_utils/projects/__init__.py +1 -1
- winipedia_utils/projects/poetry/__init__.py +1 -1
- winipedia_utils/projects/poetry/config.py +91 -91
- winipedia_utils/projects/poetry/poetry.py +31 -31
- winipedia_utils/projects/project.py +48 -48
- winipedia_utils/pyside/__init__.py +1 -1
- winipedia_utils/pyside/core/__init__.py +1 -1
- winipedia_utils/pyside/core/py_qiodevice.py +476 -476
- winipedia_utils/pyside/ui/__init__.py +1 -1
- winipedia_utils/pyside/ui/base/__init__.py +1 -1
- winipedia_utils/pyside/ui/base/base.py +180 -180
- winipedia_utils/pyside/ui/pages/__init__.py +1 -1
- winipedia_utils/pyside/ui/pages/base/__init__.py +1 -1
- winipedia_utils/pyside/ui/pages/base/base.py +92 -92
- winipedia_utils/pyside/ui/pages/browser.py +26 -26
- winipedia_utils/pyside/ui/pages/player.py +85 -85
- winipedia_utils/pyside/ui/widgets/__init__.py +1 -1
- winipedia_utils/pyside/ui/widgets/browser.py +243 -243
- winipedia_utils/pyside/ui/widgets/clickable_widget.py +57 -57
- winipedia_utils/pyside/ui/widgets/media_player.py +430 -430
- winipedia_utils/pyside/ui/widgets/notification.py +78 -78
- winipedia_utils/pyside/ui/windows/__init__.py +1 -1
- winipedia_utils/pyside/ui/windows/base/__init__.py +1 -1
- winipedia_utils/pyside/ui/windows/base/base.py +49 -49
- winipedia_utils/resources/__init__.py +1 -1
- winipedia_utils/resources/svgs/__init__.py +1 -1
- winipedia_utils/resources/svgs/download_arrow.svg +2 -2
- winipedia_utils/resources/svgs/exit_fullscreen_icon.svg +5 -5
- winipedia_utils/resources/svgs/fullscreen_icon.svg +2 -2
- winipedia_utils/resources/svgs/menu_icon.svg +3 -3
- winipedia_utils/resources/svgs/pause_icon.svg +3 -3
- winipedia_utils/resources/svgs/play_icon.svg +16 -16
- winipedia_utils/resources/svgs/plus_icon.svg +23 -23
- winipedia_utils/resources/svgs/svg.py +15 -15
- winipedia_utils/security/__init__.py +1 -1
- winipedia_utils/security/cryptography.py +29 -29
- winipedia_utils/security/keyring.py +70 -70
- winipedia_utils/setup.py +47 -47
- winipedia_utils/testing/assertions.py +23 -23
- winipedia_utils/testing/convention.py +177 -177
- winipedia_utils/testing/create_tests.py +291 -291
- winipedia_utils/testing/fixtures.py +28 -28
- winipedia_utils/testing/tests/base/fixtures/__init__.py +1 -1
- winipedia_utils/testing/tests/base/fixtures/fixture.py +6 -6
- winipedia_utils/testing/tests/base/fixtures/scopes/class_.py +33 -33
- winipedia_utils/testing/tests/base/fixtures/scopes/function.py +7 -7
- winipedia_utils/testing/tests/base/fixtures/scopes/module.py +31 -31
- winipedia_utils/testing/tests/base/fixtures/scopes/package.py +7 -7
- winipedia_utils/testing/tests/base/fixtures/scopes/session.py +312 -312
- winipedia_utils/testing/tests/base/utils/utils.py +82 -82
- winipedia_utils/testing/tests/conftest.py +32 -32
- winipedia_utils/text/string.py +126 -126
- {winipedia_utils-0.1.63.dist-info → winipedia_utils-0.2.0.dist-info}/METADATA +5 -4
- winipedia_utils-0.2.0.dist-info/RECORD +103 -0
- {winipedia_utils-0.1.63.dist-info → winipedia_utils-0.2.0.dist-info}/WHEEL +1 -1
- {winipedia_utils-0.1.63.dist-info → winipedia_utils-0.2.0.dist-info/licenses}/LICENSE +21 -21
- winipedia_utils/data/dataframe.py +0 -7
- winipedia_utils-0.1.63.dist-info/RECORD +0 -100
|
@@ -1,103 +1,101 @@
|
|
|
1
|
-
"""Function utilities for introspection and manipulation.
|
|
2
|
-
|
|
3
|
-
This module provides utility functions for working with Python functions,
|
|
4
|
-
including extracting functions from modules and manipulating function objects.
|
|
5
|
-
These utilities are particularly useful for reflection, testing, and
|
|
6
|
-
dynamic code generation.
|
|
7
|
-
"""
|
|
8
|
-
|
|
9
|
-
import inspect
|
|
10
|
-
from collections.abc import Callable
|
|
11
|
-
from importlib import import_module
|
|
12
|
-
from types import ModuleType
|
|
13
|
-
from typing import Any
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def is_func_or_method(obj: Any) -> bool:
|
|
17
|
-
"""Return True if *obj* is a function or method.
|
|
18
|
-
|
|
19
|
-
This function checks if the given object is a function or method,
|
|
20
|
-
including those defined in a class body.
|
|
21
|
-
|
|
22
|
-
Args:
|
|
23
|
-
obj: The object to check
|
|
24
|
-
|
|
25
|
-
Returns:
|
|
26
|
-
bool: True if the object is a function or method, False otherwise
|
|
27
|
-
|
|
28
|
-
"""
|
|
29
|
-
return inspect.isfunction(obj) or inspect.ismethod(obj)
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
def is_func(obj: Any) -> bool:
|
|
33
|
-
"""Return True if *obj* is a 'method-like' attribute as it appears in a class body.
|
|
34
|
-
|
|
35
|
-
Accepts:
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
• plain functions (instance methods)
|
|
39
|
-
• staticmethod / classmethod descriptors
|
|
40
|
-
• property descriptors (getter counts as method)
|
|
41
|
-
• decorated functions that keep a __wrapped__ chain
|
|
42
|
-
|
|
43
|
-
Returns:
|
|
44
|
-
bool: True if the object is a method-like attribute, False otherwise
|
|
45
|
-
|
|
46
|
-
"""
|
|
47
|
-
# plain function
|
|
48
|
-
|
|
49
|
-
if is_func_or_method(obj):
|
|
50
|
-
return True
|
|
51
|
-
|
|
52
|
-
if isinstance(obj, (staticmethod, classmethod, property)):
|
|
53
|
-
return True
|
|
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
|
-
func
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
if isinstance(method,
|
|
100
|
-
method = method.
|
|
101
|
-
|
|
102
|
-
method = method.fget
|
|
103
|
-
return inspect.unwrap(method)
|
|
1
|
+
"""Function utilities for introspection and manipulation.
|
|
2
|
+
|
|
3
|
+
This module provides utility functions for working with Python functions,
|
|
4
|
+
including extracting functions from modules and manipulating function objects.
|
|
5
|
+
These utilities are particularly useful for reflection, testing, and
|
|
6
|
+
dynamic code generation.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import inspect
|
|
10
|
+
from collections.abc import Callable
|
|
11
|
+
from importlib import import_module
|
|
12
|
+
from types import ModuleType
|
|
13
|
+
from typing import Any
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def is_func_or_method(obj: Any) -> bool:
|
|
17
|
+
"""Return True if *obj* is a function or method.
|
|
18
|
+
|
|
19
|
+
This function checks if the given object is a function or method,
|
|
20
|
+
including those defined in a class body.
|
|
21
|
+
|
|
22
|
+
Args:
|
|
23
|
+
obj: The object to check
|
|
24
|
+
|
|
25
|
+
Returns:
|
|
26
|
+
bool: True if the object is a function or method, False otherwise
|
|
27
|
+
|
|
28
|
+
"""
|
|
29
|
+
return inspect.isfunction(obj) or inspect.ismethod(obj)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def is_func(obj: Any) -> bool:
|
|
33
|
+
"""Return True if *obj* is a 'method-like' attribute as it appears in a class body.
|
|
34
|
+
|
|
35
|
+
Accepts:
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
• plain functions (instance methods)
|
|
39
|
+
• staticmethod / classmethod descriptors
|
|
40
|
+
• property descriptors (getter counts as method)
|
|
41
|
+
• decorated functions that keep a __wrapped__ chain
|
|
42
|
+
|
|
43
|
+
Returns:
|
|
44
|
+
bool: True if the object is a method-like attribute, False otherwise
|
|
45
|
+
|
|
46
|
+
"""
|
|
47
|
+
# plain function
|
|
48
|
+
|
|
49
|
+
if is_func_or_method(obj):
|
|
50
|
+
return True
|
|
51
|
+
|
|
52
|
+
if isinstance(obj, (staticmethod, classmethod, property)):
|
|
53
|
+
return True
|
|
54
|
+
|
|
55
|
+
unwrapped = inspect.unwrap(obj)
|
|
56
|
+
|
|
57
|
+
return is_func_or_method(unwrapped)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def get_all_functions_from_module(module: ModuleType | str) -> list[Callable[..., Any]]:
|
|
61
|
+
"""Get all functions defined in a module.
|
|
62
|
+
|
|
63
|
+
Retrieves all function objects that are defined directly in the specified module,
|
|
64
|
+
excluding imported functions.
|
|
65
|
+
The functions are sorted by their line number in the module.
|
|
66
|
+
|
|
67
|
+
Args:
|
|
68
|
+
module: The module to extract functions from
|
|
69
|
+
|
|
70
|
+
Returns:
|
|
71
|
+
A list of callable functions defined in the module
|
|
72
|
+
|
|
73
|
+
"""
|
|
74
|
+
from winipedia_utils.modules.module import get_def_line, get_module_of_obj
|
|
75
|
+
|
|
76
|
+
if isinstance(module, str):
|
|
77
|
+
module = import_module(module)
|
|
78
|
+
funcs = [
|
|
79
|
+
func
|
|
80
|
+
for _name, func in inspect.getmembers(module, is_func)
|
|
81
|
+
if get_module_of_obj(func).__name__ == module.__name__
|
|
82
|
+
]
|
|
83
|
+
# sort by definition order
|
|
84
|
+
return sorted(funcs, key=get_def_line)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def unwrap_method(method: Any) -> Callable[..., Any] | Any:
|
|
88
|
+
"""Unwrap a method to its underlying function.
|
|
89
|
+
|
|
90
|
+
Args:
|
|
91
|
+
method: The method to unwrap
|
|
92
|
+
|
|
93
|
+
Returns:
|
|
94
|
+
The underlying function of the method
|
|
95
|
+
|
|
96
|
+
"""
|
|
97
|
+
if isinstance(method, (staticmethod, classmethod)):
|
|
98
|
+
method = method.__func__
|
|
99
|
+
if isinstance(method, property):
|
|
100
|
+
method = method.fget
|
|
101
|
+
return inspect.unwrap(method)
|