Lightweight Python SDK for tgram-analytics. Track events and pageviews from your Python backend.
pip install tgram-analyticsfrom tgram_analytics import TGA
with TGA("proj_xxx", "https://analytics.example.com") as tga:
tga.track("signup", session_id="user-session-123", properties={"plan": "pro"})
tga.pageview(session_id="user-session-123", url="/dashboard")from tgram_analytics import AsyncTGA
async with AsyncTGA("proj_xxx", "https://analytics.example.com") as tga:
tga.track("signup", session_id="user-session-123")
await tga.flush()Buffer events and send them in batches to reduce HTTP requests:
from tgram_analytics import TGA, BatchOptions
tga = TGA("proj_xxx", "https://analytics.example.com", batch=BatchOptions(max_size=20, max_wait=3.0))
# Events are buffered and auto-flushed when max_size is reached or max_wait seconds elapse
tga.track("click", "session-1")
tga.flush() # manual flush
tga.close() # flushes + closes HTTP clientAttach persistent properties to a session. All subsequent track() and pageview() calls for that session will include them:
tga.identify("session-123", {"plan": "pro", "locale": "en-US"})
tga.track("purchase", "session-123", {"amount": 49})
# sent properties: {"plan": "pro", "locale": "en-US", "amount": 49}Per-event properties override identified properties when keys conflict.
Call tga.forget("session-123") to clear stored properties for a session.
Sync client. api_key must start with "proj_".
batch—False(default),True(default thresholds), orBatchOptions(max_size=10, max_wait=5.0)timeout— HTTP request timeout in seconds
Async client with the same constructor signature.
Track a custom event. Fire-and-forget — errors are logged, never raised.
Track a pageview event.
Store properties that are merged into all subsequent events for this session.
Remove stored identify() properties for a session.
Send all buffered events immediately. No-op if batching is disabled.
Flush pending events and close the HTTP client.
Both clients support context managers (with / async with) for automatic cleanup.
Analytics should never break your application. All HTTP and network errors are caught and logged via Python's logging module under the tgram_analytics logger:
import logging
logging.getLogger("tgram_analytics").setLevel(logging.DEBUG)Only the constructor raises exceptions (on invalid api_key or missing server_url).
MIT