Skip to main content

A Python SDK for the Perses API

Project description

perses-api-sdk

A Python SDK for the Perses API.

Requirements

  • Python 3.12+
  • A running Perses instance

Installation

pip install perses-api-sdk

Quick start

from perses_api import APIModel, Project, Dashboard
from perses_api.model import Metadata, ProjectSpec, DashboardSpec
from perses_api.model import Project as ProjectModel, Dashboard as DashboardModel

# Connect with a bearer token
client = APIModel(host="http://localhost:8080", token="<your-token>")

# Or connect with username/password (Basic auth)
client = APIModel(host="http://localhost:8080", username="admin", password="password")

# Create a project
projects = Project(client)
project = projects.create_project(
    ProjectModel(metadata=Metadata(name="my-project"), spec=ProjectSpec())
)

# Create a dashboard inside it
dashboards = Dashboard(client)
dashboard = dashboards.create_dashboard(
    "my-project",
    DashboardModel(
        metadata=Metadata(name="my-dashboard", project="my-project"),
        spec=DashboardSpec(),
    ),
)

Authentication

Pass a bearer token via token=, or supply username= and password= for HTTP Basic auth. When both are provided, the token takes precedence.

# Bearer token
client = APIModel(host="http://localhost:8080", token="eyJ...")

# Basic auth
client = APIModel(host="http://localhost:8080", username="admin", password="secret")

Available clients

Class Scope Description
Project global Projects
Dashboard project Dashboards
EphemeralDashboard project Ephemeral dashboards
ProjectDatasource project Datasources
GlobalDatasource global Global datasources
ProjectVariable project Variables
GlobalVariable global Global variables
ProjectRole project Roles
GlobalRole global Global roles
ProjectRoleBinding project Role bindings
GlobalRoleBinding global Global role bindings
ProjectSecret project Secrets
GlobalSecret global Global secrets
User global Users
Plugin global Plugin listing
Migrate global Grafana → Perses migration
Validate global Dashboard validation

Configuration options

client = APIModel(
    host="http://localhost:8080",
    token="<token>",
    timeout=30.0,           # request timeout in seconds (default: 10)
    http2_support=False,    # enable HTTP/2 (requires httpx[http2])
    num_pools=10,           # max concurrent connections
    retries=False,          # retry failed requests
    follow_redirects=True,  # follow HTTP redirects
)

Examples

Datasource

from perses_api import APIModel, ProjectDatasource
from perses_api.model import Metadata, DatasourceSpec, Datasource as DatasourceModel

client = APIModel(host="http://localhost:8080", token="<token>")
ds = ProjectDatasource(client, "my-project")

created = ds.create_datasource(
    DatasourceModel(
        metadata=Metadata(name="prometheus", project="my-project"),
        spec=DatasourceSpec(
            default=True,
            plugin={
                "kind": "PrometheusDatasource",
                "spec": {"directUrl": "http://prometheus:9090"},
            },
        ),
    )
)

Migrate a Grafana dashboard

from perses_api import APIModel, Migrate

client = APIModel(host="http://localhost:8080", token="<token>")
m = Migrate(client)

perses_dashboard = m.migrate(grafana_dashboard={"title": "My Dashboard", "panels": []})

Validate a dashboard

from perses_api import APIModel, Validate

client = APIModel(host="http://localhost:8080", token="<token>")
v = Validate(client)

v.validate(dashboard={"kind": "Dashboard", "metadata": {}, "spec": {}})

Development

Setup

# Install with test dependencies
uv sync --extra test

# Install with docs dependencies
uv sync --extra docs

Running integration tests

Requires Docker.

make integration

Or against an existing Perses instance:

PERSES_HOST=http://localhost:8080 \
PERSES_USERNAME=admin \
PERSES_PASSWORD=password \
uv run pytest tests/integration/ -v

License

Apache 2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

perses_api_sdk-0.1.1.tar.gz (18.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

perses_api_sdk-0.1.1-py3-none-any.whl (26.0 kB view details)

Uploaded Python 3

File details

Details for the file perses_api_sdk-0.1.1.tar.gz.

File metadata

  • Download URL: perses_api_sdk-0.1.1.tar.gz
  • Upload date:
  • Size: 18.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for perses_api_sdk-0.1.1.tar.gz
Algorithm Hash digest
SHA256 0cf369e57a97063596b130529be3badc822beae217243881f771f78a62bdcaf2
MD5 cf302b350767228b9b4cc0ea6893b5e5
BLAKE2b-256 616cb48d6a484fa5c9233397bc1da3433c7a4c5c252e83ab07601e2733cc6b8f

See more details on using hashes here.

Provenance

The following attestation bundles were made for perses_api_sdk-0.1.1.tar.gz:

Publisher: release.yml on ZPascal/perses_api_sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file perses_api_sdk-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: perses_api_sdk-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 26.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for perses_api_sdk-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e8232d0b1407098cabcd95d1a0febc9ac59a202a507bdd18c85b4ac8e4f24f4a
MD5 e7df56e6b79c8505a30106109a969fcc
BLAKE2b-256 7bf0d9c24ca5837509ba252eefd38951f7884517a4fc545d654e931a3e48119d

See more details on using hashes here.

Provenance

The following attestation bundles were made for perses_api_sdk-0.1.1-py3-none-any.whl:

Publisher: release.yml on ZPascal/perses_api_sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page