SDK Python
Klien server untuk backend Python, tanpa apa pun di luar pustaka standar. Setiap panggilan menyebut penggunanya, karena satu proses melayani banyak orang.
Tempat diterbitkan
prodantix-sdk on PyPI. Requires Python 3.9 or newer.
Instal
pip install prodantix-sdkSetiap panggilan menyebut penggunanya
Klien peramban bisa mengingat siapa yang memakainya; server tidak bisa. Karena itu distinct id menjadi argumen pertama untuk capture, identify, group, dan pembacaan kotak masuk. Itulah satu-satunya perbedaan bentuk dari klien peramban dan seluler.
import os
from prodantix import Client
client = Client(
api_key=os.environ["PRODANTIX_PUBLIC_KEY"],
host="https://eu.api.prodantix.com",
)
client.capture("user-123", "order.completed", properties={"total": 42, "currency": "XAF"})
client.identify("user-123", set_props={"plan": "pro"})
client.group("user-123", "company", "acme", properties={"seats": 10})
for message in client.get_inbox("user-123"):
...
client.mark_message_read("user-123", "message-id")Flag jarak jauh dan lokal
Pemeriksaan jarak jauh bertanya ke server dan itulah yang otoritatif. Pemeriksaan lokal mengevaluasi snapshot aturan yang tersimpan di cache di dalam proses, tanpa perjalanan bolak-balik tiap panggilan, dan itulah yang dibutuhkan jalur panas.
# Remote: asks the server, and is the authoritative answer.
if client.is_feature_enabled("user-123", "new-checkout"):
...
# Local: evaluated in process from a cached snapshot, no round trip per call.
if client.is_feature_enabled_local("user-123", "new-checkout", properties={"plan": "pro"}):
...
every_flag = client.get_all_flags("user-123")
# Every per-flag read records one $feature_flag_called exposure.
variant = client.get_variant("user-123", "new-checkout")
if variant and variant["key"] == "treatment":
...
# A flag targeting a cohort reads the user's memberships from the store;
# pass cohorts=[...] to skip the lookup.
if client.is_feature_enabled_local("user-123", "members", cohorts=["<cohort id>"]):
...
# With stream_flags=True the client holds a Socket.IO subscription and refetches
# the snapshot when a flag changes, instead of waiting for the 30s poll.
client = Client(api_key=os.environ["PRODANTIX_PUBLIC_KEY"], host="https://eu.api.prodantix.com", stream_flags=True)Pengiriman dan penutupan
Event masuk ke antrean yang aman untuk banyak thread, lalu pengirim latar belakang mengirimnya per batch, berdasarkan jumlah atau pewaktu, mana yang lebih dulu. Pakai klien sebagai context manager, maka batch terakhir dikirim saat blok berakhir.
with Client(api_key=..., host=...) as client:
client.capture("user-123", "page.viewed")
# the final batch is flushed here
# Without the context manager, flush and stop the background flusher yourself.
client.shutdown()| Argument | Default | Purpose |
|---|---|---|
| api_key | required | Public project key (pdx_pub_…) |
| host | required | Ingest base URL |
| flags_host | host | Base URL for the flags and inbox endpoints |
| flush_at | 20 | Queue size that triggers an immediate flush |
| flush_interval_s | 10.0 | Background flush cadence; 0 or less disables the timer |
| max_queue_size | 1000 | Cap; the oldest events are dropped on overflow |
| max_retries | 3 | Delivery retry attempts |
| request_timeout_s | 10.0 | Per-request timeout |
| default_properties | None | A dict or a callable merged into every event |
| on_error | no-op | Called with any capture or background error |
| stream_flags | False | Hold a Socket.IO subscription to flag changes and refetch the snapshot on push |
| socket_factory | stdlib client | Builds the websocket the flag stream uses; the test seam |