winipedia-utils 0.1.25__py3-none-any.whl → 0.1.26__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.
@@ -11,6 +11,7 @@ making them suitable for code generation, testing frameworks, and package manage
11
11
 
12
12
  import os
13
13
  import pkgutil
14
+ import sys
14
15
  from collections.abc import Generator, Iterable
15
16
  from importlib import import_module
16
17
  from pathlib import Path
@@ -360,3 +361,21 @@ def copy_package(
360
361
  create_module(module_path, is_package=False)
361
362
  if with_file_content:
362
363
  module_path.write_text(get_module_content_as_str(module))
364
+
365
+
366
+ def get_main_package() -> ModuleType:
367
+ """Gets the main package of the executing code.
368
+
369
+ Even when this package is installed as a module.
370
+ """
371
+ main = sys.modules.get("__main__")
372
+ if main is None:
373
+ msg = "No __main__ module found"
374
+ raise ValueError(msg)
375
+
376
+ package_name = main.__package__
377
+ if package_name is None:
378
+ msg = "No __package__ found in __main__"
379
+ raise ValueError(msg)
380
+
381
+ return import_module(package_name)
@@ -11,7 +11,7 @@ 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.package import walk_package
14
+ from winipedia_utils.modules.package import get_main_package, walk_package
15
15
  from winipedia_utils.oop.mixins.meta import ABCImplementationLoggingMeta
16
16
  from winipedia_utils.resources.svgs.svg import get_svg_path
17
17
  from winipedia_utils.text.string import split_on_uppercase
@@ -64,12 +64,16 @@ class Base(metaclass=QABCImplementationLoggingMeta):
64
64
 
65
65
  @classmethod
66
66
  @final
67
- def get_subclasses(cls, package: ModuleType) -> list[type[Self]]:
67
+ def get_subclasses(cls, package: ModuleType | None = None) -> list[type[Self]]:
68
68
  """Get all subclasses of the UI.
69
69
 
70
70
  Args:
71
71
  package: The package to search for subclasses in.
72
72
  """
73
+ if package is None:
74
+ # find the main package
75
+ package = get_main_package()
76
+
73
77
  _ = list(walk_package(package))
74
78
 
75
79
  children = cls.__subclasses__()
@@ -3,9 +3,7 @@
3
3
  This module contains the base page class for the VideoVault application.
4
4
  """
5
5
 
6
- from abc import abstractmethod
7
6
  from functools import partial
8
- from types import ModuleType
9
7
  from typing import final
10
8
 
11
9
  from PySide6.QtCore import Qt
@@ -25,11 +23,6 @@ from winipedia_utils.pyside.ui.base.base import Base as BaseUI
25
23
  class Base(BaseUI, QWidget):
26
24
  """Base page class for the VideoVault application."""
27
25
 
28
- @classmethod
29
- @abstractmethod
30
- def get_pages_package(cls) -> ModuleType:
31
- """Get the package to get the page classes from."""
32
-
33
26
  @final
34
27
  def base_setup(self) -> None:
35
28
  """Get the Qt object of the UI."""
@@ -56,7 +49,7 @@ class Base(BaseUI, QWidget):
56
49
  self.menu_dropdown = QMenu(self.menu_button)
57
50
  self.menu_button.setMenu(self.menu_dropdown)
58
51
 
59
- for page_cls in self.get_page_classes():
52
+ for page_cls in self.get_subclasses():
60
53
  action = self.menu_dropdown.addAction(page_cls.get_display_name())
61
54
  action.triggered.connect(partial(self.set_current_page, page_cls))
62
55
 
@@ -74,9 +67,3 @@ class Base(BaseUI, QWidget):
74
67
  layout.addWidget(button)
75
68
 
76
69
  return button
77
-
78
- @classmethod
79
- @final
80
- def get_page_classes(cls) -> list[type["Base"]]:
81
- """Get all the page classes."""
82
- return Base.get_subclasses(cls.get_pages_package())
@@ -43,7 +43,7 @@ class Base(BaseUI, QMainWindow):
43
43
  @final
44
44
  def make_pages(self) -> Generator[BasePage, None, None]:
45
45
  """Get the pages to add to the window."""
46
- for page_cls in BasePage.get_page_classes():
46
+ for page_cls in BasePage.get_subclasses():
47
47
  yield page_cls()
48
48
 
49
49
  @final
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: winipedia-utils
3
- Version: 0.1.25
3
+ Version: 0.1.26
4
4
  Summary: A package with many utility functions
5
5
  License: MIT
6
6
  Author: Winipedia
@@ -27,7 +27,7 @@ winipedia_utils/modules/__init__.py,sha256=e3CFaC3FhK4ibknFOv1bqOZxA7XeVwmLqWX7o
27
27
  winipedia_utils/modules/class_.py,sha256=RDjal6QYYs9z81DT1mIFrnEhQ9vgN2tCAYN1WWnN24Y,2462
28
28
  winipedia_utils/modules/function.py,sha256=cHLGiD7huPdfwUDdI0IlbB_Pd4woWGgbyvrsjivHBpc,2987
29
29
  winipedia_utils/modules/module.py,sha256=RAxEp_yLc7KyHke05ZmTkUCfKof_l4k6mRtLP4xBgL4,12884
30
- winipedia_utils/modules/package.py,sha256=kCm4pXQdllafo-2dmWZTvaAqRruzh3iF4hseHlCmTlU,12605
30
+ winipedia_utils/modules/package.py,sha256=8l8GuGGh3JDvDrj0rAs6AgcRfKYPSj3DJRx-zdjbB3Q,13105
31
31
  winipedia_utils/oop/__init__.py,sha256=wGjsVwLbTVEQWOfDJvN9nlvC-3NmAi8Doc2xIrm6e78,47
32
32
  winipedia_utils/oop/mixins/__init__.py,sha256=PDK-cJcdRUfDUCz36qQ5pmMW07G133WtN49OpmILGNI,54
33
33
  winipedia_utils/oop/mixins/meta.py,sha256=gV2YKo_rbJHY9xNCPHhjMmFWuTtiw3C-IGZlh52IZq8,11320
@@ -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=3J61SGxx-SlCkdViTJr0si1Ciovr2Tnh1jWQgfAWmSM,3672
46
+ winipedia_utils/pyside/ui/base/base.py,sha256=AnoIAzT_SUrf6B_NMJhSwvmIzhhFMPAhtNvAvAYiLtY,3814
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=3-iG6u6XUS_6mDyA3yxbnwPjXqhbcE5odmuIfVpzAY4,2460
49
+ winipedia_utils/pyside/ui/pages/base/base.py,sha256=Mb63i6lxFLsLUd7VtLml7XzTr7G2-zmZqa44rpJNZMY,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
@@ -55,7 +55,7 @@ winipedia_utils/pyside/ui/widgets/media_player.py,sha256=XIQ3L1zrj5T_6Xe0Cist3v0
55
55
  winipedia_utils/pyside/ui/widgets/notification.py,sha256=_zBq9Q6SDFu3fV2AkbvyCNQmOEOy1l9mKOFAAdyteg4,1941
56
56
  winipedia_utils/pyside/ui/windows/__init__.py,sha256=p-maJQh7gYbXwhkqKU4wL6UNGzRAy988JP8_qLoTZDk,24
57
57
  winipedia_utils/pyside/ui/windows/base/__init__.py,sha256=p-maJQh7gYbXwhkqKU4wL6UNGzRAy988JP8_qLoTZDk,24
58
- winipedia_utils/pyside/ui/windows/base/base.py,sha256=JBOqya3dUpZMaq9CoR737Wfjv4gSHNXBAEnyl7O56wE,1498
58
+ winipedia_utils/pyside/ui/windows/base/base.py,sha256=httMbYu5QiHevD_2SrUTLnFat9nsvSNAtjTL84tRUao,1496
59
59
  winipedia_utils/resources/__init__.py,sha256=p-maJQh7gYbXwhkqKU4wL6UNGzRAy988JP8_qLoTZDk,24
60
60
  winipedia_utils/resources/svgs/__init__.py,sha256=p-maJQh7gYbXwhkqKU4wL6UNGzRAy988JP8_qLoTZDk,24
61
61
  winipedia_utils/resources/svgs/download_arrow.svg,sha256=R5WNz0JOxkRi5LOuDtc_eZESZN4W0JAuvr-5_ZRqeks,244
@@ -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.25.dist-info/LICENSE,sha256=3PrKJ2CWNrnyyHaC_r0wPDSukVWgmjOxHr__eQVH7cw,1087
91
- winipedia_utils-0.1.25.dist-info/METADATA,sha256=oB-JQ01IVCpkX4tLP58G48ohb6G1s4kTk2nryQWbtTM,12576
92
- winipedia_utils-0.1.25.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
93
- winipedia_utils-0.1.25.dist-info/RECORD,,
90
+ winipedia_utils-0.1.26.dist-info/LICENSE,sha256=3PrKJ2CWNrnyyHaC_r0wPDSukVWgmjOxHr__eQVH7cw,1087
91
+ winipedia_utils-0.1.26.dist-info/METADATA,sha256=S2XgR4zKexo4vgr4HYbpEND6C3UNeZkn-W-d0oVx7us,12576
92
+ winipedia_utils-0.1.26.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
93
+ winipedia_utils-0.1.26.dist-info/RECORD,,