winipedia-utils 0.1.36__tar.gz → 0.1.38__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 (97) hide show
  1. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/PKG-INFO +1 -1
  2. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/pyproject.toml +1 -1
  3. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/widgets/media_player.py +1 -6
  4. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/security/keyring.py +24 -7
  5. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/LICENSE +0 -0
  6. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/README.md +0 -0
  7. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/__init__.py +0 -0
  8. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/concurrent/__init__.py +0 -0
  9. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/concurrent/concurrent.py +0 -0
  10. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/concurrent/multiprocessing.py +0 -0
  11. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/concurrent/multithreading.py +0 -0
  12. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/consts.py +0 -0
  13. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/data/__init__.py +0 -0
  14. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/data/dataframe.py +0 -0
  15. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/django/__init__.py +0 -0
  16. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/django/bulk.py +0 -0
  17. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/django/command.py +0 -0
  18. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/django/database.py +0 -0
  19. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/git/__init__.py +0 -0
  20. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/git/gitignore/__init__.py +0 -0
  21. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/git/gitignore/gitignore.py +0 -0
  22. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/git/pre_commit/__init__.py +0 -0
  23. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/git/pre_commit/config.py +0 -0
  24. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/git/pre_commit/hooks.py +0 -0
  25. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/git/pre_commit/run_hooks.py +0 -0
  26. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/iterating/__init__.py +0 -0
  27. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/iterating/iterate.py +0 -0
  28. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/logging/__init__.py +0 -0
  29. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/logging/ansi.py +0 -0
  30. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/logging/config.py +0 -0
  31. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/logging/logger.py +0 -0
  32. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/modules/__init__.py +0 -0
  33. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/modules/class_.py +0 -0
  34. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/modules/function.py +0 -0
  35. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/modules/module.py +0 -0
  36. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/modules/package.py +0 -0
  37. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/oop/__init__.py +0 -0
  38. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/oop/mixins/__init__.py +0 -0
  39. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/oop/mixins/meta.py +0 -0
  40. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/oop/mixins/mixin.py +0 -0
  41. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/os/__init__.py +0 -0
  42. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/os/os.py +0 -0
  43. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/projects/__init__.py +0 -0
  44. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/projects/poetry/__init__.py +0 -0
  45. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/projects/poetry/config.py +0 -0
  46. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/projects/poetry/poetry.py +0 -0
  47. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/projects/project.py +0 -0
  48. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/py.typed +0 -0
  49. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/pyside/__init__.py +0 -0
  50. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/pyside/core/__init__.py +0 -0
  51. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/pyside/core/py_qiodevice.py +0 -0
  52. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/__init__.py +0 -0
  53. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/base/__init__.py +0 -0
  54. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/base/base.py +0 -0
  55. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/pages/__init__.py +0 -0
  56. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/pages/base/__init__.py +0 -0
  57. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/pages/base/base.py +0 -0
  58. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/pages/browser.py +0 -0
  59. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/pages/player.py +0 -0
  60. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/widgets/__init__.py +0 -0
  61. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/widgets/browser.py +0 -0
  62. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/widgets/clickable_widget.py +0 -0
  63. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/widgets/notification.py +0 -0
  64. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/windows/__init__.py +0 -0
  65. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/windows/base/__init__.py +0 -0
  66. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/windows/base/base.py +0 -0
  67. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/resources/__init__.py +0 -0
  68. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/resources/svgs/__init__.py +0 -0
  69. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/resources/svgs/download_arrow.svg +0 -0
  70. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/resources/svgs/exit_fullscreen_icon.svg +0 -0
  71. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/resources/svgs/fullscreen_icon.svg +0 -0
  72. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/resources/svgs/pause_icon.svg +0 -0
  73. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/resources/svgs/play_icon.svg +0 -0
  74. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/resources/svgs/svg.py +0 -0
  75. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/security/__init__.py +0 -0
  76. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/security/cryptography.py +0 -0
  77. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/setup.py +0 -0
  78. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/testing/__init__.py +0 -0
  79. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/testing/assertions.py +0 -0
  80. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/testing/convention.py +0 -0
  81. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/testing/create_tests.py +0 -0
  82. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/testing/fixtures.py +0 -0
  83. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/__init__.py +0 -0
  84. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/base/__init__.py +0 -0
  85. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/base/fixtures/__init__.py +0 -0
  86. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/base/fixtures/fixture.py +0 -0
  87. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/base/fixtures/scopes/__init__.py +0 -0
  88. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/base/fixtures/scopes/class_.py +0 -0
  89. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/base/fixtures/scopes/function.py +0 -0
  90. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/base/fixtures/scopes/module.py +0 -0
  91. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/base/fixtures/scopes/package.py +0 -0
  92. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/base/fixtures/scopes/session.py +0 -0
  93. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/base/utils/__init__.py +0 -0
  94. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/base/utils/utils.py +0 -0
  95. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/conftest.py +0 -0
  96. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/winipedia_utils/text/__init__.py +0 -0
  97. {winipedia_utils-0.1.36 → winipedia_utils-0.1.38}/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.36
