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ümanGerekliAçıklama
api_keyEvetAPI anahtarı (Authorization: Bearer …).
base_urlHayır/v1 dahil API öneki. 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 olarak tanımlıdır.


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 /jobs202 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 429retry_after ayarlanabilir (saniye).
polylingo.JobFailedErrorBaşarısız iş, hatalı tamamlanmış veri veya sorgulama zaman aşımı — job_id.
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 → döngü ile jobs.get terminal duruma kadar.
  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ğerleridir; isterseniz kodunuzda TypedDict tarzı açıklamalar kullanabilirsiniz.


Değişiklikler

0.1.0

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