Metadata-Version: 2.4
Name: penguin-utils
Version: 0.1.0
Summary: Shared Python utilities for Penguin Tech applications
Author-email: Penguin Tech Inc <dev@penguintech.io>
License: AGPL-3.0
Project-URL: Homepage, https://www.penguintech.io
Project-URL: Repository, https://github.com/penguintechinc/penguin-libs
Project-URL: Issues, https://github.com/penguintechinc/penguin-libs/issues
Keywords: penguintech,utilities,flask,pydal
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: GNU Affero General Public License v3
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
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.11
Description-Content-Type: text/markdown
Requires-Dist: pydal>=20230521.1
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: pytest-cov>=4.0; extra == "dev"
Requires-Dist: black>=23.0; extra == "dev"
Requires-Dist: ruff>=0.1.0; extra == "dev"
Requires-Dist: mypy>=1.0; extra == "dev"
Provides-Extra: flask
Requires-Dist: flask>=3.0; extra == "flask"
Requires-Dist: flask-security-too>=5.0; extra == "flask"

# Penguin Tech Python Utilities

Shared Python utilities for Penguin Tech applications.

## Installation

```bash
pip install penguin-utils

# With Flask extras
pip install penguin-utils[flask]
```

## Usage

### Sanitized Logging

```python
from penguintechinc_utils import get_logger, sanitize_log_data
from penguintechinc_utils.logging import SanitizedLogger

# Simple logger
log = SanitizedLogger("MyComponent")

# Automatically sanitizes sensitive data
log.info("User login attempt", {
    "email": "user@example.com",  # Logs as: [email]@example.com
    "password": "secret123",       # Logs as: [REDACTED]
    "remember_me": True,           # Logs as-is
})

# Output: [MyComponent] INFO: User login attempt {'email': '[email]@example.com', 'password': '[REDACTED]', 'remember_me': True}
```

### Sanitization Rules

The following are automatically redacted:
- Passwords, secrets, tokens
- API keys, auth tokens
- MFA/TOTP codes
- Session IDs, cookies
- Full email addresses (only domain is logged)

## Development

```bash
# Install dev dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Format code
black src tests
ruff check src tests

# Type check
mypy src
```

## License

AGPL-3.0 - See [LICENSE](../../LICENSE) for details.