3
+ Version: 0.1.38
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.36"
4
+ version = "0.1.38"
5
5
  description = "A package with many utility functions"
6
6
  readme = "README.md"
7
7
  requires-python = ">=3.12,<3.14"
@@ -236,7 +236,6 @@ class MediaPlayer(QMediaPlayer):
236
236
  ):
237
237
  self.setPosition(position)
238
238
  self.last_slider_moved_update = current_time
239
- self.setPosition(position)
240
239
 
241
240
  def on_slider_released(self) -> None:
242
241
  """Handle slider release event."""
@@ -268,12 +267,8 @@ class MediaPlayer(QMediaPlayer):
268
267
  source_url=QUrl.fromLocalFile(path),
269
268
  )
270
269
 
271
- def set_source_device(
272
- self, io_device: PyQIODevice, source_url: QUrl | None = None
273
- ) -> None:
270
+ def set_source_device(self, io_device: PyQIODevice, source_url: QUrl) -> None:
274
271
  """Play the video."""
275
- if source_url is None:
276
- source_url = QUrl()
277
272
  self.source_url = source_url
278
273
  self.io_device = io_device
279
274
  self.setSourceDevice(self.io_device, self.source_url)
@@ -5,6 +5,8 @@ including getting and creating secrets and fernets.
5
5
  These utilities help with secure storage and retrieval of secrets.
6
6
  """
7
7
 
8
+ from collections.abc import Callable
9
+
8
10
  import keyring
9
11
  from cryptography.fernet import Fernet
10
12
  from cryptography.hazmat.primitives.ciphers.aead import AESGCM
@@ -15,11 +17,9 @@ def get_or_create_fernet(service_name: str, username: str) -> Fernet:
15
17
 
16
18
  If it does not exist, create it with a Fernet.
17
19
  """
18
- secret = keyring.get_password(service_name, username)
19
- if secret is None:
20
- secret = Fernet.generate_key().decode()
21
- keyring.set_password(service_name, username, secret)
22
- return Fernet(secret.encode())
20
+ return get_or_create_key(
21
+ service_name, username, Fernet, lambda: Fernet.generate_key()
22
+ )
23
23
 
24
24
 
25
25
  def get_or_create_aes_gcm(service_name: str, username: str) -> AESGCM:
@@ -27,8 +27,25 @@ def get_or_create_aes_gcm(service_name: str, username: str) -> AESGCM:
27
27
 
28
28
  If it does not exist, create it with a AESGCM.
29
29
  """
30
+ return get_or_create_key(
31
+ service_name, username, AESGCM, lambda: AESGCM.generate_key(bit_length=256)
32
+ )
33
+
34
+
35
+ def get_or_create_key[T](
36
+ service_name: str,
37
+ username: str,
38
+ key_class: Callable[[bytes], T],
39
+ generate_key_func: Callable[..., bytes],
40
+ ) -> T:
41
+ """Get the app secret using keyring.
42
+
43
+ If it does not exist, create it with the generate_func.
44
+ """
45
+ service_name = f"{service_name}_{key_class.__name__}"
30
46
  secret = keyring.get_password(service_name, username)
31
47
  if secret is None:
32
- secret = AESGCM.generate_key(bit_length=256).decode()
48
+ secret = generate_key_func().decode()
33
49
  keyring.set_password(service_name, username, secret)
34
- return AESGCM(secret.encode())
50
+
51
+ return key_class(secret.encode())