Metadata-Version: 2.4
Name: rotools
Version: 0.1.167
Summary: Robert Olechowski python tools
Author-email: Robert Olechowski <robertolechowski@gmail.com>
License-Expression: Apache-2.0
Project-URL: Homepage, https://github.com/RobertOlechowski/ROTools
Project-URL: Repository, https://github.com/RobertOlechowski/ROTools
Project-URL: Issues, https://github.com/RobertOlechowski/ROTools/issues
Keywords: utilities,tools,helpers,config,dictobj
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: PyYAML>=6.0
Requires-Dist: humanize>=4.0
Provides-Extra: minio
Requires-Dist: minio>=7.0; extra == "minio"
Provides-Extra: polars
Requires-Dist: polars>=0.20; extra == "polars"
Provides-Extra: requests
Requires-Dist: requests>=2.25; extra == "requests"
Provides-Extra: sqlalchemy
Requires-Dist: SQLAlchemy>=2.0; extra == "sqlalchemy"
Provides-Extra: dev
Requires-Dist: build>=1.0; extra == "dev"
Requires-Dist: twine>=6.0; extra == "dev"
Requires-Dist: bump-my-version>=0.28; extra == "dev"
Requires-Dist: pytest>=8.0; extra == "dev"
Requires-Dist: ruff>=0.6; extra == "dev"
Dynamic: license-file

# ROTools

A collection of Python utilities and helpers for everyday development tasks.

## Installation

```bash
pip install rotools
```

With optional extras:

```bash
pip install rotools[minio]       # MinioWrapper
pip install rotools[requests]    # RequestHelper
pip install rotools[polars]      # df_helpers
pip install rotools[sqlalchemy]  # db_helpers
```

## Quick start

```python
from ROTools import DictObj, ConfigLoader, StopWatch

# DictObj — dict with attribute access and dot-notation paths
d = DictObj(name="Alice", address=DictObj(city="Warsaw"))
print(d.name)                  # Alice
print(d.get("address.city"))   # Warsaw
d.set("address.zip", "00-001")
d.dump()

# ConfigLoader — YAML config with env-var overrides
cfg = ConfigLoader("config.yaml")
db_host = cfg.get("database.host")

# StopWatch — simple elapsed-time helper
sw = StopWatch()
sw.start()
# ... work ...
sw.stop()
print(sw)
```

## Modules

| Module | Description |
|--------|-------------|
| `DictObj` | Dict-like object with attribute access and dot-notation paths |
| `ConfigLoader` | YAML config loader with environment variable overrides |
| `Attr` | Deep get/set/del using dot-notation strings |
| `StopWatch` | Elapsed time measurement |
| `WorkersCollection` | Thread/process worker pool |
| `SignalHandler` | Graceful shutdown signal handling |
| `RequestHelper` | HTTP request wrapper with retries |
| `RateLimiter` | Rate limiting for loops and API calls |
| `SleepController` | Interruptible sleep |
| `SmartCounter` | Counter with merge support |
| `StringBuilder` | String/table builder |
| `HashBuilder` | Deterministic hash generation for objects |
| `MinioWrapper` | S3/Minio object storage wrapper |
| `PathWrapper` | Filesystem path utilities |

## Requirements

- Python >= 3.10
- PyYAML >= 6.0
- humanize >= 4.0

## License

Apache License 2.0
