Python SDK for Piano Analytics data collection
Project description
Piano Analytics Python Client
A Python SDK for sending analytics events to Piano Analytics.
Installation
uv add piano-analytics-client
Or with pip:
pip install piano-analytics-client
Quick Start
Synchronous Usage
from piano_analytics import PianoAnalytics
# Initialize the client
pa = PianoAnalytics(
site_id=123456789,
collect_domain="https://your-domain.pa-cd.com"
)
# Send a page view event
pa.send_event("page.display", {
"page": "homepage",
"page_chapter1": "home"
})
# Send a click event
pa.send_event("click.action", {
"click": "signup_button",
"click_chapter1": "header"
})
# Close the client when done
pa.close()
Using Context Manager (Recommended)
from piano_analytics import PianoAnalytics
with PianoAnalytics(site_id=123456789, collect_domain="https://...") as pa:
pa.send_event("page.display", {"page": "checkout"})
Asynchronous Usage
import asyncio
from piano_analytics import AsyncPianoAnalytics
async def main():
async with AsyncPianoAnalytics(
site_id=123456789,
collect_domain="https://your-domain.pa-cd.com"
) as pa:
# Send events asynchronously
await pa.send_event("page.display", {"page": "product_page"})
# Send multiple events concurrently
await asyncio.gather(
pa.send_event("click.action", {"click": "add_to_cart"}),
pa.send_event("click.action", {"click": "view_details"})
)
asyncio.run(main())
Configuration Options
from piano_analytics import PianoAnalytics
pa = PianoAnalytics(
site_id=123456789, # Required: Your site ID
collect_domain="https://...", # Required: Collection endpoint
visitor_id="custom-uuid", # Optional: Custom visitor ID (auto-generated if not provided)
timeout=30.0, # Optional: Request timeout in seconds (default: 10)
max_retries=5, # Optional: Retry attempts (default: 3)
user_agent="MyApp/1.0" # Optional: Custom User-Agent
)
Using Event Helpers
The SDK provides convenient factory methods for standard events:
from piano_analytics import PianoAnalytics
from piano_analytics.events import Event
with PianoAnalytics(site_id=123, collect_domain="https://...") as pa:
# Using factory methods
events = [
Event.page_display("homepage", page_chapter1="home"),
Event.click_action("signup", click_chapter1="header"),
Event.search_display(ise_keyword="python", ise_page=1),
]
pa.send_events(events)
Batch Sending
Send multiple events in a single request:
pa.send_events([
{"name": "page.display", "data": {"page": "home"}},
{"name": "click.action", "data": {"click": "menu"}},
{"name": "click.navigation", "data": {"click": "products"}}
])
Error Handling
from piano_analytics import PianoAnalytics
from piano_analytics.exceptions import (
ValidationError,
NetworkError,
APIError
)
with PianoAnalytics(site_id=123, collect_domain="https://...") as pa:
try:
pa.send_event("page.display", {"page": "home"})
except ValidationError as e:
print(f"Invalid event data: {e}")
except NetworkError as e:
print(f"Network issue: {e}")
except APIError as e:
print(f"API error: {e.status_code} - {e.message}")
Standard Events
| Event | Description |
|---|---|
page.display |
Track page views |
click.action |
Track user interactions |
click.navigation |
Track navigation clicks |
click.download |
Track file downloads |
click.exit |
Track exit links |
internal_search_result.display |
Track search results |
internal_search_result.click |
Track search result clicks |
Development
# Install dependencies
uv sync --all-extras
# Run tests
uv run pytest
# Run linting
uv run ruff check .
# Run type checking
uv run pyright
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file piano_analytics_client-1.0.0.tar.gz.
File metadata
- Download URL: piano_analytics_client-1.0.0.tar.gz
- Upload date:
- Size: 109.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c82f227143161882dcabc758eb9bf0c9cb59252bec378d777ca7ac2fbbe3d69e
|
|
| MD5 |
36e1f5da2007012e337731abe42ade60
|
|
| BLAKE2b-256 |
4523b65a5820ebca4dc166b3804fe78fcec334616efdc300ddcc70ac5ef44b8f
|
Provenance
The following attestation bundles were made for piano_analytics_client-1.0.0.tar.gz:
Publisher:
publish.yml on MCPAppsBuilders/piano-analytics-client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
piano_analytics_client-1.0.0.tar.gz -
Subject digest:
c82f227143161882dcabc758eb9bf0c9cb59252bec378d777ca7ac2fbbe3d69e - Sigstore transparency entry: 1767810871
- Sigstore integration time:
-
Permalink:
MCPAppsBuilders/piano-analytics-client@3409c187236e6fbebe6a5e5121968a20d2908d2e -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/MCPAppsBuilders
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3409c187236e6fbebe6a5e5121968a20d2908d2e -
Trigger Event:
push
-
Statement type:
File details
Details for the file piano_analytics_client-1.0.0-py3-none-any.whl.
File metadata
- Download URL: piano_analytics_client-1.0.0-py3-none-any.whl
- Upload date:
- Size: 12.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
53c040439cbdccee28dedf2c85d4e13f050c293f6f405d4ba73f26a09a38c28b
|
|
| MD5 |
e919f94a1b3e0f7800d0d08fbed68f27
|
|
| BLAKE2b-256 |
4442907aa29efb00e4083b4ae9f3d6abb8b1ae3eb97ea0e1067884232aedee34
|
Provenance
The following attestation bundles were made for piano_analytics_client-1.0.0-py3-none-any.whl:
Publisher:
publish.yml on MCPAppsBuilders/piano-analytics-client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
piano_analytics_client-1.0.0-py3-none-any.whl -
Subject digest:
53c040439cbdccee28dedf2c85d4e13f050c293f6f405d4ba73f26a09a38c28b - Sigstore transparency entry: 1767811290
- Sigstore integration time:
-
Permalink:
MCPAppsBuilders/piano-analytics-client@3409c187236e6fbebe6a5e5121968a20d2908d2e -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/MCPAppsBuilders
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3409c187236e6fbebe6a5e5121968a20d2908d2e -
Trigger Event:
push
-
Statement type: