winipedia-utils 0.4.20__tar.gz → 0.4.22__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 (93) hide show
  1. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/PKG-INFO +2 -1
  2. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/pyproject.toml +2 -1
  3. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/git/gitignore/config.py +7 -4
  4. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/testing/config.py +0 -22
  5. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/testing/tests/base/utils/utils.py +9 -13
  6. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/text/config.py +43 -0
  7. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/LICENSE +0 -0
  8. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/README.md +0 -0
  9. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/__init__.py +0 -0
  10. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/concurrent/__init__.py +0 -0
  11. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/concurrent/concurrent.py +0 -0
  12. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/concurrent/multiprocessing.py +0 -0
  13. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/concurrent/multithreading.py +0 -0
  14. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/data/__init__.py +0 -0
  15. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/data/dataframe/__init__.py +0 -0
  16. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/data/dataframe/cleaning.py +0 -0
  17. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/data/structures/__init__.py +0 -0
  18. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/data/structures/dicts.py +0 -0
  19. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/git/__init__.py +0 -0
  20. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/git/github/__init__.py +0 -0
  21. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/git/github/repo/__init__.py +0 -0
  22. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/git/github/repo/protect.py +0 -0
  23. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/git/github/repo/repo.py +0 -0
  24. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/git/github/workflows/__init__.py +0 -0
  25. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/git/github/workflows/base/__init__.py +0 -0
  26. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/git/github/workflows/base/base.py +0 -0
  27. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/git/github/workflows/health_check.py +0 -0
  28. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/git/github/workflows/publish.py +0 -0
  29. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/git/github/workflows/release.py +0 -0
  30. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/git/gitignore/__init__.py +0 -0
  31. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/git/gitignore/gitignore.py +0 -0
  32. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/git/pre_commit/__init__.py +0 -0
  33. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/git/pre_commit/config.py +0 -0
  34. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/git/pre_commit/hooks.py +0 -0
  35. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/git/pre_commit/run_hooks.py +0 -0
  36. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/iterating/__init__.py +0 -0
  37. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/iterating/iterate.py +0 -0
  38. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/logging/__init__.py +0 -0
  39. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/logging/ansi.py +0 -0
  40. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/logging/config.py +0 -0
  41. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/logging/logger.py +0 -0
  42. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/modules/__init__.py +0 -0
  43. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/modules/class_.py +0 -0
  44. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/modules/function.py +0 -0
  45. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/modules/module.py +0 -0
  46. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/modules/package.py +0 -0
  47. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/oop/__init__.py +0 -0
  48. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/oop/mixins/__init__.py +0 -0
  49. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/oop/mixins/meta.py +0 -0
  50. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/oop/mixins/mixin.py +0 -0
  51. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/os/__init__.py +0 -0
  52. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/os/os.py +0 -0
  53. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/projects/__init__.py +0 -0
  54. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/projects/poetry/__init__.py +0 -0
  55. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/projects/poetry/config.py +0 -0
  56. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/projects/poetry/poetry.py +0 -0
  57. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/projects/project.py +0 -0
  58. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/py.typed +0 -0
  59. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/resources/__init__.py +0 -0
  60. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/resources/svgs/__init__.py +0 -0
  61. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/resources/svgs/delete_garbage_can.svg +0 -0
  62. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/resources/svgs/download_arrow.svg +0 -0
  63. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/resources/svgs/exit_fullscreen_icon.svg +0 -0
  64. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/resources/svgs/fullscreen_icon.svg +0 -0
  65. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/resources/svgs/menu_icon.svg +0 -0
  66. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/resources/svgs/pause_icon.svg +0 -0
  67. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/resources/svgs/play_icon.svg +0 -0
  68. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/resources/svgs/plus_icon.svg +0 -0
  69. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/resources/svgs/svg.py +0 -0
  70. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/security/__init__.py +0 -0
  71. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/security/cryptography.py +0 -0
  72. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/security/keyring.py +0 -0
  73. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/setup.py +0 -0
  74. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/testing/__init__.py +0 -0
  75. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/testing/assertions.py +0 -0
  76. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/testing/convention.py +0 -0
  77. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/testing/create_tests.py +0 -0
  78. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/testing/fixtures.py +0 -0
  79. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/testing/skip.py +0 -0
  80. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/testing/tests/__init__.py +0 -0
  81. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/testing/tests/base/__init__.py +0 -0
  82. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/testing/tests/base/fixtures/__init__.py +0 -0
  83. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/testing/tests/base/fixtures/fixture.py +0 -0
  84. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/testing/tests/base/fixtures/scopes/__init__.py +0 -0
  85. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/testing/tests/base/fixtures/scopes/class_.py +0 -0
  86. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/testing/tests/base/fixtures/scopes/function.py +0 -0
  87. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/testing/tests/base/fixtures/scopes/module.py +0 -0
  88. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/testing/tests/base/fixtures/scopes/package.py +0 -0
  89. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/testing/tests/base/fixtures/scopes/session.py +0 -0
  90. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/testing/tests/base/utils/__init__.py +0 -0
  91. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/testing/tests/conftest.py +0 -0
  92. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/text/__init__.py +0 -0
  93. {winipedia_utils-0.4.20 → winipedia_utils-0.4.22}/winipedia_utils/text/string.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: winipedia-utils
