winiutils 2.3.12__py3-none-any.whl → 2.3.45__py3-none-any.whl

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.
@@ -0,0 +1,8 @@
1
+ """Shared commands for the CLI.
2
+
3
+ This module provides shared CLI commands that can be used by multiple
4
+ packages in a multi-package architecture. These commands are automatically
5
+ discovered and added to the CLI by pyrig.
6
+ Example is version command that is available in all packages.
7
+ uv run my-awesome-project version will return my-awesome-project version 0.1.0
8
+ """
@@ -0,0 +1,5 @@
1
+ """Tool wrappers for CLI tools used in development workflows.
2
+
3
+ Tools are subclasses of `Tool` providing methods that return `Args` objects
4
+ for type-safe command construction and execution.
5
+ """
@@ -7,7 +7,7 @@ This module provides utility functions for common string operations including:
7
7
  - Deterministic hash generation
8
8
 
9
9
  Example:
10
- >>> from winiutils.src.data.structures.text.string import (
10
+ >>> from winiutils.src.data.structures.text.string_ import (
11
11
  ... value_to_truncated_string,
12
12
  ... get_reusable_hash,
13
13
  ... )
@@ -24,7 +24,7 @@ from typing import Any
24
24
 
25
25
  from pyrig.src.modules.function import is_func
26
26
 
27
- from winiutils.src.data.structures.text.string import value_to_truncated_string
27
+ from winiutils.src.data.structures.text.string_ import value_to_truncated_string
28
28
 
29
29
  logger = logging.getLogger(__name__)
30
30
 
@@ -22,7 +22,7 @@ from collections.abc import Callable
22
22
  import keyring
23
23
  from cryptography.fernet import Fernet
24
24
  from cryptography.hazmat.primitives.ciphers.aead import AESGCM
25
- from pyrig.src.git.git import running_in_github_actions
25
+ from pyrig.src.git import running_in_github_actions
26
26
 
27
27
  if running_in_github_actions():
28
28
  from keyrings.alt.file import PlaintextKeyring # type: ignore[import-untyped]
@@ -1,13 +1,16 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: winiutils
3
- Version: 2.3.12
3
+ Version: 2.3.45
4
4
  Summary: A utility library for Python development
5
+ Keywords:
5
6
  Author: Winipedia
6
7
  License-Expression: MIT
7
8
  License-File: LICENSE
8
9
  Classifier: Programming Language :: Python :: 3.12
9
10
  Classifier: Programming Language :: Python :: 3.13
10
11
  Classifier: Programming Language :: Python :: 3.14
12
+ Classifier: Operating System :: OS Independent
13
+ Classifier: Typing :: Typed
11
14
  Requires-Dist: cryptography
12
15
  Requires-Dist: defusedxml
13
16
  Requires-Dist: keyring
@@ -15,7 +18,13 @@ Requires-Dist: keyrings-alt
15
18
  Requires-Dist: polars
16
19
  Requires-Dist: pyrig
17
20
  Requires-Dist: tqdm
21
+ Maintainer: Winipedia
18
22
  Requires-Python: >=3.12
23
+ Project-URL: Changelog, https://github.com/Winipedia/winiutils/releases
24
+ Project-URL: Documentation, https://Winipedia.github.io/winiutils
25
+ Project-URL: Homepage, https://github.com/Winipedia/winiutils
26
+ Project-URL: Issues, https://github.com/Winipedia/winiutils/issues
27
+ Project-URL: Source, https://github.com/Winipedia/winiutils
19
28
  Description-Content-Type: text/markdown
20
29
 
21
30
  # winiutils
@@ -23,21 +32,25 @@ Description-Content-Type: text/markdown
23
32
  <!-- tooling -->
24
33
  [![pyrig](https://img.shields.io/badge/built%20with-pyrig-3776AB?logo=buildkite&logoColor=black)](https://github.com/Winipedia/pyrig)
25
34
  [![uv](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json)](https://github.com/astral-sh/uv)
35
+ [![Container](https://img.shields.io/badge/Container-Podman-A23CD6?logo=podman&logoColor=grey&colorA=0D1F3F&colorB=A23CD6)](https://podman.io/)
26
36
  [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit)](https://pre-commit.com/)
37
+ [![MkDocs](https://img.shields.io/badge/MkDocs-Documentation-326CE5?logo=mkdocs&logoColor=white)](https://www.mkdocs.org/)
27
38
  <!-- code-quality -->
28
39
  [![ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
29
- [![ty](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ty/main/assets/badge/v0.json)](https://github.com/astral-sh/ty)[![mypy](https://img.shields.io/badge/type%20checked-mypy-039dfc.svg)](https://mypy-lang.org/)
40
+ [![ty](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ty/main/assets/badge/v0.json)](https://github.com/astral-sh/ty)
30
41
  [![security: bandit](https://img.shields.io/badge/security-bandit-yellow.svg)](https://github.com/PyCQA/bandit)
31
42
  [![pytest](https://img.shields.io/badge/tested%20with-pytest-46a2f1.svg?logo=pytest)](https://pytest.org/)
32
43
  [![codecov](https://codecov.io/gh/Winipedia/winiutils/branch/main/graph/badge.svg)](https://codecov.io/gh/Winipedia/winiutils)
44
+ [![rumdl](https://img.shields.io/badge/markdown-rumdl-darkgreen)](https://github.com/rvben/rumdl)
33
45
  <!-- package-info -->
34
- [![PyPI](https://img.shields.io/pypi/v/winiutils?logo=pypi&logoColor=white)](https://pypi.org/project/winiutils/)
46
+ [![PyPI](https://img.shields.io/pypi/v/winiutils?logo=pypi&logoColor=white)](https://pypi.org/project/winiutils)
35
47
  [![Python](https://img.shields.io/badge/python-3.12|3.13|3.14-blue.svg?logo=python&logoColor=white)](https://www.python.org/)
36
48
  [![License](https://img.shields.io/github/license/Winipedia/winiutils)](https://github.com/Winipedia/winiutils/blob/main/LICENSE)
37
49
  <!-- ci/cd -->
38
50
  [![CI](https://img.shields.io/github/actions/workflow/status/Winipedia/winiutils/health_check.yaml?label=CI&logo=github)](https://github.com/Winipedia/winiutils/actions/workflows/health_check.yaml)
39
51
  [![CD](https://img.shields.io/github/actions/workflow/status/Winipedia/winiutils/release.yaml?label=CD&logo=github)](https://github.com/Winipedia/winiutils/actions/workflows/release.yaml)
40
-
52
+ <!-- documentation -->
53
+ [![Documentation](https://img.shields.io/badge/Docs-GitHub%20Pages-black?style=for-the-badge&logo=github&logoColor=white)](https://Winipedia.github.io/winiutils)
41
54
 
42
55
  ---
43
56
 
@@ -45,7 +58,6 @@ Description-Content-Type: text/markdown
45
58
 
46
59
  ---
47
60
 
48
-
49
61
  ## Table of Contents
50
62
 
51
63
  - [Features](#features)
@@ -60,9 +72,13 @@ Description-Content-Type: text/markdown
60
72
 
61
73
  ## Features
62
74
 
63
- - **DataFrame Cleaning Pipeline** — Extensible Polars DataFrame cleaning with an 8-step pipeline
64
- - **Concurrent Processing** Unified multiprocessing and multithreading with automatic resource optimization
65
- - **OOP Utilities** — Metaclasses and mixins for automatic method logging and instrumentation
75
+ - **DataFrame Cleaning Pipeline**
76
+ Extensible Polars DataFrame cleaning with an 8-step pipeline
77
+ - **Concurrent Processing**
78
+ Unified multiprocessing and multithreading
79
+ with automatic resource optimization
80
+ - **OOP Utilities**
81
+ Metaclasses and mixins for automatic method logging and instrumentation
66
82
  - **Security Tools** — OS keyring integration and AES-GCM encryption utilities
67
83
  - **Type Safety** — Full type hints with strict mypy compliance
68
84
  - **Production Ready** — Comprehensive test coverage and logging integration
@@ -114,7 +130,9 @@ class UserDataCleaner(CleaningDF):
114
130
 
115
131
  @classmethod
116
132
  def get_col_dtype_map(cls):
117
- return {cls.USER_ID: pl.Int64, cls.EMAIL: pl.Utf8, cls.SCORE: pl.Float64}
133
+ return {
134
+ cls.USER_ID: pl.Int64, cls.EMAIL: pl.Utf8, cls.SCORE: pl.Float64
135
+ }
118
136
 
119
137
  # ... implement other abstract methods
120
138
 
@@ -170,7 +188,10 @@ class MyService(ABCLoggingMixin):
170
188
 
171
189
  ```python
172
190
  from winiutils.src.security.keyring import get_or_create_aes_gcm
173
- from winiutils.src.security.cryptography import encrypt_with_aes_gcm, decrypt_with_aes_gcm
191
+ from winiutils.src.security.cryptography import (
192
+ encrypt_with_aes_gcm,
193
+ decrypt_with_aes_gcm
194
+ )
174
195
 
175
196
  # Get or create encryption key (stored in OS keyring)
176
197
  aes_gcm, key = get_or_create_aes_gcm("my_app", "user@example.com")
@@ -186,7 +207,8 @@ decrypted = decrypt_with_aes_gcm(aes_gcm, encrypted)
186
207
 
187
208
  Full documentation is available in the [docs](./docs/) folder:
188
209
 
189
- - [**Data Processing**](./docs/data.md) — DataFrame cleaning pipeline and data structures
210
+ - [**Data Processing**](./docs/data.md)
211
+ DataFrame cleaning pipeline and data structures
190
212
  - [**Iterating & Concurrency**](./docs/iterating.md) — Parallel processing utilities
191
213
  - [**OOP Utilities**](./docs/oop.md) — Metaclasses and mixins
192
214
  - [**Security**](./docs/security.md) — Encryption and keyring integration
@@ -244,7 +266,7 @@ uv run pre-commit run --all-files
244
266
 
245
267
  ## Project Structure
246
268
 
247
- ```
269
+ ```text
248
270
  winiutils/
249
271
  ├── src/ # Main source code
250
272
  │ ├── data/ # Data processing
@@ -268,7 +290,8 @@ winiutils/
268
290
 
269
291
  ## License
270
292
 
271
- This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
293
+ This project is licensed under the MIT License.
294
+ See the [LICENSE](LICENSE) file for details.
272
295
 
273
296
  ---
274
297
 
@@ -280,4 +303,4 @@ Contributions are welcome! Please ensure:
280
303
  2. Code passes linting (`uv run ruff check .`)
281
304
  3. Types are correct (`uv run mypy .`)
282
305
  4. New features include tests
283
- 5. Documentation is updated for API changes
306
+ 5. Documentation is updated for API changes
@@ -2,8 +2,10 @@ winiutils/__init__.py,sha256=vOWZ8n-YemVIzDLd8eWw1HVPGH3jxuT6VtDKHbmxk_A,43
2
2
  winiutils/dev/__init__.py,sha256=XHsbmjiaGom-KX-S3leCY9cJD3aP9p_0X6xYMcdkHBU,23
3
3
  winiutils/dev/builders/__init__.py,sha256=XHsbmjiaGom-KX-S3leCY9cJD3aP9p_0X6xYMcdkHBU,23
4
4
  winiutils/dev/cli/__init__.py,sha256=XHsbmjiaGom-KX-S3leCY9cJD3aP9p_0X6xYMcdkHBU,23
5
+ winiutils/dev/cli/shared_subcommands.py,sha256=3sJl1DD-DVRok2BXFWjncF_NLnMZL_NLqMWozmQm390,365
5
6
  winiutils/dev/cli/subcommands.py,sha256=iurWZwJwEKAfGpfjkn1YOhnRbIruCB4ouE-8R_Lh3JY,228
6
7
  winiutils/dev/configs/__init__.py,sha256=XHsbmjiaGom-KX-S3leCY9cJD3aP9p_0X6xYMcdkHBU,23
8
+ winiutils/dev/management/__init__.py,sha256=dZm5jWpCTZl7I44Ykr6S1_yU4ATNG5evtUL3DmGjCLs,193
7
9
  winiutils/dev/tests/__init__.py,sha256=XHsbmjiaGom-KX-S3leCY9cJD3aP9p_0X6xYMcdkHBU,23
8
10
  winiutils/dev/tests/fixtures/__init__.py,sha256=XHsbmjiaGom-KX-S3leCY9cJD3aP9p_0X6xYMcdkHBU,23
9
11
  winiutils/dev/tests/fixtures/fixtures.py,sha256=oHJSjLS-oxS9r786S-wCCX5SQIbLt1rl2RjSLSW3S0A,937
@@ -17,7 +19,7 @@ winiutils/src/data/dataframe/cleaning.py,sha256=dfecVWVmcjw0LSxFuGmvDAHiv3wMjncu
17
19
  winiutils/src/data/structures/__init__.py,sha256=zRTd-UHZLRH4LPSnQgKxNz2jcDT8Ah7x0gYfHxvKJEE,220
18
20
  winiutils/src/data/structures/dicts.py,sha256=8R6Jw47G-Z8ad63Hsj0UUaaH6eM-tCur36zKU5urYKY,1190
19
21
  winiutils/src/data/structures/text/__init__.py,sha256=8wUJOGa1-JLmdg0qaQzcuBOh99G2cyZvxO-T4qi9Ef0,195
20
- winiutils/src/data/structures/text/string.py,sha256=Heg_Y6CNQ3p1ZaQjuz1ffBu-Vd0UHp143AnLLL5dQE0,5379
22
+ winiutils/src/data/structures/text/string_.py,sha256=9DZ2XKzxTQjlegoHf0hHA6lUQz2h9338IjyfDE73dPQ,5380
21
23
  winiutils/src/iterating/__init__.py,sha256=25RIhD65SzjIkqRquxNHL8GMd3Cuvsw5EtG1ShYC64o,273
22
24
  winiutils/src/iterating/concurrent/__init__.py,sha256=ymePluCroEVm16NJV-r7tCUCWUZcp7jvfKYOlW7AWgM,373
23
25
  winiutils/src/iterating/concurrent/concurrent.py,sha256=EBvRuNG1XKubahZ405zX_j9c-iwwnS679GM03IP_cCQ,10717
@@ -26,13 +28,13 @@ winiutils/src/iterating/concurrent/multithreading.py,sha256=U3RN0vBdrbc8P059rP22
26
28
  winiutils/src/iterating/iterate.py,sha256=CQP8YfkYywAGFVlkib_KZtgTy57bt0oC1KKwdDlH4vU,1554
27
29
  winiutils/src/oop/__init__.py,sha256=HaR2nSm3P0Qj5iu9_8AtjDxeQS3fW17pZpgf2Yxyz80,232
28
30
  winiutils/src/oop/mixins/__init__.py,sha256=kjKziiB-AKThhy7uHqKznfh7otIqW_a3z1bf22VVP84,270
29
- winiutils/src/oop/mixins/meta.py,sha256=3hR5AGbqOPXumbytuDKRiW0VmBFuDENbrlwAjHCsdVg,7373
31
+ winiutils/src/oop/mixins/meta.py,sha256=UTC-z9KJhR_PKRbPLKfgmHxpiS0t-u4nu0d8lidx4l0,7374
30
32
  winiutils/src/oop/mixins/mixin.py,sha256=1DBFhyHWtuYR4pAE8t85nfx9McxcM2YvwQKCTSFugOY,2109
31
33
  winiutils/src/security/__init__.py,sha256=6J6nWfzT2Xe2Yy7HHgj6dR2g9AYrqY77qL4aa_fzb94,250
32
34
  winiutils/src/security/cryptography.py,sha256=Oz-5LK4p43kjnriZGJzeUxfZmKyxN5CnbxVrSwsk8lQ,3424
33
- winiutils/src/security/keyring.py,sha256=PlEtJU2sJaM23IgLN1Tt93u3hNT_WsQiSw04TVfbuD8,6064
34
- winiutils-2.3.12.dist-info/licenses/LICENSE,sha256=o316mE2gGzd__JT69p7S_zlOmKiHh8YjpImCCcWyTvM,1066
35
- winiutils-2.3.12.dist-info/WHEEL,sha256=xDCZ-UyfvkGuEHPeI7BcJzYKIZzdqN8A8o1M5Om8IyA,79
36
- winiutils-2.3.12.dist-info/entry_points.txt,sha256=oH6bkIotdZXXBGdxsd3xv_7LBil4P0Ph4-L6PFySkTw,95
37
- winiutils-2.3.12.dist-info/METADATA,sha256=znX-DMTQHM9f2PifG0Tv1H9VNITAXT_QdlitorD7TXM,8670
38
- winiutils-2.3.12.dist-info/RECORD,,
35
+ winiutils/src/security/keyring.py,sha256=BbNjcGPsNalSm0aTXGWZ5EMb08F4I8jiCdozhStm1ko,6060
36
+ winiutils-2.3.45.dist-info/licenses/LICENSE,sha256=o316mE2gGzd__JT69p7S_zlOmKiHh8YjpImCCcWyTvM,1066
37
+ winiutils-2.3.45.dist-info/WHEEL,sha256=KSLUh82mDPEPk0Bx0ScXlWL64bc8KmzIPNcpQZFV-6E,79
38
+ winiutils-2.3.45.dist-info/entry_points.txt,sha256=oH6bkIotdZXXBGdxsd3xv_7LBil4P0Ph4-L6PFySkTw,95
39
+ winiutils-2.3.45.dist-info/METADATA,sha256=4ZBm-XM54kQ8O_AwwuCKHwiUoYNhv8-Ww9gSM4q_2ME,9601
40
+ winiutils-2.3.45.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: uv 0.9.17
2
+ Generator: uv 0.9.22
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any