winipedia-utils 0.1.50__tar.gz → 0.1.52__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.

Potentially problematic release.


This version of winipedia-utils might be problematic. Click here for more details.

Files changed (100) hide show
  1. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/PKG-INFO +1 -1
  2. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/pyproject.toml +2 -1
  3. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/consts.py +1 -0
  4. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/modules/class_.py +4 -1
  5. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/modules/module.py +14 -1
  6. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/pyside/ui/widgets/notification.py +2 -1
  7. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/testing/tests/base/fixtures/scopes/session.py +1 -1
  8. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/text/string.py +3 -3
  9. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/LICENSE +0 -0
  10. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/README.md +0 -0
  11. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/__init__.py +0 -0
  12. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/concurrent/__init__.py +0 -0
  13. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/concurrent/concurrent.py +0 -0
  14. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/concurrent/multiprocessing.py +0 -0
  15. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/concurrent/multithreading.py +0 -0
  16. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/data/__init__.py +0 -0
  17. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/data/dataframe.py +0 -0
  18. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/django/__init__.py +0 -0
  19. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/django/bulk.py +0 -0
  20. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/django/command.py +0 -0
  21. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/django/database.py +0 -0
  22. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/git/__init__.py +0 -0
  23. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/git/gitignore/__init__.py +0 -0
  24. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/git/gitignore/gitignore.py +0 -0
  25. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/git/pre_commit/__init__.py +0 -0
  26. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/git/pre_commit/config.py +0 -0
  27. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/git/pre_commit/hooks.py +0 -0
  28. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/git/pre_commit/run_hooks.py +0 -0
  29. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/iterating/__init__.py +0 -0
  30. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/iterating/iterate.py +0 -0
  31. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/logging/__init__.py +0 -0
  32. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/logging/ansi.py +0 -0
  33. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/logging/config.py +0 -0
  34. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/logging/logger.py +0 -0
  35. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/modules/__init__.py +0 -0
  36. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/modules/function.py +0 -0
  37. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/modules/package.py +0 -0
  38. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/oop/__init__.py +0 -0
  39. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/oop/mixins/__init__.py +0 -0
  40. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/oop/mixins/meta.py +0 -0
  41. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/oop/mixins/mixin.py +0 -0
  42. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/os/__init__.py +0 -0
  43. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/os/os.py +0 -0
  44. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/projects/__init__.py +0 -0
  45. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/projects/poetry/__init__.py +0 -0
  46. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/projects/poetry/config.py +0 -0
  47. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/projects/poetry/poetry.py +0 -0
  48. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/projects/project.py +0 -0
  49. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/py.typed +0 -0
  50. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/pyside/__init__.py +0 -0
  51. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/pyside/core/__init__.py +0 -0
  52. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/pyside/core/py_qiodevice.py +0 -0
  53. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/pyside/ui/__init__.py +0 -0
  54. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/pyside/ui/base/__init__.py +0 -0
  55. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/pyside/ui/base/base.py +0 -0
  56. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/pyside/ui/pages/__init__.py +0 -0
  57. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/pyside/ui/pages/base/__init__.py +0 -0
  58. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/pyside/ui/pages/base/base.py +0 -0
  59. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/pyside/ui/pages/browser.py +0 -0
  60. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/pyside/ui/pages/player.py +0 -0
  61. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/pyside/ui/widgets/__init__.py +0 -0
  62. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/pyside/ui/widgets/browser.py +0 -0
  63. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/pyside/ui/widgets/clickable_widget.py +0 -0
  64. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/pyside/ui/widgets/media_player.py +0 -0
  65. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/pyside/ui/windows/__init__.py +0 -0
  66. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/pyside/ui/windows/base/__init__.py +0 -0
  67. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/pyside/ui/windows/base/base.py +0 -0
  68. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/resources/__init__.py +0 -0
  69. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/resources/svgs/__init__.py +0 -0
  70. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/resources/svgs/delete_garbage_can.svg +0 -0
  71. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/resources/svgs/download_arrow.svg +0 -0
  72. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/resources/svgs/exit_fullscreen_icon.svg +0 -0
  73. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/resources/svgs/fullscreen_icon.svg +0 -0
  74. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/resources/svgs/menu_icon.svg +0 -0
  75. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/resources/svgs/pause_icon.svg +0 -0
  76. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/resources/svgs/play_icon.svg +0 -0
  77. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/resources/svgs/plus_icon.svg +0 -0
  78. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/resources/svgs/svg.py +0 -0
  79. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/security/__init__.py +0 -0
  80. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/security/cryptography.py +0 -0
  81. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/security/keyring.py +0 -0
  82. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/setup.py +0 -0
  83. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/testing/__init__.py +0 -0
  84. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/testing/assertions.py +0 -0
  85. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/testing/convention.py +0 -0
  86. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/testing/create_tests.py +0 -0
  87. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/testing/fixtures.py +0 -0
  88. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/testing/tests/__init__.py +0 -0
  89. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/testing/tests/base/__init__.py +0 -0
  90. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/testing/tests/base/fixtures/__init__.py +0 -0
  91. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/testing/tests/base/fixtures/fixture.py +0 -0
  92. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/testing/tests/base/fixtures/scopes/__init__.py +0 -0
  93. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/testing/tests/base/fixtures/scopes/class_.py +0 -0
  94. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/testing/tests/base/fixtures/scopes/function.py +0 -0
  95. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/testing/tests/base/fixtures/scopes/module.py +0 -0
  96. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/testing/tests/base/fixtures/scopes/package.py +0 -0
  97. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/testing/tests/base/utils/__init__.py +0 -0
  98. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/testing/tests/base/utils/utils.py +0 -0
  99. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/testing/tests/conftest.py +0 -0
  100. {winipedia_utils-0.1.50 → winipedia_utils-0.1.52}/winipedia_utils/text/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: winipedia-utils
