Metadata-Version: 2.4
Name: time-to-sail
Version: 0.1.0
Summary: UTC-first datetime utilities for Python & ORMs: parse any tz, store as UTC, convert for display.
Project-URL: Homepage, https://example.com/time-to-sail
Project-URL: Repository, https://example.com/time-to-sail
Author: Sailor Interactive
License: MIT
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3.9
Requires-Dist: python-dateutil>=2.8.2
Requires-Dist: tzdata>=2024.1; platform_system == 'Windows'
Provides-Extra: dev
Requires-Dist: build; extra == 'dev'
Requires-Dist: pytest>=7; extra == 'dev'
Requires-Dist: twine; extra == 'dev'
Provides-Extra: orm
Requires-Dist: sqlalchemy>=2.0; extra == 'orm'
Description-Content-Type: text/markdown

# time-to-sail

UTC-first datetime utilities for Python apps and ORMs.

- Always store **timezone-aware UTC** datetimes.
- Parse strings in many formats (via `python-dateutil`) and coerce to UTC.
- Convert for display using IANA zones (`zoneinfo`).
- SQLAlchemy helpers to **force UTC** on write/read.

## Quickstart

```python
from timetosail import now_utc, to_utc, now_in
from timetosail.sqlalchemy import UTCDateTime, utc_now

dt = now_utc()  # aware UTC
to_utc("2025-09-16 08:30", tzname="America/Lima")
```
## SQLAlchemy

```python
from sqlalchemy.orm import Mapped, mapped_column
from timetosail.sqlalchemy import UTCDateTime, utc_now

fecha_creacion: Mapped[datetime] = mapped_column(
    UTCDateTime(timezone=True), default=utc_now, nullable=False
)
```

## Install Manual

```bash
pip install -e .
```

## Build & Publish

```bash
pip install build twine
python -m build
python -m twine upload dist/*
```
