Skip to main content

Python SDK for the Pragmatiks platform

Project description

Pragma-OS

Pragma SDK

Ask DeepWiki PyPI version Python 3.13+ License: MIT Code style: ruff

Documentation | CLI | Providers

Build providers and interact with the pragma-os platform programmatically.

Quick Start

from pragma_sdk import PragmaClient, Resource

with PragmaClient() as client:
    # Apply a resource
    client.apply_resource(
        Resource(
            provider="gcp",
            resource="storage",
            name="my-bucket",
            config={"location": "US", "storage_class": "STANDARD"}
        )
    )

    # Get resource status
    bucket = client.get_resource("gcp", "storage", "my-bucket")
    print(bucket.outputs)

Installation

pip install pragmatiks-sdk

Or with uv:

uv add pragmatiks-sdk

Features

  • HTTP Clients - Sync and async clients for the pragma-os API
  • Provider Authoring - Build custom providers with type-safe Config and Outputs
  • Field References - Reference outputs from other resources dynamically
  • Testing Harness - Test provider lifecycle methods locally without deployment
  • Auto-discovery - Automatic credential resolution from environment or config files

Building Providers

Define resources with typed configuration and lifecycle methods:

from pragma_sdk import Provider, Resource, Config, Outputs, Field

gcp = Provider(name="gcp")

class BucketConfig(Config):
    location: Field[str]
    storage_class: Field[str] = "STANDARD"

class BucketOutputs(Outputs):
    url: str
    created_at: str

@gcp.resource("storage")
class Bucket(Resource[BucketConfig, BucketOutputs]):
    async def on_create(self) -> BucketOutputs:
        # Provision the bucket
        return BucketOutputs(url=f"gs://{self.name}", created_at="...")

    async def on_update(self, previous_config: BucketConfig) -> BucketOutputs:
        # Handle config changes
        return self.outputs

    async def on_delete(self) -> None:
        # Clean up
        pass

Field References

Reference outputs from other resources:

from pragma_sdk import FieldReference

config = AppConfig(
    database_url=FieldReference(
        provider="postgres",
        resource="database",
        name="my-db",
        field="outputs.connection_url"
    )
)

Testing Providers

Test lifecycle methods locally with ProviderHarness:

from pragma_sdk.provider import ProviderHarness

async def test_bucket_creation():
    harness = ProviderHarness()

    result = await harness.invoke_create(
        Bucket,
        name="test-bucket",
        config=BucketConfig(location="US")
    )

    assert result.success
    assert "gs://test-bucket" in result.outputs.url

Authentication

Credentials are discovered automatically:

  1. Explicit auth_token parameter
  2. Environment variable: PRAGMA_AUTH_TOKEN
  3. Credentials file: ~/.config/pragma/credentials
# Auto-discover credentials
client = PragmaClient()

# Explicit token
client = PragmaClient(auth_token="sk_...")

# Require authentication (fail if no token)
client = PragmaClient(require_auth=True)

API Reference

HTTP Client Methods

Method Description
list_resources(provider, resource, tags) List resources with optional filters
get_resource(provider, resource, name) Get a specific resource
apply_resource(resource) Create or update a resource
delete_resource(provider, resource, name) Delete a resource
is_healthy() Check API health

Provider Classes

Class Description
Provider(name) Provider namespace with @provider.resource() decorator
Resource[ConfigT, OutputsT] Base class with on_create, on_update, on_delete
Config Base class for resource configuration (Pydantic model)
Outputs Base class for resource outputs (Pydantic model)
Field[T] Type alias for `T
ProviderHarness Local testing harness

Development

# Run tests
task sdk:test

# Format code
task sdk:format

# Type check and lint
task sdk:check

License

MIT

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

pragmatiks_sdk-0.9.0.tar.gz (16.1 kB view details)

Uploaded Source

Built Distribution

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

pragmatiks_sdk-0.9.0-py3-none-any.whl (20.8 kB view details)

Uploaded Python 3

File details

Details for the file pragmatiks_sdk-0.9.0.tar.gz.

File metadata

  • Download URL: pragmatiks_sdk-0.9.0.tar.gz
  • Upload date:
  • Size: 16.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pragmatiks_sdk-0.9.0.tar.gz
Algorithm Hash digest
SHA256 0623e93099c3700f92afdd4267a2eefa90a629a97c37a0de2c12a0c9e296fa56
MD5 4df54774142c8fa4c33a93ad2b0e8504
BLAKE2b-256 2bb1af9a04864943c9f68e14c770710308dcc441940a7a6f5d39ce265248901a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pragmatiks_sdk-0.9.0.tar.gz:

Publisher: publish.yaml on pragmatiks/pragma-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 pragmatiks_sdk-0.9.0-py3-none-any.whl.

File metadata

  • Download URL: pragmatiks_sdk-0.9.0-py3-none-any.whl
  • Upload date:
  • Size: 20.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pragmatiks_sdk-0.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 685fff2c971ec4a8005b975be18f09fa53946c99a755b17ab5d7ebc460fbe0be
MD5 e68b1af026aa7d5bdc936d4362050e84
BLAKE2b-256 aba6e8c7fb02296269be00b8f41d4b10e92e0a402374c4b03ae3336542c95a56

See more details on using hashes here.

Provenance

The following attestation bundles were made for pragmatiks_sdk-0.9.0-py3-none-any.whl:

Publisher: publish.yaml on pragmatiks/pragma-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