Metadata-Version: 2.4
Name: transferred
Version: 0.1.2
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Rust
Classifier: Topic :: Database
Classifier: Topic :: Software Development :: Libraries
Requires-Dist: pyarrow>=24 ; extra == 'arrow'
Requires-Dist: transferred[arrow] ; extra == 'iterable'
Provides-Extra: arrow
Provides-Extra: iterable
Summary: The most convenient data transfer tool.
Keywords: data-transfer,etl,arrow,parquet
Author: Vania Livadnyi
License-Expression: MIT
Requires-Python: >=3.14
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
Project-URL: Repository, https://github.com/skatromb/transferred

# transferred

<img src="https://raw.githubusercontent.com/skatromb/transferred/main/logo.png" alt="transferred" width="240">


The most convenient batch data transfer tool.

`transferred` moves table data between systems. Blazing fast, no transformations supported — hand them over to your Data Warehouse.

## Install

```bash
pip install transferred
```

Requires Python 3.14.

## Usage

```python
from pathlib import Path

from transferred import FilesDestination, Parquet, PostgresSource, Transfer

source = PostgresSource(
    "postgres://user:pass@localhost:5432/db",
    table="public.orders",
)
destination = FilesDestination(
    Path("orders/"),
    format=Parquet(compression="zstd"),
)

report = Transfer(source, destination).run()

print(report)
# RunReport:
#   rows: 10,000,000
#   written: 64.98 MiB
#   duration: 3s 379ms
#   written objects:
#     orders/part-00001.parquet
```

That output is a real run: 10M rows of five columns out of a local Postgres, in one
process, peaking at 137 MiB resident — interpreter included. `docs/DLT_COMPARISON.md`
measures the same legs against duckdb and dlt on a wider table.

More in [examples/](./examples).

## Supported

Sources:
- Parquet file — `FilesSource`
- Postgres table — `PostgresSource`
- DataFrames — polars or pandas `DataFrame`, a duckdb result, a `pa.Table`, pyarrow's `RecordBatch` or `RecordBatchReader`
- Python iterables of `dict` / `@dataclass` / `pydantic.BaseModel` (requires `pip install transferred[iterable]`)

Destinations:
- Parquet file — `FilesDestination` (zstd / snappy / uncompressed)
- Postgres table — `PostgresDestination` (full replace, swapped in one transaction)

BigQuery, S3/GCS and incremental loads land later. See [PLAN.md](./PLAN.md).

## Promises

- ✅ Make data transfers as simple as it could be
- 🚧 Enforce best practices by default
- 🚧 Blazing fast
- ✅ No OOMs!

## License

MIT. See [LICENSE](./LICENSE).