3
- Version: 0.4.20
3
+ Version: 0.4.22
4
4
  Summary: A package with many utility functions
5
5
  License-Expression: MIT
6
6
  License-File: LICENSE
@@ -13,6 +13,7 @@ Classifier: Programming Language :: Python :: 3.13
13
13
  Classifier: Programming Language :: Python :: 3.14
14
14
  Requires-Dist: cryptography
15
15
  Requires-Dist: defusedxml
16
+ Requires-Dist: dotenv
16
17
  Requires-Dist: keyring
17
18
  Requires-Dist: pathspec
18
19
  Requires-Dist: polars
@@ -1,7 +1,7 @@
1
1
  # Project section
2
2
  [project]
3
3
  name = "winipedia-utils"
4
- version = "0.4.20"
4
+ version = "0.4.22"
5
5
  description = "A package with many utility functions"
6
6
  readme = "README.md"
7
7
  requires-python = ">=3.12"
@@ -31,6 +31,7 @@ keyring = "*"
31
31
  cryptography = "*"
32
32
  polars = "*"
33
33
  pygithub = "*"
34
+ dotenv = "*"
34
35
 
35
36
  [tool.poetry.group.dev.dependencies]
36
37
  ruff = "*"
@@ -5,8 +5,8 @@ from typing import Any
5
5
 
6
6
  import requests
7
7
 
8
- from winipedia_utils.testing.config import ExperimentConfigFile, LocalSecretsConfigFile
9
- from winipedia_utils.text.config import ConfigFile
8
+ from winipedia_utils.testing.config import ExperimentConfigFile
9
+ from winipedia_utils.text.config import ConfigFile, DotEnvConfigFile
10
10
 
11
11
 
12
12
  class GitIgnoreConfigFile(ConfigFile):
@@ -54,9 +54,12 @@ class GitIgnoreConfigFile(ConfigFile):
54
54
  ".git/",
55
55
  "# for executing experimental code",
56
56
  ExperimentConfigFile.get_path().as_posix(),
57
- "# for secrets used locally",
58
- LocalSecretsConfigFile.get_path().as_posix(),
59
57
  ]
58
+
59
+ dotenv_path = DotEnvConfigFile.get_path().as_posix()
60
+ if dotenv_path not in needed:
61
+ needed.extend(["# for secrets used locally", dotenv_path])
62
+
60
63
  existing = cls.load()
61
64
  needed = [p for p in needed if p not in set(existing)]
62
65
  return existing + needed
@@ -125,25 +125,3 @@ class ExperimentConfigFile(PythonConfigFile):
125
125
  """Get the config."""
126
126
  return '''"""This file is for experimentation and is ignored by git."""
127
127
  '''
128
-
129
-
130
- class LocalSecretsConfigFile(PythonConfigFile):
131
- """Config file for secrets.py.
132
-
133
- Config file for secrets. Is added to .gitignore automatically.
134
- Should be in .gitignore.
135
- """
136
-
137
- @classmethod
138
- def get_parent_path(cls) -> Path:
139
- """Get the path to the config file."""
140
- return Path()
141
-
142
- @classmethod
143
- def get_content_str(cls) -> str:
144
- """Get the config."""
145
- return '''"""This file is for secrets you might use and is ignored by git.
146
-
147
- Can be used by tests or other developing code.
148
- """
149
- '''
@@ -18,17 +18,15 @@ from winipedia_utils.logging.logger import get_logger
18
18
  from winipedia_utils.modules.function import is_abstractmethod
