Skip to main content

Customer-facing Python SDK and `usvc` CLI for UnitySVC

Project description

unitysvc-py

Python SDK and CLI for the UnitySVC customer API (https://api.unitysvc.com/v1). This package provides:

  1. unitysvc — a typed Python package (sync Client + async AsyncClient) that wraps the upstream REST API into importable, type-checked method calls.
  2. usvc — a CLI built on top of the SDK for day-to-day customer operations (secrets, aliases, recurrent requests) without writing code.
Guide Reference
Upstream API Swagger UI · ReDoc
Python SDK SDK Guide SDK Reference (auto-generated from docstrings)
CLI CLI Reference (auto-generated from typer)

Install

pip install unitysvc-py

Programmatic usage

from unitysvc import Client

client = Client(api_key="svcpass_...")  # or Client.from_env()

# List and set secrets
secrets = client.secrets.list()
for s in secrets.data:
    print(s.name, s.id)

client.secrets.create({"name": "openai-key", "value": "sk-..."})

Configuration

The SDK is configured via a small set of environment variables. Only UNITYSVC_API_KEY is required; everything else has a sensible default.

Variable Purpose Default
UNITYSVC_API_KEY Customer API key (svcpass_...) (required)
UNITYSVC_API_URL Control-plane API base URL https://api.unitysvc.com/v1
UNITYSVC_API_BASE_URL HTTP API gateway base URL (inference) (unset)
UNITYSVC_S3_BASE_URL S3-compatible gateway base URL (unset)
UNITYSVC_SMTP_BASE_URL SMTP gateway base URL (unset)

The customer context is encoded entirely in the API key, so no separate customer_id argument is required.

UNITYSVC_API_URL is what the SDK itself uses for control-plane calls. The *_BASE_URL variables are exposed on Client as client.api_base_url, client.s3_base_url, client.smtp_base_url for downstream inference/storage/email SDKs to pick up — the SDK itself doesn't talk to them directly.

Async client

import asyncio
from unitysvc import AsyncClient

async def main():
    async with AsyncClient(api_key="svcpass_...") as client:
        secrets = await client.secrets.list()
        for s in secrets.data:
            print(s.name)

asyncio.run(main())

Errors

All errors are subclasses of unitysvc.UnitysvcSDKError:

from unitysvc import (
    UnitysvcSDKError,
    AuthenticationError,   # 401
    PermissionError,       # 403
    NotFoundError,         # 404
    ValidationError,       # 400, 422
    ConflictError,         # 409
    RateLimitError,        # 429
    ServerError,           # 5xx
    APIError,              # base for everything above
)

CLI: usvc

The CLI follows the SDK's configuration — set UNITYSVC_API_KEY (and optionally UNITYSVC_API_URL) and you can run:

usvc env                              # show which env vars the SDK will pick up

# Secrets
usvc secrets list                     # list secrets
usvc secrets set NAME --value V       # create or update a secret by name
usvc secrets delete NAME              # delete a secret by name

# Service aliases
usvc aliases list
usvc aliases show ALIAS_ID
usvc aliases delete ALIAS_ID

# Recurrent requests
usvc recurrent-requests list
usvc recurrent-requests show REQUEST_ID
usvc recurrent-requests trigger REQUEST_ID
usvc recurrent-requests delete REQUEST_ID

Every command accepts --api-key and --base-url overrides.

Layout

src/unitysvc/
├── client.py          # Client (sync) facade
├── aclient.py         # AsyncClient (async) facade
├── exceptions.py      # UnitysvcSDKError + status-code subclasses
├── _http.py           # internal: unwrap generated Response → typed model or APIError
├── resources/
│   ├── secrets.py             # client.secrets.*
│   ├── aliases.py             # client.aliases.*
│   ├── recurrent_requests.py  # client.recurrent_requests.*
│   ├── asecrets.py            # async mirror
│   ├── aaliases.py            # async mirror
│   └── arecurrent_requests.py # async mirror
├── _generated/        # openapi-python-client output (do not edit by hand)
├── commands/          # Typer command groups for the CLI
│   ├── _helpers.py    #   run_async, async_client, model_list, ...
│   └── secrets.py     #   `usvc secrets {list,set,delete}`
└── cli.py             # `usvc` Typer entry point

Regenerating the API client

The low-level client under src/unitysvc/_generated/ is produced by openapi-python-client from a copy of the backend OpenAPI spec at openapi.json. To regenerate after a backend change:

# Requires a sibling checkout of unitysvc/unitysvc
./scripts/generate_client.sh

The script reads ../unitysvc/backend/generated/customer_api.json by default; pass an explicit spec path as the first argument to override.

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

unitysvc_py-0.1.11.tar.gz (133.8 kB view details)

Uploaded Source

Built Distribution

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

unitysvc_py-0.1.11-py3-none-any.whl (285.7 kB view details)

Uploaded Python 3

File details

Details for the file unitysvc_py-0.1.11.tar.gz.

File metadata

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

File hashes

Hashes for unitysvc_py-0.1.11.tar.gz
Algorithm Hash digest
SHA256 e162ac7164b960b06cc884a4570aac351868d583104b9df257e1d0e4f933a013
MD5 75f6d50094d64c9c1644a92a34fa51d0
BLAKE2b-256 a840799bad1d443ce3520b709bbe6d64b99eae81ac90f512f5aaa2db03b89796

See more details on using hashes here.

Provenance

The following attestation bundles were made for unitysvc_py-0.1.11.tar.gz:

Publisher: publish.yml on unitysvc/unitysvc-py

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

File details

Details for the file unitysvc_py-0.1.11-py3-none-any.whl.

File metadata

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

File hashes

Hashes for unitysvc_py-0.1.11-py3-none-any.whl
Algorithm Hash digest
SHA256 745214be4b2dec359443da0525dec456a72dcaba4c2fee435eba35ae25e7e6f9
MD5 b1504f507e0d08638b6b8e6879474795
BLAKE2b-256 bf4743ded758972375ff7e44e8818a71197afd243c1547373313dec87e3032c7

See more details on using hashes here.

Provenance

The following attestation bundles were made for unitysvc_py-0.1.11-py3-none-any.whl:

Publisher: publish.yml on unitysvc/unitysvc-py

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