3
- Version: 0.1.50
3
+ Version: 0.1.52
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.50"
4
+ version = "0.1.52"
5
5
  description = "A package with many utility functions"
6
6
  readme = "README.md"
7
7
  requires-python = ">=3.12,<3.14"
@@ -45,6 +45,7 @@ types-defusedxml = "^0.7.0.20240218"
45
45
  types-pyyaml = "^6.0.12.20250516"
46
46
  pytest-mock = "^3.14.0"
47
47
  django-stubs = "^5.2.0"
48
+ pytest-qt = "^4.5.0"
48
49
 
49
50
  [tool.ruff]
50
51
  exclude = [ ".*", "**/migrations/*.py",]
@@ -18,5 +18,6 @@ _DEV_DEPENDENCIES = [
18
18
  "types-defusedxml",
19
19
  "types-pyyaml",
20
20
  "pytest-mock",
21
+ "pytest-qt",
21
22
  "django-stubs",
22
23
  ]
@@ -67,10 +67,13 @@ def get_all_cls_from_module(module: ModuleType | str) -> list[type]:
67
67
 
68
68
  if isinstance(module, str):
69
69
  module = import_module(module)
70
+
71
+ # necessary for bindings packages like AESGCM from cryptography._rust backend
72
+ default = ModuleType("default")
70
73
  classes = [
71
74
  obj
72
75
  for _, obj in inspect.getmembers(module, inspect.isclass)
73
- if get_module_of_obj(obj).__name__ == module.__name__
76
+ if get_module_of_obj(obj, default).__name__ == module.__name__
74
77
  ]
75
78
  # sort by definition order
76
79
  return sorted(classes, key=get_def_line)
@@ -327,19 +327,30 @@ def get_default_module_content() -> str:
327
327
  return '''"""module."""'''
328
328
 
329
329
 
330
+ def inside_frozen_bundle() -> bool:
331
+ """Return True if the code is running inside a frozen bundle."""
332
+ return getattr(sys, "frozen", False)
333
+
334
+
330
335
  def get_def_line(obj: Any) -> int:
331
336
  """Return the line number where a method-like object is defined."""
332
337
  if isinstance(obj, property):
333
338
  obj = obj.fget
334
339
  unwrapped = inspect.unwrap(obj)
340
+ if hasattr(unwrapped, "__code__"):
341
+ return int(unwrapped.__code__.co_firstlineno)
342
+ # getsourcelines does not work if in a pyinstaller bundle or something
343
+ if inside_frozen_bundle():
344
+ return 0
335
345
  return inspect.getsourcelines(unwrapped)[1]
336
346
 
337
347
 
338
- def get_module_of_obj(obj: Any) -> ModuleType:
348
+ def get_module_of_obj(obj: Any, default: ModuleType | None = None) -> ModuleType:
339
349
  """Return the module name where a method-like object is defined.
340
350
 
341
351
  Args:
342
352
  obj: Method-like object (funcs, method, property, staticmethod, classmethod...)
353
+ default: Default module to return if the module cannot be determined
343
354
 
344
355
  Returns:
345
356
  The module name as a string, or None if module cannot be determined.
@@ -349,6 +360,8 @@ def get_module_of_obj(obj: Any) -> ModuleType:
349
360
  module = inspect.getmodule(unwrapped)
350
361
  if not module:
351
362
  msg = f"Could not determine module of {obj}"
363
+ if default:
364
+ return default
352
365
  raise ValueError(msg)
353
366
  return module
354
367
 
@@ -29,7 +29,8 @@ class Notification(Toast): # type: ignore[misc]
29
29
  title: The title of the notification.
30
30
  text: The text of the notification.
31
31
  icon: The icon of the notification. Defaults to INFORMATION.
32
- duration: The duration of the notification in milliseconds. Defaults to 10000.
32
+ duration: The duration of the notification in milliseconds.
33
+ Defaults to 10000.
33
34
  """
34
35
  super().__init__(QApplication.activeWindow())
35
36
  self.setDuration(duration)
@@ -281,6 +281,6 @@ def _test_no_unitest_package_usage() -> None:
281
281
  if path == to_path(__name__, is_package=False):
282
282
  continue
283
283
  assert_with_msg(
284
- "unittest" not in path.read_text(),
284
+ "unittest" not in path.read_text(encoding="utf-8"),
285
285
  f"Found unittest usage in {path}. Use pytest instead.",
286
286
  )
@@ -59,9 +59,9 @@ def find_xml_namespaces(xml: str | StringIO) -> dict[str, str]:
59
59
  # Extract the namespaces from the root tag
60
60
  namespaces_: dict[str, str] = {}
61
61
  iter_ns = DefusedElementTree.iterparse(xml, events=["start-ns"])
62
- for _, elem in iter_ns:
63
- prefix, uri = elem
64
- namespaces_[prefix] = uri
62
+ for _, namespace_data in iter_ns:
63
+ prefix, uri = namespace_data
64
+ namespaces_[str(prefix)] = str(uri)
65
65
 
66
66
  namespaces_.pop("", None)
67
67