winipedia-utils 0.5.18__tar.gz → 0.5.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 (95) hide show
  1. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/PKG-INFO +36 -4
  2. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/README.md +35 -3
  3. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/pyproject.toml +1 -1
  4. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/git/github/workflows/base/base.py +1 -0
  5. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/git/github/workflows/release.py +7 -3
  6. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/LICENSE +0 -0
  7. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/__init__.py +0 -0
  8. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/concurrent/__init__.py +0 -0
  9. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/concurrent/concurrent.py +0 -0
  10. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/concurrent/multiprocessing.py +0 -0
  11. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/concurrent/multithreading.py +0 -0
  12. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/data/__init__.py +0 -0
  13. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/data/dataframe/__init__.py +0 -0
  14. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/data/dataframe/cleaning.py +0 -0
  15. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/data/structures/__init__.py +0 -0
  16. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/data/structures/dicts.py +0 -0
  17. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/git/__init__.py +0 -0
  18. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/git/github/__init__.py +0 -0
  19. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/git/github/github.py +0 -0
  20. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/git/github/repo/__init__.py +0 -0
  21. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/git/github/repo/protect.py +0 -0
  22. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/git/github/repo/repo.py +0 -0
  23. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/git/github/workflows/__init__.py +0 -0
  24. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/git/github/workflows/base/__init__.py +0 -0
  25. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/git/github/workflows/health_check.py +0 -0
  26. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/git/github/workflows/publish.py +0 -0
  27. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/git/gitignore/__init__.py +0 -0
  28. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/git/gitignore/config.py +0 -0
  29. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/git/gitignore/gitignore.py +0 -0
  30. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/git/pre_commit/__init__.py +0 -0
  31. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/git/pre_commit/config.py +0 -0
  32. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/git/pre_commit/hooks.py +0 -0
  33. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/git/pre_commit/run_hooks.py +0 -0
  34. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/iterating/__init__.py +0 -0
  35. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/iterating/iterate.py +0 -0
  36. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/logging/__init__.py +0 -0
  37. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/logging/ansi.py +0 -0
  38. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/logging/config.py +0 -0
  39. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/logging/logger.py +0 -0
  40. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/modules/__init__.py +0 -0
  41. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/modules/class_.py +0 -0
  42. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/modules/function.py +0 -0
  43. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/modules/inspection.py +0 -0
  44. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/modules/module.py +0 -0
  45. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/modules/package.py +0 -0
  46. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/oop/__init__.py +0 -0
  47. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/oop/mixins/__init__.py +0 -0
  48. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/oop/mixins/meta.py +0 -0
  49. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/oop/mixins/mixin.py +0 -0
  50. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/os/__init__.py +0 -0
  51. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/os/os.py +0 -0
  52. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/projects/__init__.py +0 -0
  53. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/projects/poetry/__init__.py +0 -0
  54. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/projects/poetry/config.py +0 -0
  55. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/projects/poetry/poetry.py +0 -0
  56. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/projects/project.py +0 -0
  57. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/py.typed +0 -0
  58. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/resources/__init__.py +0 -0
  59. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/resources/svgs/__init__.py +0 -0
  60. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/resources/svgs/delete_garbage_can.svg +0 -0
  61. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/resources/svgs/download_arrow.svg +0 -0
  62. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/resources/svgs/exit_fullscreen_icon.svg +0 -0
  63. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/resources/svgs/fullscreen_icon.svg +0 -0
  64. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/resources/svgs/menu_icon.svg +0 -0
  65. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/resources/svgs/pause_icon.svg +0 -0
  66. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/resources/svgs/play_icon.svg +0 -0
  67. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/resources/svgs/plus_icon.svg +0 -0
  68. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/resources/svgs/svg.py +0 -0
  69. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/security/__init__.py +0 -0
  70. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/security/cryptography.py +0 -0
  71. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/security/keyring.py +0 -0
  72. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/setup.py +0 -0
  73. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/testing/__init__.py +0 -0
  74. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/testing/assertions.py +0 -0
  75. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/testing/config.py +0 -0
  76. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/testing/convention.py +0 -0
  77. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/testing/create_tests.py +0 -0
  78. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/testing/fixtures.py +0 -0
  79. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/testing/skip.py +0 -0
  80. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/testing/tests/__init__.py +0 -0
  81. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/testing/tests/base/__init__.py +0 -0
  82. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/testing/tests/base/fixtures/__init__.py +0 -0
  83. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/testing/tests/base/fixtures/fixture.py +0 -0
  84. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/testing/tests/base/fixtures/scopes/__init__.py +0 -0
  85. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/testing/tests/base/fixtures/scopes/class_.py +0 -0
  86. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/testing/tests/base/fixtures/scopes/function.py +0 -0
  87. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/testing/tests/base/fixtures/scopes/module.py +0 -0
  88. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/testing/tests/base/fixtures/scopes/package.py +0 -0
  89. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/testing/tests/base/fixtures/scopes/session.py +0 -0
  90. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/testing/tests/base/utils/__init__.py +0 -0
  91. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/testing/tests/base/utils/utils.py +0 -0
  92. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/testing/tests/conftest.py +0 -0
  93. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/text/__init__.py +0 -0
  94. {winipedia_utils-0.5.18 → winipedia_utils-0.5.22}/winipedia_utils/text/config.py +0 -0
  95. {winipedia_utils-0.5.18 → winipedia_utils-0.5.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.5.18
3
+ Version: 0.5.22
4
4
  Summary: A package with many utility functions
5
5
  License-Expression: MIT
6
6
  License-File: LICENSE
@@ -105,7 +105,7 @@ The setup creates the following configuration files:
105
105
  - `.pre-commit-config.yaml` - Pre-commit hook configuration
106
106
  - `.gitignore` - Git ignore rules (assumes you added one on GitHub before.)
107
107
  - `pyproject.toml` - Project configuration with Poetry settings
108
- - `.github/workflows/health_check.yaml` - Health check workflow (Runs on every push and pull request, all workfows run on the latest possible python version in pyproject.toml)
108
+ - `.github/workflows/health_check.yaml` - Health check workflow (Runs on every push and pull request using a matrix strategy to test across multiple operating systems and Python versions)
109
109
  - `.github/workflows/release.yaml` - Release workflow (Creates a release on GitHub when the same actions as in health check pass and commits are pushed to main)
110
110
  - `.github/workflows/publish.yaml` - Publishing workflow (Publishes to PyPI when a release is created by the release workflow, if you use this workflow, you need to add a PYPI_TOKEN (named PYPI_TOKEN) to your GitHub secrets that has write access to the package on PyPI.)
111
111
  - `py.typed` - PEP 561 marker for type hints
@@ -114,6 +114,38 @@ The setup creates the following configuration files:
114
114
  - `conftest.py` - Pytest configuration file
115
115
  - `.python-version` - Python version file for pyenv (if you use pyenv, puts in the lowest supported python version in pyproject.toml opposed to the latest possible python version in workflows)
116
116
 
117
+ ### GitHub Workflows and Matrix Strategy
118
+
119
+ The project uses GitHub Actions workflows with a **matrix strategy** to ensure cross-platform compatibility:
120
+
121
+ #### Matrix Configuration
122
+
123
+ The health check and release workflows test your code across:
124
+ - **Operating Systems**: Ubuntu (latest), Windows (latest), macOS (latest)
125
+ - **Python Versions**: All versions specified in your `pyproject.toml` (e.g., 3.12, 3.13, 3.14)
126
+
127
+ This matrix strategy ensures your code works reliably across different environments before merging or releasing.
128
+
129
+ #### Workflow Structure
130
+
131
+ The health check workflow consists of two jobs:
132
+
133
+ 1. **Matrix Job** (`health_check_matrix`) - Runs all checks in parallel across the matrix of OS and Python versions:
134
+ - Checkout repository
135
+ - Setup Git, Python, and Poetry
136
+ - Add Poetry to PATH (Windows-specific step)
137
+ - Install dependencies
138
+ - Setup CI keyring
139
+ - Protect repository (applies branch protection rules)
140
+ - Run pre-commit hooks (linting, formatting, type checking, security, tests)
141
+
142
+ 2. **Aggregation Job** (`health_check`) - Aggregates matrix results into a single status check:
143
+ - Required for branch protection compatibility
144
+ - Only runs after all matrix jobs complete successfully
145
+ - Provides a single status check that can be marked as required in branch protection rules
146
+
147
+ The release workflow extends the health check workflow and adds a release job that runs after all health checks pass.
148
+
117
149
  ### Pre-commit Hook Workflow
118
150
 
119
151
  When you commit code using `git commit`, the following checks run automatically:
@@ -203,8 +235,8 @@ A ruleset named `main protection` is created for the `main` branch with the foll
203
235
  - Requires review thread resolution (all comments in reviews must be resolved before merge)
204
236
  - Allowed merge methods: `squash` and `rebase` (no merge commits, keeps history clean)
205
237
  - **Required Status Checks:**
206
- - Strict mode enabled (all status checks must pass on the latest commit, not older ones (sets the health check as required status check))
207
- - Health check workflow must pass (the CI/CD pipeline must complete successfully)
238
+ - Strict mode enabled (all status checks must pass on the latest commit, not older ones)
239
+ - Health check workflow must pass (the aggregated `health_check` job ensures all matrix combinations passed successfully)
208
240
  - **Bypass Actors** - Repository admins can bypass all rules (for emergency situations)
209
241
 
210
242
  ## Utilities
@@ -78,7 +78,7 @@ The setup creates the following configuration files:
78
78
  - `.pre-commit-config.yaml` - Pre-commit hook configuration
79
79
  - `.gitignore` - Git ignore rules (assumes you added one on GitHub before.)
80
80
  - `pyproject.toml` - Project configuration with Poetry settings
81
- - `.github/workflows/health_check.yaml` - Health check workflow (Runs on every push and pull request, all workfows run on the latest possible python version in pyproject.toml)
81
+ - `.github/workflows/health_check.yaml` - Health check workflow (Runs on every push and pull request using a matrix strategy to test across multiple operating systems and Python versions)
82
82
  - `.github/workflows/release.yaml` - Release workflow (Creates a release on GitHub when the same actions as in health check pass and commits are pushed to main)
83
83
  - `.github/workflows/publish.yaml` - Publishing workflow (Publishes to PyPI when a release is created by the release workflow, if you use this workflow, you need to add a PYPI_TOKEN (named PYPI_TOKEN) to your GitHub secrets that has write access to the package on PyPI.)
84
84
  - `py.typed` - PEP 561 marker for type hints
@@ -87,6 +87,38 @@ The setup creates the following configuration files:
87
87
  - `conftest.py` - Pytest configuration file
88
88
  - `.python-version` - Python version file for pyenv (if you use pyenv, puts in the lowest supported python version in pyproject.toml opposed to the latest possible python version in workflows)
89
89
 
90
+ ### GitHub Workflows and Matrix Strategy
91
+
92
+ The project uses GitHub Actions workflows with a **matrix strategy** to ensure cross-platform compatibility:
93
+
94
+ #### Matrix Configuration
95
+
96
+ The health check and release workflows test your code across:
97
+ - **Operating Systems**: Ubuntu (latest), Windows (latest), macOS (latest)
98
+ - **Python Versions**: All versions specified in your `pyproject.toml` (e.g., 3.12, 3.13, 3.14)
99
+
100
+ This matrix strategy ensures your code works reliably across different environments before merging or releasing.
101
+
102
+ #### Workflow Structure
103
+
104
+ The health check workflow consists of two jobs:
105
+
106
+ 1. **Matrix Job** (`health_check_matrix`) - Runs all checks in parallel across the matrix of OS and Python versions:
107
+ - Checkout repository
108
+ - Setup Git, Python, and Poetry
109
+ - Add Poetry to PATH (Windows-specific step)
110
+ - Install dependencies
111
+ - Setup CI keyring
112
+ - Protect repository (applies branch protection rules)
113
+ - Run pre-commit hooks (linting, formatting, type checking, security, tests)
114
+
115
+ 2. **Aggregation Job** (`health_check`) - Aggregates matrix results into a single status check:
116
+ - Required for branch protection compatibility
117
+ - Only runs after all matrix jobs complete successfully
118
+ - Provides a single status check that can be marked as required in branch protection rules
119
+
120
+ The release workflow extends the health check workflow and adds a release job that runs after all health checks pass.
121
+
90
122
  ### Pre-commit Hook Workflow
91
123
 
92
124
  When you commit code using `git commit`, the following checks run automatically:
@@ -176,8 +208,8 @@ A ruleset named `main protection` is created for the `main` branch with the foll
176
208
  - Requires review thread resolution (all comments in reviews must be resolved before merge)
177
209
  - Allowed merge methods: `squash` and `rebase` (no merge commits, keeps history clean)
178
210
  - **Required Status Checks:**
179
- - Strict mode enabled (all status checks must pass on the latest commit, not older ones (sets the health check as required status check))
180
- - Health check workflow must pass (the CI/CD pipeline must complete successfully)
211
+ - Strict mode enabled (all status checks must pass on the latest commit, not older ones)
212
+ - Health check workflow must pass (the aggregated `health_check` job ensures all matrix combinations passed successfully)
181
213
  - **Bypass Actors** - Repository admins can bypass all rules (for emergency situations)
182
214
 
183
215
  ## Utilities
@@ -1,7 +1,7 @@
1
1
  # Project section
2
2
  [project]
3
3
  name = "winipedia-utils"
4
- version = "0.5.18"
4
+ version = "0.5.22"
5
5
  description = "A package with many utility functions"
6
6
  readme = "README.md"
7
7
  requires-python = ">=3.12"
@@ -243,6 +243,7 @@ class Workflow(YamlConfigFile):
243
243
  *cls.get_poetry_setup_steps(
244
244
  install_dependencies=True,
245
245
  repo_token=True,
246
+ with_keyring=True,
246
247
  ),
247
248
  cls.get_pre_commit_step(),
248
249
  cls.get_commit_step(),
@@ -3,10 +3,13 @@
3
3
  This workflow is used to create a release on GitHub.
4
4
  """
5
5
 
6
- from typing import Any
6
+ from typing import TYPE_CHECKING, Any
7
7
 
8
8
  from winipedia_utils.git.github.workflows.health_check import HealthCheckWorkflow
9
9
 
10
+ if TYPE_CHECKING:
11
+ from winipedia_utils.git.github.workflows.base.base import Workflow
12
+
10
13
 
11
14
  class ReleaseWorkflow(HealthCheckWorkflow):
12
15
  """Release workflow.
@@ -40,9 +43,10 @@ class ReleaseWorkflow(HealthCheckWorkflow):
40
43
  @classmethod
41
44
  def get_jobs(cls) -> dict[str, Any]:
42
45
  """Get the workflow jobs."""
43
- jobs = HealthCheckWorkflow.get_jobs()
46
+ parent_cls: type[Workflow] = cls.__bases__[0]
47
+ jobs = parent_cls.get_jobs()
44
48
  release_job = cls.get_standard_job(
45
- needs=[HealthCheckWorkflow.get_filename()],
49
+ needs=[parent_cls.get_filename()],
46
50
  steps=[
47
51
  *cls.get_release_steps(),
48
52
  ],