19
19
  from winipedia_utils.modules.module import (
20
20
  get_objs_from_obj,
21
- import_obj_from_importpath,
22
21
  make_obj_importpath,
23
- to_module_name,
24
22
  )
25
23
  from winipedia_utils.testing.assertions import assert_with_msg
26
- from winipedia_utils.testing.config import LocalSecretsConfigFile
27
24
  from winipedia_utils.testing.convention import (
28
25
  get_obj_from_test_obj,
29
26
  make_test_obj_importpath_from_obj,
30
27
  make_untested_summary_error_msg,
31
28
  )
29
+ from winipedia_utils.text.config import DotEnvConfigFile
32
30
 
33
31
  logger = get_logger(__name__)
34
32
 
@@ -92,17 +90,15 @@ def get_github_repo_token() -> str:
92
90
  if token:
93
91
  return token
94
92
 
95
- local_secrets_module_path = to_module_name(LocalSecretsConfigFile.get_path())
96
- local_secrets_module = import_obj_from_importpath(local_secrets_module_path)
97
- token = getattr(local_secrets_module, "REPO_TOKEN", None)
98
- if not isinstance(token, str):
99
- msg = f"Expected REPO_TOKEN to be str, got {type(token)}"
100
- raise TypeError(msg)
93
+ # try .env next
94
+ dotenv_path = DotEnvConfigFile.get_path()
95
+ if not dotenv_path.exists():
96
+ msg = f"Expected {dotenv_path} to exist"
97
+ raise ValueError(msg)
98
+ dotenv = DotEnvConfigFile.load()
99
+ token = dotenv.get("REPO_TOKEN")
101
100
  if token:
102
101
  return token
103
102
 
104
- msg = (
105
- f"No token named REPO_TOKEN found "
106
- f"in github secrets or {LocalSecretsConfigFile.get_path()}"
107
- )
103
+ msg = f"Expected REPO_TOKEN in {dotenv_path}"
108
104
  raise ValueError(msg)
@@ -7,6 +7,7 @@ from typing import Any
7
7
 
8
8
  import tomlkit
9
9
  import yaml
10
+ from dotenv import dotenv_values
10
11
 
11
12
  import winipedia_utils
12
13
  from winipedia_utils.iterating.iterate import nested_structure_is_subset
@@ -198,3 +199,45 @@ class TomlConfigFile(ConfigFile):
198
199
  def get_file_extension(cls) -> str:
199
200
  """Get the file extension of the config file."""
200
201
  return "toml"
202
+
203
+
204
+ class DotEnvConfigFile(ConfigFile):
205
+ """config class for .env config files."""
206
+
207
+ @classmethod
208
+ def load(cls) -> dict[str, str | None]:
209
+ """Load the config file."""
210
+ return dotenv_values(cls.get_path())
211
+
212
+ @classmethod
213
+ def dump(cls, config: dict[str, Any] | list[Any]) -> None:
214
+ """Dump the config file."""
215
+ # is not supposed to be dumped to, so just raise error
216
+ if config:
217
+ msg = f"Cannot dump {config} to .env file."
218
+ raise ValueError(msg)
219
+
220
+ @classmethod
221
+ def get_file_extension(cls) -> str:
222
+ """Get the file extension of the config file."""
223
+ return "env"
224
+
225
+ @classmethod
226
+ def get_filename(cls) -> str:
227
+ """Get the filename of the config file."""
228
+ return "" # so it builds the path .env and not env.env
229
+
230
+ @classmethod
231
+ def get_parent_path(cls) -> Path:
232
+ """Get the path to the config file."""
233
+ return Path()
234
+
235
+ @classmethod
236
+ def get_configs(cls) -> dict[str, Any]:
237
+ """Get the config."""
238
+ return {}
239
+
240
+ @classmethod
241
+ def is_correct(cls) -> bool:
242
+ """Check if the config is correct."""
243
+ return super().is_correct() or cls.get_path().exists()