winipedia-utils 0.1.27__tar.gz → 0.1.29__tar.gz

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.
Files changed (93) hide show
  1. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/PKG-INFO +1 -1
  2. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/pyproject.toml +1 -1
  3. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/modules/class_.py +40 -0
  4. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/pyside/ui/base/base.py +5 -3
  5. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/resources/svgs/svg.py +4 -2
  6. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/LICENSE +0 -0
  7. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/README.md +0 -0
  8. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/__init__.py +0 -0
  9. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/concurrent/__init__.py +0 -0
  10. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/concurrent/concurrent.py +0 -0
  11. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/concurrent/multiprocessing.py +0 -0
  12. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/concurrent/multithreading.py +0 -0
  13. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/consts.py +0 -0
  14. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/data/__init__.py +0 -0
  15. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/data/dataframe.py +0 -0
  16. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/django/__init__.py +0 -0
  17. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/django/bulk.py +0 -0
  18. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/django/command.py +0 -0
  19. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/django/database.py +0 -0
  20. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/git/__init__.py +0 -0
  21. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/git/gitignore/__init__.py +0 -0
  22. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/git/gitignore/gitignore.py +0 -0
  23. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/git/pre_commit/__init__.py +0 -0
  24. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/git/pre_commit/config.py +0 -0
  25. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/git/pre_commit/hooks.py +0 -0
  26. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/git/pre_commit/run_hooks.py +0 -0
  27. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/iterating/__init__.py +0 -0
  28. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/iterating/iterate.py +0 -0
  29. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/logging/__init__.py +0 -0
  30. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/logging/ansi.py +0 -0
  31. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/logging/config.py +0 -0
  32. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/logging/logger.py +0 -0
  33. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/modules/__init__.py +0 -0
  34. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/modules/function.py +0 -0
  35. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/modules/module.py +0 -0
  36. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/modules/package.py +0 -0
  37. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/oop/__init__.py +0 -0
  38. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/oop/mixins/__init__.py +0 -0
  39. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/oop/mixins/meta.py +0 -0
  40. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/oop/mixins/mixin.py +0 -0
  41. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/os/__init__.py +0 -0
  42. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/os/os.py +0 -0
  43. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/projects/__init__.py +0 -0
  44. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/projects/poetry/__init__.py +0 -0
  45. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/projects/poetry/config.py +0 -0
  46. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/projects/poetry/poetry.py +0 -0
  47. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/projects/project.py +0 -0
  48. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/py.typed +0 -0
  49. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/pyside/__init__.py +0 -0
  50. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/pyside/ui/__init__.py +0 -0
  51. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/pyside/ui/base/__init__.py +0 -0
  52. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/pyside/ui/pages/__init__.py +0 -0
  53. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/pyside/ui/pages/base/__init__.py +0 -0
  54. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/pyside/ui/pages/base/base.py +0 -0
  55. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/pyside/ui/pages/browser.py +0 -0
  56. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/pyside/ui/pages/player.py +0 -0
  57. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/pyside/ui/widgets/__init__.py +0 -0
  58. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/pyside/ui/widgets/browser.py +0 -0
  59. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/pyside/ui/widgets/media_player.py +0 -0
  60. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/pyside/ui/widgets/notification.py +0 -0
  61. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/pyside/ui/windows/__init__.py +0 -0
  62. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/pyside/ui/windows/base/__init__.py +0 -0
  63. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/pyside/ui/windows/base/base.py +0 -0
  64. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/resources/__init__.py +0 -0
  65. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/resources/svgs/__init__.py +0 -0
  66. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/resources/svgs/download_arrow.svg +0 -0
  67. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/resources/svgs/exit_fullscreen_icon.svg +0 -0
  68. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/resources/svgs/fullscreen_icon.svg +0 -0
  69. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/resources/svgs/pause_icon.svg +0 -0
  70. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/resources/svgs/play_icon.svg +0 -0
  71. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/security/__init__.py +0 -0
  72. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/security/keyring.py +0 -0
  73. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/setup.py +0 -0
  74. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/testing/__init__.py +0 -0
  75. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/testing/assertions.py +0 -0
  76. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/testing/convention.py +0 -0
  77. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/testing/create_tests.py +0 -0
  78. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/testing/fixtures.py +0 -0
  79. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/testing/tests/__init__.py +0 -0
  80. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/testing/tests/base/__init__.py +0 -0
  81. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/testing/tests/base/fixtures/__init__.py +0 -0
  82. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/testing/tests/base/fixtures/fixture.py +0 -0
  83. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/testing/tests/base/fixtures/scopes/__init__.py +0 -0
  84. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/testing/tests/base/fixtures/scopes/class_.py +0 -0
  85. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/testing/tests/base/fixtures/scopes/function.py +0 -0
  86. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/testing/tests/base/fixtures/scopes/module.py +0 -0
  87. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/testing/tests/base/fixtures/scopes/package.py +0 -0
  88. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/testing/tests/base/fixtures/scopes/session.py +0 -0
  89. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/testing/tests/base/utils/__init__.py +0 -0
  90. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/testing/tests/base/utils/utils.py +0 -0
  91. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/testing/tests/conftest.py +0 -0
  92. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/text/__init__.py +0 -0
  93. {winipedia_utils-0.1.27 → winipedia_utils-0.1.29}/winipedia_utils/text/string.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: winipedia-utils
3
- Version: 0.1.27
3
+ Version: 0.1.29
4
4
  Summary: A package with many utility functions
5
5
  License: MIT
6
6
  Author: Winipedia
@@ -1,7 +1,7 @@
1
1
  # Project section
2
2
  [project]
3
3
  name = "winipedia-utils"
4
- version = "0.1.27"
4
+ version = "0.1.29"
5
5
  description = "A package with many utility functions"
6
6
  readme = "README.md"
7
7
  requires-python = ">=3.12,<3.14"
@@ -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.__subclasses__()
80
- sorted_children = sorted(children, key=lambda cls: cls.__name__)
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:
@@ -1,13 +1,15 @@
1
1
  """utils for svgs."""
2
2
 
3
+ from importlib.resources import as_file, files
3
4
  from pathlib import Path
4
5
  from types import ModuleType
5
6
 
6
- from winipedia_utils.modules.module import to_path
7
7
  from winipedia_utils.resources import svgs
8
8
 
9
9
 
10
10
  def get_svg_path(svg_name: str, package: ModuleType | None = None) -> Path:
11
11
  """Get the path to a svg."""
12
12
  package = package or svgs
13
- return (to_path(package, is_package=True) / svg_name).with_suffix(".svg")
13
+ svg_path = files(package) / f"{svg_name}.svg"
14
+ with as_file(svg_path) as path:
15
+ return path