winipedia-utils 0.1.59__tar.gz → 0.1.61__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.59 → winipedia_utils-0.1.61}/PKG-INFO +1 -1
  2. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/pyproject.toml +1 -1
  3. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/os/os.py +4 -2
  4. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/projects/poetry/poetry.py +2 -1
  5. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/security/keyring.py +23 -7
  6. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/LICENSE +0 -0
  7. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/README.md +0 -0
  8. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/__init__.py +0 -0
  9. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/concurrent/__init__.py +0 -0
  10. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/concurrent/concurrent.py +0 -0
  11. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/concurrent/multiprocessing.py +0 -0
  12. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/concurrent/multithreading.py +0 -0
  13. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/consts.py +0 -0
  14. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/data/__init__.py +0 -0
  15. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/data/dataframe.py +0 -0
  16. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/django/__init__.py +0 -0
  17. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/django/bulk.py +0 -0
  18. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/django/command.py +0 -0
  19. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/django/database.py +0 -0
  20. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/git/__init__.py +0 -0
  21. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/git/gitignore/__init__.py +0 -0
  22. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/git/gitignore/gitignore.py +0 -0
  23. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/git/pre_commit/__init__.py +0 -0
  24. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/git/pre_commit/config.py +0 -0
  25. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/git/pre_commit/hooks.py +0 -0
  26. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/git/pre_commit/run_hooks.py +0 -0
  27. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/iterating/__init__.py +0 -0
  28. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/iterating/iterate.py +0 -0
  29. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/logging/__init__.py +0 -0
  30. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/logging/ansi.py +0 -0
  31. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/logging/config.py +0 -0
  32. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/logging/logger.py +0 -0
  33. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/modules/__init__.py +0 -0
  34. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/modules/class_.py +0 -0
  35. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/modules/function.py +0 -0
  36. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/modules/module.py +0 -0
  37. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/modules/package.py +0 -0
  38. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/oop/__init__.py +0 -0
  39. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/oop/mixins/__init__.py +0 -0
  40. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/oop/mixins/meta.py +0 -0
  41. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/oop/mixins/mixin.py +0 -0
  42. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/os/__init__.py +0 -0
  43. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/projects/__init__.py +0 -0
  44. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/projects/poetry/__init__.py +0 -0
  45. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/projects/poetry/config.py +0 -0
  46. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/projects/project.py +0 -0
  47. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/py.typed +0 -0
  48. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/pyside/__init__.py +0 -0
  49. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/pyside/core/__init__.py +0 -0
  50. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/pyside/core/py_qiodevice.py +0 -0
  51. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/pyside/ui/__init__.py +0 -0
  52. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/pyside/ui/base/__init__.py +0 -0
  53. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/pyside/ui/base/base.py +0 -0
  54. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/pyside/ui/pages/__init__.py +0 -0
  55. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/pyside/ui/pages/base/__init__.py +0 -0
  56. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/pyside/ui/pages/base/base.py +0 -0
  57. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/pyside/ui/pages/browser.py +0 -0
  58. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/pyside/ui/pages/player.py +0 -0
  59. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/pyside/ui/widgets/__init__.py +0 -0
  60. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/pyside/ui/widgets/browser.py +0 -0
  61. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/pyside/ui/widgets/clickable_widget.py +0 -0
  62. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/pyside/ui/widgets/media_player.py +0 -0
  63. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/pyside/ui/widgets/notification.py +0 -0
  64. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/pyside/ui/windows/__init__.py +0 -0
  65. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/pyside/ui/windows/base/__init__.py +0 -0
  66. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/pyside/ui/windows/base/base.py +0 -0
  67. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/resources/__init__.py +0 -0
  68. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/resources/svgs/__init__.py +0 -0
  69. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/resources/svgs/delete_garbage_can.svg +0 -0
  70. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/resources/svgs/download_arrow.svg +0 -0
  71. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/resources/svgs/exit_fullscreen_icon.svg +0 -0
  72. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/resources/svgs/fullscreen_icon.svg +0 -0
  73. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/resources/svgs/menu_icon.svg +0 -0
  74. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/resources/svgs/pause_icon.svg +0 -0
  75. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/resources/svgs/play_icon.svg +0 -0
  76. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/resources/svgs/plus_icon.svg +0 -0
  77. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/resources/svgs/svg.py +0 -0
  78. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/security/__init__.py +0 -0
  79. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/security/cryptography.py +0 -0
  80. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/setup.py +0 -0
  81. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/testing/__init__.py +0 -0
  82. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/testing/assertions.py +0 -0
  83. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/testing/convention.py +0 -0
  84. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/testing/create_tests.py +0 -0
  85. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/testing/fixtures.py +0 -0
  86. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/testing/tests/__init__.py +0 -0
  87. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/testing/tests/base/__init__.py +0 -0
  88. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/testing/tests/base/fixtures/__init__.py +0 -0
  89. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/testing/tests/base/fixtures/fixture.py +0 -0
  90. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/testing/tests/base/fixtures/scopes/__init__.py +0 -0
  91. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/testing/tests/base/fixtures/scopes/class_.py +0 -0
  92. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/testing/tests/base/fixtures/scopes/function.py +0 -0
  93. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/testing/tests/base/fixtures/scopes/module.py +0 -0
  94. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/testing/tests/base/fixtures/scopes/package.py +0 -0
  95. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/testing/tests/base/fixtures/scopes/session.py +0 -0
  96. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/testing/tests/base/utils/__init__.py +0 -0
  97. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/testing/tests/base/utils/utils.py +0 -0
  98. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/testing/tests/conftest.py +0 -0
  99. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/winipedia_utils/text/__init__.py +0 -0
  100. {winipedia_utils-0.1.59 → winipedia_utils-0.1.61}/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.59
