Metadata-Version: 2.4
Name: toopdf
Version: 0.3.2
Summary: PDF tools CLI — translate, convert, merge, split, OCR, compress and more
Project-URL: Homepage, https://github.com/toopdf/toopdf
Project-URL: Repository, https://github.com/toopdf/toopdf
Project-URL: Issues, https://github.com/toopdf/toopdf/issues
Author: Toopdf Contributors
License: MIT
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
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 :: Utilities
Requires-Python: >=3.10
Requires-Dist: cryptography>=41.0
Requires-Dist: httpx>=0.27
Requires-Dist: loguru>=0.7
Requires-Dist: pydantic>=2.0
Requires-Dist: python-dotenv>=1.0
Requires-Dist: rich>=13.7
Requires-Dist: typer>=0.12
Provides-Extra: bot
Requires-Dist: python-telegram-bot>=20.0; extra == 'bot'
Provides-Extra: dev
Requires-Dist: mypy>=1.8; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
Requires-Dist: pytest-mock>=3; extra == 'dev'
Requires-Dist: pytest>=8; extra == 'dev'
Requires-Dist: ruff>=0.4; extra == 'dev'
Description-Content-Type: text/markdown

# Toopdf

Brauzersiz PDF bilan ishlash vositasi. Terminal va Telegram orqali PDF tarjima, konvertatsiya va boshqa amallar.

> 💡 **Barcha vositalar bepul!** Hech qanday to'lov yoki obuna talab qilinmaydi. PDF bilan bog'liq barcha amallarni tekin bajaring.

## 🌐 Web interfeys (Streamlit)

Brauzer orqali ishlash uchun:

**[Streamlit Community Cloud](https://toopdf.streamlit.app)** (kelajakda)

Yoki local ishga tushirish:
```bash
pip install streamlit toopdf
streamlit run app.py
```

Web interfeysda:
1. PDF fayl yuklang
2. Vositani tanlang
3. "Ishga tushirish" tugmasini bosing
4. Natijani yuklab oling

## Imkoniyatlar

- **30+ PDF vosita** — tarjima, konvertatsiya, merge, split, OCR, watermark, encrypt/unlock
- **Batch ishlov** — bir necha faylni birdaniga qayta ishlash
- **Telegram bot** — mobil orqali PDF ishlash
- **Chiroyli CLI** — progress bar, rangli output, avtoto'ldirish
- **Stealth** — brauzerdek soxta headerlar, delay, cookie saqlash
- **Xavfsiz** — input validatsiya, rate limiting, shifrlangan cookie'lar

## O'rnatish

```bash
# CLI uchun
pip install toopdf

# Telegram bot bilan
pip install toopdf[bot]
```

## Ishlatish

### 1. 📋 CLI orqali

```bash
# Vositalar ro'yxati
toopdf list

# PDF tarjima (en → uz)
toopdf translate test.pdf --from en --to uz

# PDF konvertatsiya
toopdf convert pdf-to-word test.pdf
toopdf convert pdf-to-jpg test.pdf

# PDF yuklash (qayta ishlashsiz)
toopdf upload test.pdf

# Batch ishlov (bir necha faylni birdan)
toopdf batch *.pdf --tool pdf-to-word

# Konfiguratsiya
toopdf config

# Yordam
toopdf --help
toopdf translate --help
```

### 2. 🤖 Telegram Bot orqali

```bash
# Botni ishga tushirish
export TOOPDF_BOT_TOKEN="your:bot_token"
toopdf-bot
```

**Bot qanday ishlaydi:**
1. Botga `/start` yuboring
2. PDF fayl yuboring
3. Kategoriya va vositani tanlang (inline tugmalar)
4. Natijani oling

**Bot buyruqlari:**
- `/start` — ishga tushirish
- `/list` — vositalar ro'yxati
- `/help` — yordam
- `/cancel` — bekor qilish

**Bot sozlamalari:**
```env
TOOPDF_BOT_TOKEN=123456:ABCdef     # @BotFather dan oling
TOOPDF_BOT_ALLOWED_USERS=123,456   # Kim foydalanishi mumkin (bo'sh = hamma)
```

### 3. 🐍 Python API orqali

```python
# Sync usul (oddiy skriptlar uchun)
from toopdf import Toopdf

with Toopdf() as api:
    # Vositlarni ro'yxat qilish
    tools = api.list_tools()
    print(tools)

    # Tarjima qilish
    result = api.translate("document.pdf", from_lang="en", to_lang="uz")
    print(f"Natija: {result}")

    # Konvertatsiya qilish
    result = api.convert("pdf-to-word", "document.pdf")
    print(f"Natija: {result}")
```

```python
# Async usul (yuqori samaradorlik)
from toopdf import ToopdfClient
import asyncio

async def main():
    async with ToopdfClient(api_key="your-key") as api:
        tools = await api.list_tools()
        print(f"{len(tools)} ta vosita topildi")

        # Yuklash va konvertatsiya
        upload = await api.upload("document.pdf")
        result = await api.convert(upload.file_id, "pdf-to-word")
        await api.download(result.download_url, "result.docx")

asyncio.run(main())
```

## Xavfsizlik

| Xususiyat | Tavsif |
|-----------|--------|
| Input validatsiya | Fayl yo'li, til kodi, vosita nomi tekshiriladi |
| File size limit | Katta fayllar rad etiladi (sozlash mumkin) |
| Path traversal | `../` bloklanadi |
| Rate limiting | So'rovlar soni cheklangan (sozlash mumkin) |
| Encrypted cookies | Shifrlangan cookie saqlash |
| Logging | Barcha hodisalar yoziladi |

## Konfiguratsiya

`.env` fayl orqali yoki environment variable'lar bilan:

```env
TOOPDF_MAX_FILE_SIZE_MB=50
TOOPDF_RATE_LIMIT_PER_MINUTE=10
TOOPDF_LOG_LEVEL=INFO
TOOPDF_BOT_TOKEN=your:bot_token
TOOPDF_BOT_ALLOWED_USERS=123456789
```

## Loyiha tuzilmasi

```
toopdf/
├── src/
│   └── toopdf/
│       ├── __init__.py      # Paket init
│       ├── bot.py            # Telegram bot
│       ├── cli.py            # CLI interfeys (typer)
│       ├── client.py         # Asosiy kutubxona (httpx)
│       ├── config.py         # Konfiguratsiya (pydantic)
│       └── exceptions.py     # Xatolik klasslari
├── tests/
│   ├── conftest.py           # Pytest fixture'lar
│   ├── test_client.py        # Client testlari
│   └── test_cli.py           # CLI testlari
├── pyproject.toml
└── README.md
```

## Testlar

```bash
pip install -e ".[dev]"
pytest
```

## Litsenziya

MIT
