winipedia-utils 0.1.37__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.37 → winipedia_utils-0.1.38}/PKG-INFO +1 -1
  2. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/pyproject.toml +1 -1
  3. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/widgets/media_player.py +1 -5
  4. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/security/keyring.py +24 -7
  5. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/LICENSE +0 -0
  6. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/README.md +0 -0
  7. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/__init__.py +0 -0
  8. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/concurrent/__init__.py +0 -0
  9. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/concurrent/concurrent.py +0 -0
  10. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/concurrent/multiprocessing.py +0 -0
  11. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/concurrent/multithreading.py +0 -0
  12. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/consts.py +0 -0
  13. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/data/__init__.py +0 -0
  14. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/data/dataframe.py +0 -0
  15. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/django/__init__.py +0 -0
  16. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/django/bulk.py +0 -0
  17. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/django/command.py +0 -0
  18. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/django/database.py +0 -0
  19. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/git/__init__.py +0 -0
  20. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/git/gitignore/__init__.py +0 -0
  21. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/git/gitignore/gitignore.py +0 -0
  22. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/git/pre_commit/__init__.py +0 -0
  23. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/git/pre_commit/config.py +0 -0
  24. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/git/pre_commit/hooks.py +0 -0
  25. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/git/pre_commit/run_hooks.py +0 -0
  26. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/iterating/__init__.py +0 -0
  27. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/iterating/iterate.py +0 -0
  28. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/logging/__init__.py +0 -0
  29. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/logging/ansi.py +0 -0
  30. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/logging/config.py +0 -0
  31. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/logging/logger.py +0 -0
  32. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/modules/__init__.py +0 -0
  33. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/modules/class_.py +0 -0
  34. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/modules/function.py +0 -0
  35. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/modules/module.py +0 -0
  36. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/modules/package.py +0 -0
  37. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/oop/__init__.py +0 -0
  38. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/oop/mixins/__init__.py +0 -0
  39. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/oop/mixins/meta.py +0 -0
  40. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/oop/mixins/mixin.py +0 -0
  41. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/os/__init__.py +0 -0
  42. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/os/os.py +0 -0
  43. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/projects/__init__.py +0 -0
  44. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/projects/poetry/__init__.py +0 -0
  45. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/projects/poetry/config.py +0 -0
  46. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/projects/poetry/poetry.py +0 -0
  47. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/projects/project.py +0 -0
  48. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/py.typed +0 -0
  49. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/pyside/__init__.py +0 -0
  50. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/pyside/core/__init__.py +0 -0
  51. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/pyside/core/py_qiodevice.py +0 -0
  52. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/__init__.py +0 -0
  53. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/base/__init__.py +0 -0
  54. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/base/base.py +0 -0
  55. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/pages/__init__.py +0 -0
  56. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/pages/base/__init__.py +0 -0
  57. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/pages/base/base.py +0 -0
  58. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/pages/browser.py +0 -0
  59. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/pages/player.py +0 -0
  60. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/widgets/__init__.py +0 -0
  61. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/widgets/browser.py +0 -0
  62. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/widgets/clickable_widget.py +0 -0
  63. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/widgets/notification.py +0 -0
  64. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/windows/__init__.py +0 -0
  65. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/windows/base/__init__.py +0 -0
  66. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/pyside/ui/windows/base/base.py +0 -0
  67. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/resources/__init__.py +0 -0
  68. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/resources/svgs/__init__.py +0 -0
  69. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/resources/svgs/download_arrow.svg +0 -0
  70. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/resources/svgs/exit_fullscreen_icon.svg +0 -0
  71. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/resources/svgs/fullscreen_icon.svg +0 -0
  72. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/resources/svgs/pause_icon.svg +0 -0
  73. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/resources/svgs/play_icon.svg +0 -0
  74. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/resources/svgs/svg.py +0 -0
  75. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/security/__init__.py +0 -0
  76. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/security/cryptography.py +0 -0
  77. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/setup.py +0 -0
  78. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/testing/__init__.py +0 -0
  79. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/testing/assertions.py +0 -0
  80. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/testing/convention.py +0 -0
  81. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/testing/create_tests.py +0 -0
  82. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/testing/fixtures.py +0 -0
  83. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/__init__.py +0 -0
  84. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/base/__init__.py +0 -0
  85. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/base/fixtures/__init__.py +0 -0
  86. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/base/fixtures/fixture.py +0 -0
  87. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/base/fixtures/scopes/__init__.py +0 -0
  88. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/base/fixtures/scopes/class_.py +0 -0
  89. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/base/fixtures/scopes/function.py +0 -0
  90. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/base/fixtures/scopes/module.py +0 -0
  91. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/base/fixtures/scopes/package.py +0 -0
  92. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/base/fixtures/scopes/session.py +0 -0
  93. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/base/utils/__init__.py +0 -0
  94. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/base/utils/utils.py +0 -0
  95. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/testing/tests/conftest.py +0 -0
  96. {winipedia_utils-0.1.37 → winipedia_utils-0.1.38}/winipedia_utils/text/__init__.py +0 -0
  97. {winipedia_utils-0.1.37 → 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.37
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.37"
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"
@@ -267,12 +267,8 @@ class MediaPlayer(QMediaPlayer):
267
267
  source_url=QUrl.fromLocalFile(path),
268
268
  )
269
269
 
270
- def set_source_device(
271
- self, io_device: PyQIODevice, source_url: QUrl | None = None
272
- ) -> None:
270
+ def set_source_device(self, io_device: PyQIODevice, source_url: QUrl) -> None:
273
271
  """Play the video."""
274
- if source_url is None:
275
- source_url = QUrl()
276
272
  self.source_url = source_url
277
273
  self.io_device = io_device
278
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())