Metadata-Version: 2.4
Name: etransfer
Version: 0.1.8
Summary: A TUS-based file transfer tool with chunked upload/download support
Author: ETransfer Team
License-Expression: Apache-2.0
Project-URL: Homepage, https://github.com/ZGCA-Forge/ETransfer
Project-URL: Documentation, https://github.com/ZGCA-Forge/ETransfer#readme
Project-URL: Repository, https://github.com/ZGCA-Forge/ETransfer
Project-URL: Issues, https://github.com/ZGCA-Forge/ETransfer/issues
Keywords: tus,file-transfer,upload,download,chunked
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: tuspy>=1.0.0
Requires-Dist: httpx>=0.25.0
Requires-Dist: typer>=0.12.0
Requires-Dist: rich>=13.0.0
Requires-Dist: pydantic>=2.0.0
Requires-Dist: pyyaml>=6.0
Provides-Extra: server
Requires-Dist: fastapi>=0.104.0; extra == "server"
Requires-Dist: uvicorn[standard]>=0.24.0; extra == "server"
Requires-Dist: aiofiles>=23.0.0; extra == "server"
Requires-Dist: psutil>=5.9.0; extra == "server"
Requires-Dist: pydantic-settings>=2.0.0; extra == "server"
Requires-Dist: sqlmodel>=0.0.16; extra == "server"
Requires-Dist: aiosqlite>=0.20.0; extra == "server"
Provides-Extra: redis
Requires-Dist: redis>=5.0.0; extra == "redis"
Provides-Extra: mysql
Requires-Dist: aiomysql>=0.2.0; extra == "mysql"
Provides-Extra: dev
Requires-Dist: etransfer[server]; extra == "dev"
Requires-Dist: pytest>=7.0.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
Requires-Dist: black>=23.0.0; extra == "dev"
Requires-Dist: isort>=5.13.0; extra == "dev"
Requires-Dist: flake8>=7.0.0; extra == "dev"
Requires-Dist: Flake8-pyproject>=1.2.0; extra == "dev"
Requires-Dist: mypy>=1.8.0; extra == "dev"
Requires-Dist: bandit[toml]>=1.7.0; extra == "dev"
Requires-Dist: pre-commit>=3.5.0; extra == "dev"
Requires-Dist: build>=1.0.0; extra == "dev"
Requires-Dist: twine>=4.0.0; extra == "dev"
Requires-Dist: bump-my-version>=0.28.0; extra == "dev"
Provides-Extra: all
Requires-Dist: etransfer[dev,mysql,redis,server]; extra == "all"
Dynamic: license-file

# ETransfer

面向大文件场景的高性能传输工具，基于 [TUS 协议](https://tus.io)。支持断点续传、切片上传下载、流式中继（上传未完成即可下载）、阅后即焚，适用于 AI 训练数据集、模型权重等大文件的可靠分发。

## 特性

- 基于 TUS 协议的断点续传，网络中断自动恢复
- 切片上传/下载，支持部分下载（流式中继）
- 阅后即焚 / TTL 过期 / 永久保存三种文件策略
- 存储配额管理，超限自动等待并恢复
- 多 IP 负载均衡，自动选择最优节点
- OIDC 用户系统，基于角色/群组的配额控制
- CLI + GUI + Python API

## 安装

```bash
pip install etransfer
```

## 快速开始

```bash
# 配置服务器地址
etransfer setup your-server

# 登录（如果服务器启用了 OIDC）
etransfer login

# 上传
etransfer upload ./model-weights.bin

# 阅后即焚上传
etransfer upload ./dataset.tar.gz --retention download_once

# 下载
etransfer download <file_id> -o ./output/

# 文件列表
etransfer list

# 服务器信息
etransfer info
```

## 进阶使用（Python API）

```python
from etransfer.client.tus_client import EasyTransferClient
from etransfer.client.downloader import ChunkDownloader

# 上传
with EasyTransferClient("http://your-server:8765", token="your-token") as client:
    uploader = client.create_uploader("./large-model.bin", retention="download_once")
    uploader.upload(wait_on_quota=True)
    file_id = uploader.url.split("/")[-1]

# 下载
downloader = ChunkDownloader("http://your-server:8765", token="your-token")
downloader.download_file(file_id, "./output/large-model.bin")
```

## 文档

| 文档                             | 说明                          |
| -------------------------------- | ----------------------------- |
| [私有化部署](docs/deployment.md) | 服务端安装、配置、Docker 部署 |
| [通信设计](docs/api-design.md)   | API 端点与协议说明            |

## License

[Apache-2.0](LICENSE)
