A utility library for Python development
Project description
winiutils
A utility library for Python development
Table of Contents
Features
- DataFrame Cleaning Pipeline Extensible Polars DataFrame cleaning with an 8-step pipeline
- Concurrent Processing Unified multiprocessing and multithreading with automatic resource optimization
- OOP Utilities Metaclasses and mixins for automatic method logging and instrumentation
- Security Tools — OS keyring integration and AES-GCM encryption utilities
- Type Safety — Full type hints with strict mypy compliance
- Production Ready — Comprehensive test coverage and logging integration
Installation
Using uv (recommended)
uv add winiutils
Using pip
pip install winiutils
From source
git clone https://github.com/Winipedia/winiutils.git
cd winiutils
uv sync
Quick Start
DataFrame Cleaning
from winiutils.src.data.dataframe.cleaning import CleaningDF
import polars as pl
class UserDataCleaner(CleaningDF):
"""Clean and standardize user data."""
USER_ID = "user_id"
EMAIL = "email"
SCORE = "score"
@classmethod
def get_rename_map(cls):
return {cls.USER_ID: "UserId", cls.EMAIL: "Email", cls.SCORE: "Score"}
@classmethod
def get_col_dtype_map(cls):
return {
cls.USER_ID: pl.Int64, cls.EMAIL: pl.Utf8, cls.SCORE: pl.Float64
}
# ... implement other abstract methods
# Usage
cleaned = UserDataCleaner(raw_dataframe)
result = cleaned.df
Concurrent Processing
from winiutils.src.iterating.concurrent.multiprocessing import multiprocess_loop
from winiutils.src.iterating.concurrent.multithreading import multithread_loop
# CPU-bound tasks (multiprocessing)
def process_chunk(data, config):
return heavy_computation(data, config)
results = multiprocess_loop(
process_function=process_chunk,
process_args=[(chunk,) for chunk in data_chunks],
process_args_static=(config,),
process_args_len=len(data_chunks),
)
# I/O-bound tasks (multithreading)
def fetch_url(url, headers):
return requests.get(url, headers=headers)
results = multithread_loop(
process_function=fetch_url,
process_args=[(url,) for url in urls],
process_args_static=(headers,),
process_args_len=len(urls),
)
Automatic Method Logging
from winiutils.src.oop.mixins.mixin import ABCLoggingMixin
class MyService(ABCLoggingMixin):
def process_data(self, data: list) -> dict:
# Automatically logged with timing
return {"processed": len(data)}
# Logs: "MyService - Calling process_data with (...) and {...}"
# Logs: "MyService - process_data finished with 0.5 seconds -> returning {...}"
Encryption with Keyring
from winiutils.src.security.keyring import get_or_create_aes_gcm
from winiutils.src.security.cryptography import (
encrypt_with_aes_gcm,
decrypt_with_aes_gcm
)
# Get or create encryption key (stored in OS keyring)
aes_gcm, key = get_or_create_aes_gcm("my_app", "user@example.com")
# Encrypt and decrypt
encrypted = encrypt_with_aes_gcm(aes_gcm, b"Secret message")
decrypted = decrypt_with_aes_gcm(aes_gcm, encrypted)
Documentation
Full documentation is available in the docs folder:
- Data Processing DataFrame cleaning pipeline and data structures
- Iterating & Concurrency — Parallel processing utilities
- OOP Utilities — Metaclasses and mixins
- Security — Encryption and keyring integration
Modules
| Module | Description |
|---|---|
winiutils.src.data |
DataFrame cleaning pipeline and data structure utilities |
winiutils.src.iterating |
Concurrent processing with multiprocessing and multithreading |
winiutils.src.oop |
Metaclasses and mixins for automatic method logging |
winiutils.src.security |
AES-GCM encryption and OS keyring integration |
Development
Setup
git clone https://github.com/Winipedia/winiutils.git
cd winiutils
uv sync --all-groups
Running Tests
uv run pytest
Code Quality
# Linting
uv run ruff check .
# Type checking
uv run mypy .
# Security scanning
uv run bandit -r winiutils/
Pre-commit Hooks
uv run pre-commit install
uv run pre-commit run --all-files
Project Structure
winiutils/
├── src/ # Main source code
│ ├── data/ # Data processing
│ │ ├── dataframe/ # Polars DataFrame cleaning
│ │ └── structures/ # Dicts, text utilities
│ ├── iterating/ # Iteration utilities
│ │ └── concurrent/ # Multiprocessing & multithreading
│ ├── oop/ # OOP patterns
│ │ └── mixins/ # Logging metaclass & mixin
│ └── security/ # Security utilities
│ ├── cryptography.py # AES-GCM encryption
│ └── keyring.py # OS keyring integration
├── dev/ # Development tools
│ ├── cli/ # CLI subcommands
│ └── tests/fixtures/ # Test fixtures
├── docs/ # Documentation
└── tests/ # Test suite
License
This project is licensed under the MIT License. See the LICENSE file for details.
Contributing
Contributions are welcome! Please ensure:
- All tests pass (
uv run pytest) - Code passes linting (
uv run ruff check .) - Types are correct (
uv run mypy .) - New features include tests
- Documentation is updated for API changes
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
winiutils-2.3.29.tar.gz
(25.7 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file winiutils-2.3.29.tar.gz.
File metadata
- Download URL: winiutils-2.3.29.tar.gz
- Upload date:
- Size: 25.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5154b1e33b320ba65ba467ca0598d71bfe787c93e54ee050f7d52832ddc6ea76
|
|
| MD5 |
a664e8aec67ae3a3a7f6815a42e16af3
|
|
| BLAKE2b-256 |
85c3611482082a56cd639bda2d0ac304dcc3908adba3a56f71f9603a0b4166a3
|
File details
Details for the file winiutils-2.3.29-py3-none-any.whl.
File metadata
- Download URL: winiutils-2.3.29-py3-none-any.whl
- Upload date:
- Size: 38.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a67766da3a75bf67b6c64904aab25705f05541a582bb56528492ac8c63418cf9
|
|
| MD5 |
e8b953ebf00d244f77f4f290bcd139ee
|
|
| BLAKE2b-256 |
ddba472eb94b481797683d096bf986d1d654067c71cc9710214d0aa96818609e
|