Python SDK (polylingo)

PolyLingo REST API için resmi Python istemcisi. httpx kullanır ve aynı yöntem adlarıyla hem senkron hem de asenkron istemciler sağlar.

Ham HTTP detayları için API referansına bakınız.


Kurulum

pip install polylingo

Python: >= 3.9


Senkron istemci

import os
import polylingo

client = polylingo.PolyLingo(
    api_key=os.environ["POLYLINGO_API_KEY"],
    base_url="https://api.usepolylingo.com/v1",  # isteğe bağlı; varsayılan gösterildi
    timeout=120.0,  # isteğe bağlı; istek başına saniye (varsayılan 120)
)

result = client.translate(content="# Hello", targets=["es", "fr"], format="markdown")
print(result["translations"]["es"])

client.close()

Bağlam yöneticisi:

with polylingo.PolyLingo(api_key="...") as client:
    print(client.languages())
ArgümanZorunluAçıklama
api_keyEvetAPI anahtarı (Authorization: Bearer …).
base_urlHayır/v1 dahil API ön eki. Varsayılan https://api.usepolylingo.com/v1.
timeoutHayırhttpx zaman aşımı saniye cinsinden. Varsayılan 120.0.

Asenkron istemci

import polylingo

async with polylingo.AsyncPolyLingo(api_key="...") as client:
    r = await client.translate(content="Hi", targets=["de"])

async with kullanmıyorsanız await client.aclose() kullanın.

Yöntem adları senkron istemciyle aynıdır; tüm ağ yöntemleri async def'dir.


Yöntemler (senkron ve asenkron)

health() / await health()

GET /health

h = client.health()
# async: h = await client.health()

languages() / await languages()

GET /languages

data = client.languages()
langs = data["languages"]

translate(...)

POST /translate

r = client.translate(
    content="# Hello",
    targets=["es", "fr"],
    format="markdown",  # isteğe bağlı
    source="en",        # isteğe bağlı
    model="standard",   # isteğe bağlı: "standard" | "advanced"
)
r["translations"]["es"]
r["usage"]["total_tokens"]

batch(...)

POST /translate/batch

b = client.batch(
    items=[
        {"id": "a", "content": "Hello"},
        {"id": "b", "content": "## Title", "format": "markdown"},
    ],
    targets=["de"],
)
b["results"][0]["translations"]["de"]

usage() / await usage()

GET /usage

u = client.usage()

İşler (client.jobs)

create / await create

POST /jobs. 202 gövdesini döner (job_id, status, …).

job = client.jobs.create(content=long_md, targets=["de", "fr"], format="markdown")
# kwargs da kabul edilir: client.jobs.create(**{"content": ..., "targets": [...]})

get(job_id) / await get(job_id)

GET /jobs/:id. status == "completed" olduğunda, yanıtlar üst düzeyde translations ve usage içerir.

translate(...) (kolaylık)

completed veya failed olana kadar veya süre dolana kadar sorgular.

done = client.jobs.translate(
    content=long_md,
    targets=["de", "fr", "es"],
    format="markdown",
    poll_interval=10.0,   # sorgular arası saniye; varsayılan 5.0
    timeout=600.0,        # **toplam** saniye bütçesi; varsayılan 1200 (20 dk)
    on_progress=lambda pos: print(f"Queue: {pos}"),
)
done["translations"]["de"]

Asenkron:

done = await client.jobs.translate(
    content=long_md,
    targets=["de"],
    poll_interval=2.0,
    timeout=300.0,
)

API durumları: pending, processing, completed, failed.


İstisnalar

SınıfNe Zaman
polylingo.PolyLingoErrorTemel. status, error, args[0] mesajı.
polylingo.AuthErrorHTTP 401.
polylingo.RateLimitErrorHTTP 429. retry_after (saniye) ayarlanabilir.
polylingo.JobFailedErrorBaşarısız iş, hatalı tamamlanmış veri veya sorgu zaman aşımı. job_id içerir.
import polylingo

try:
    client.translate(content="x", targets=["es"])
except polylingo.AuthError as e:
    print(e.status, e.error)
except polylingo.RateLimitError as e:
    print(e.retry_after)
except polylingo.JobFailedError as e:
    print(e.job_id)
except polylingo.PolyLingoError as e:
    print(e.status, e.error)

Asenkron işler deseni (özet)

  1. Manuel: jobs.create → terminal duruma kadar jobs.get döngüsü.
  2. Yardımcı: jobs.translate ile poll_interval, timeout ve isteğe bağlı on_progress.

Çok büyük içerikler için, senkron translate istemci veya sunucu zaman aşımına uğrayabileceğinden işler tercih edilir.


Türler

Paket py.typed ile gelir. Yanıt nesneleri API ile uyumlu sade dict değerlerdir; isterseniz kodunuzda TypedDict tarzı açıklamalar kullanabilirsiniz.


Değişiklikler

0.1.2

  • Bakım: varsayılan API temel URL'si https://api.usepolylingo.com/v1 olarak ayarlandı.

0.1.0

  • İlk sürüm: senkron PolyLingo, asenkron AsyncPolyLingo, tam uç nokta kapsamı ve jobs.translate sorgu yardımcısı dahil.
Python SDK | PolyLingo dokümanları | PolyLingo