3
+ Version: 0.1.61
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.59"
4
+ version = "0.1.61"
5
5
  description = "A package with many utility functions"
6
6
  readme = "README.md"
7
7
  requires-python = ">=3.12,<3.14"
@@ -11,11 +11,12 @@ from pathlib import Path
11
11
  from typing import Any
12
12
 
13
13
 
14
- def which_with_raise(cmd: str) -> str:
14
+ def which_with_raise(cmd: str, *, raise_error: bool = True) -> str | None:
15
15
  """Give the path to the given command.
16
16
 
17
17
  Args:
18
18
  cmd: The command to find
19
+ raise_error: Whether to raise an error if the command is not found
19
20
 
20
21
  Returns:
21
22
  The path to the command
@@ -27,7 +28,8 @@ def which_with_raise(cmd: str) -> str:
27
28
  path = shutil.which(cmd)
28
29
  if path is None:
29
30
  msg = f"Command {cmd} not found"
30
- raise FileNotFoundError(msg)
31
+ if raise_error:
32
+ raise FileNotFoundError(msg)
31
33
  return path
32
34
 
33
35
 
@@ -11,7 +11,8 @@ from winipedia_utils.os.os import run_subprocess, which_with_raise
11
11
 
12
12
  logger = get_logger(__name__)
13
13
 
14
- POETRY_PATH = which_with_raise("poetry")
14
+
15
+ POETRY_PATH = which_with_raise("poetry", raise_error=False) or "poetry"
15
16
 
16
17
  POETRY_RUN_ARGS = [POETRY_PATH, "run"]
17
18
 
@@ -13,7 +13,7 @@ from cryptography.fernet import Fernet
13
13
  from cryptography.hazmat.primitives.ciphers.aead import AESGCM
14
14
 
15
15
 
16
- def get_or_create_fernet(service_name: str, username: str) -> Fernet:
16
+ def get_or_create_fernet(service_name: str, username: str) -> tuple[Fernet, bytes]:
17
17
  """Get the app secret using keyring.
18
18
 
19
19
  If it does not exist, create it with a Fernet.
@@ -23,7 +23,7 @@ def get_or_create_fernet(service_name: str, username: str) -> Fernet:
23
23
  )
24
24
 
25
25
 
26
- def get_or_create_aes_gcm(service_name: str, username: str) -> AESGCM:
26
+ def get_or_create_aes_gcm(service_name: str, username: str) -> tuple[AESGCM, bytes]:
27
27
  """Get the app secret using keyring.
28
28
 
29
29
  If it does not exist, create it with a AESGCM.
@@ -38,17 +38,33 @@ def get_or_create_key[T](
38
38
  username: str,
39
39
  key_class: Callable[[bytes], T],
40
40
  generate_key_func: Callable[..., bytes],
41
- ) -> T:
41
+ ) -> tuple[T, bytes]:
42
42
  """Get the app secret using keyring.
43
43
 
44
44
  If it does not exist, create it with the generate_func.
45
45
  """
46
- service_name = f"{service_name}_{key_class.__name__}"
47
- key = keyring.get_password(service_name, username)
46
+ key = get_key_as_str(service_name, username, key_class)
48
47
  if key is None:
49
48
  binary_key = generate_key_func()
50
49
  key = b64encode(binary_key).decode("ascii")
51
- keyring.set_password(service_name, username, key)
50
+ modified_service_name = make_service_name(service_name, key_class)
51
+ keyring.set_password(modified_service_name, username, key)
52
52
 
53
53
  binary_key = b64decode(key)
54
- return key_class(binary_key)
54
+ return key_class(binary_key), binary_key
55
+
56
+
57
+ def get_key_as_str[T](
58
+ service_name: str, username: str, key_class: Callable[[bytes], T]
59
+ ) -> str | None:
60
+ """Get the app secret using keyring.
61
+
62
+ If it does not exist, create it with the generate_func.
63
+ """
64
+ service_name = make_service_name(service_name, key_class)
65
+ return keyring.get_password(service_name, username)
66
+
67
+
68
+ def make_service_name[T](service_name: str, key_class: Callable[[bytes], T]) -> str:
69
+ """Make a service name from a service name and a key class."""
70
+ return f"{service_name}_{key_class.__name__}"