winipedia-utils 0.1.26__py3-none-any.whl → 0.1.28__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.
- winipedia_utils/modules/class_.py +40 -0
- winipedia_utils/pyside/ui/base/base.py +5 -3
- winipedia_utils/pyside/ui/pages/base/base.py +1 -1
- {winipedia_utils-0.1.26.dist-info → winipedia_utils-0.1.28.dist-info}/METADATA +1 -1
- {winipedia_utils-0.1.26.dist-info → winipedia_utils-0.1.28.dist-info}/RECORD +7 -7
- {winipedia_utils-0.1.26.dist-info → winipedia_utils-0.1.28.dist-info}/LICENSE +0 -0
- {winipedia_utils-0.1.26.dist-info → winipedia_utils-0.1.28.dist-info}/WHEEL +0 -0
@@ -74,3 +74,43 @@ def get_all_cls_from_module(module: ModuleType | str) -> list[type]:
|
|
74
74
|
]
|
75
75
|
# sort by definition order
|
76
76
|
return sorted(classes, key=get_def_line)
|
77
|
+
|
78
|
+
|
79
|
+
def get_all_subclasses(cls: type) -> list[type]:
|
80
|
+
"""Get all subclasses of a class.
|
81
|
+
|
82
|
+
Retrieves all classes that are subclasses of the specified class.
|
83
|
+
Also returns subclasses of subclasses (recursive).
|
84
|
+
|
85
|
+
Args:
|
86
|
+
cls: The class to find subclasses of
|
87
|
+
|
88
|
+
Returns:
|
89
|
+
A list of subclasses of the given class
|
90
|
+
|
91
|
+
"""
|
92
|
+
subclasses_set = set(cls.__subclasses__())
|
93
|
+
for subclass in cls.__subclasses__():
|
94
|
+
subclasses_set.update(get_all_subclasses(subclass))
|
95
|
+
return list(subclasses_set)
|
96
|
+
|
97
|
+
|
98
|
+
def get_all_nonabstract_subclasses(cls: type) -> list[type]:
|
99
|
+
"""Get all non-abstract subclasses of a class.
|
100
|
+
|
101
|
+
Retrieves all classes that are subclasses of the specified class,
|
102
|
+
excluding abstract classes. Also returns subclasses of subclasses
|
103
|
+
(recursive).
|
104
|
+
|
105
|
+
Args:
|
106
|
+
cls: The class to find subclasses of
|
107
|
+
|
108
|
+
Returns:
|
109
|
+
A list of non-abstract subclasses of the given class
|
110
|
+
|
111
|
+
"""
|
112
|
+
return [
|
113
|
+
subclass
|
114
|
+
for subclass in get_all_subclasses(cls)
|
115
|
+
if not inspect.isabstract(subclass)
|
116
|
+
]
|
@@ -11,6 +11,9 @@ from PySide6.QtCore import QObject
|
|
11
11
|
from PySide6.QtGui import QIcon
|
12
12
|
from PySide6.QtWidgets import QStackedWidget
|
13
13
|
|
14
|
+
from winipedia_utils.modules.class_ import (
|
15
|
+
get_all_nonabstract_subclasses,
|
16
|
+
)
|
14
17
|
from winipedia_utils.modules.package import get_main_package, walk_package
|
15
18
|
from winipedia_utils.oop.mixins.meta import ABCImplementationLoggingMeta
|
16
19
|
from winipedia_utils.resources.svgs.svg import get_svg_path
|
@@ -76,9 +79,8 @@ class Base(metaclass=QABCImplementationLoggingMeta):
|
|
76
79
|
|
77
80
|
_ = list(walk_package(package))
|
78
81
|
|
79
|
-
children = cls
|
80
|
-
|
81
|
-
return [child for child in sorted_children if not child.is_abstract_cls()]
|
82
|
+
children = get_all_nonabstract_subclasses(cls)
|
83
|
+
return sorted(children, key=lambda cls: cls.__name__)
|
82
84
|
|
83
85
|
@final
|
84
86
|
def set_current_page(self, page_cls: type["BasePage"]) -> None:
|
@@ -49,7 +49,7 @@ class Base(BaseUI, QWidget):
|
|
49
49
|
self.menu_dropdown = QMenu(self.menu_button)
|
50
50
|
self.menu_button.setMenu(self.menu_dropdown)
|
51
51
|
|
52
|
-
for page_cls in
|
52
|
+
for page_cls in Base.get_subclasses():
|
53
53
|
action = self.menu_dropdown.addAction(page_cls.get_display_name())
|
54
54
|
action.triggered.connect(partial(self.set_current_page, page_cls))
|
55
55
|
|
@@ -24,7 +24,7 @@ winipedia_utils/logging/ansi.py,sha256=54MIYKppssv-TBFavOAi28aCo4Cg--cChTzdjGsBX
|
|
24
24
|
winipedia_utils/logging/config.py,sha256=NAXCxVRkEfkf119HCg1zrdP1l37DW4cFDHvKrBEjQ0o,2959
|
25
25
|
winipedia_utils/logging/logger.py,sha256=tCcUwAVLVr3Bec7_i-SoKvBPNCJSEmyuvBW2gbqjPMk,727
|
26
26
|
winipedia_utils/modules/__init__.py,sha256=e3CFaC3FhK4ibknFOv1bqOZxA7XeVwmLqWX7oajUm78,51
|
27
|
-
winipedia_utils/modules/class_.py,sha256=
|
27
|
+
winipedia_utils/modules/class_.py,sha256=KlMQAqhthW1vyR7hAD4PQKNIcPbnN8X6lccfsEPa8H8,3565
|
28
28
|
winipedia_utils/modules/function.py,sha256=cHLGiD7huPdfwUDdI0IlbB_Pd4woWGgbyvrsjivHBpc,2987
|
29
29
|
winipedia_utils/modules/module.py,sha256=RAxEp_yLc7KyHke05ZmTkUCfKof_l4k6mRtLP4xBgL4,12884
|
30
30
|
winipedia_utils/modules/package.py,sha256=8l8GuGGh3JDvDrj0rAs6AgcRfKYPSj3DJRx-zdjbB3Q,13105
|
@@ -43,10 +43,10 @@ winipedia_utils/py.typed,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
43
43
|
winipedia_utils/pyside/__init__.py,sha256=knliQxknKWqxCEfxlI1K02OtbBfnTkYUZFqyYcLJNDI,52
|
44
44
|
winipedia_utils/pyside/ui/__init__.py,sha256=h5NJ6WyveMMqxIgt0x65_mqndtncxgNmx5816KD3ubU,55
|
45
45
|
winipedia_utils/pyside/ui/base/__init__.py,sha256=p-maJQh7gYbXwhkqKU4wL6UNGzRAy988JP8_qLoTZDk,24
|
46
|
-
winipedia_utils/pyside/ui/base/base.py,sha256=
|
46
|
+
winipedia_utils/pyside/ui/base/base.py,sha256=2a0RJV3zUcAXoehWl8i2QJB6R1Y4mJ7lkmJjEcNtucI,3820
|
47
47
|
winipedia_utils/pyside/ui/pages/__init__.py,sha256=p-maJQh7gYbXwhkqKU4wL6UNGzRAy988JP8_qLoTZDk,24
|
48
48
|
winipedia_utils/pyside/ui/pages/base/__init__.py,sha256=p-maJQh7gYbXwhkqKU4wL6UNGzRAy988JP8_qLoTZDk,24
|
49
|
-
winipedia_utils/pyside/ui/pages/base/base.py,sha256=
|
49
|
+
winipedia_utils/pyside/ui/pages/base/base.py,sha256=9pt0Hsewo2q_sMu6xI5grF0dcoazRL73EiML8zKOzuE,2059
|
50
50
|
winipedia_utils/pyside/ui/pages/browser.py,sha256=SzX356snnmEdzCrtIXl5mPaUkM1-_REfUurOotpVIkY,696
|
51
51
|
winipedia_utils/pyside/ui/pages/player.py,sha256=SETJeeCm_m_LmnSTWMBrOuG4Gt_1kqVGzVgMgTxLJDQ,787
|
52
52
|
winipedia_utils/pyside/ui/widgets/__init__.py,sha256=p-maJQh7gYbXwhkqKU4wL6UNGzRAy988JP8_qLoTZDk,24
|
@@ -87,7 +87,7 @@ winipedia_utils/testing/tests/base/utils/utils.py,sha256=dUPDrgAxlfREQb33zz23Mfz
|
|
87
87
|
winipedia_utils/testing/tests/conftest.py,sha256=8RounBlI8Jq1aLaLNpv84MW4ne8Qq0aavQextDOp5ng,920
|
88
88
|
winipedia_utils/text/__init__.py,sha256=j2bwtK6kyeHI6SnoBjpRju0C1W2n2paXBDlNjNtaUxA,48
|
89
89
|
winipedia_utils/text/string.py,sha256=1jbBftlgxffGgSlPnQh3aRPIr8XekEwpSenjFCW6JyM,3478
|
90
|
-
winipedia_utils-0.1.
|
91
|
-
winipedia_utils-0.1.
|
92
|
-
winipedia_utils-0.1.
|
93
|
-
winipedia_utils-0.1.
|
90
|
+
winipedia_utils-0.1.28.dist-info/LICENSE,sha256=3PrKJ2CWNrnyyHaC_r0wPDSukVWgmjOxHr__eQVH7cw,1087
|
91
|
+
winipedia_utils-0.1.28.dist-info/METADATA,sha256=YQoasOnLbZZgLMmmqoiCaNbBxcJ0WtkmqmlDIgmJhGc,12576
|
92
|
+
winipedia_utils-0.1.28.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
93
|
+
winipedia_utils-0.1.28.dist-info/RECORD,,
|
File without changes
|
File without changes
|