Skip to main content

Devopness SDK - Python

PyPI version

The official Devopness SDK for Python.

This SDK provides predefined classes to access Devopness platform resources. It's suitable for building CLI tools, backend services, or automation scripts, helping you interact with the Devopness API.

📌 Table of Contents

Usage

The SDK supports both asynchronous and synchronous usage, so you can choose based on your needs.

Install

Install the SDK using your preferred package manager:

# Using uv
uv add devopness

# Using poetry
poetry add devopness

# Using pip
pip install devopness

Initializing

Import the SDK and create an instance of DevopnessClient or DevopnessClientAsync:

from devopness import DevopnessClient, DevopnessClientAsync

devopness = DevopnessClient()
devopness_async = DevopnessClientAsync()

Custom Configuration

You can provide a custom configuration when initializing the client:

from devopness import DevopnessClient, DevopnessClientAsync, DevopnessClientConfig

config = DevopnessClientConfig(base_url="https://api.devopness.com", timeout=10)

devopness = DevopnessClient(config)
devopness_async = DevopnessClientAsync(config)

Configuration options:

Parameter Default Description
base_url https://api.devopness.com Base URL for all API requests
timeout 30 Timeout for HTTP requests (in seconds)
default_encoding utf-8 Encoding for response content
debug False Prints HTTP debug output and validation warnings
strict_validation_mode True Raises Pydantic validation errors for API responses

Response validation mode

The SDK validates API responses against generated Pydantic models by default. This strict behavior helps surface mismatches between the API response and the documented contract. Consumers that must keep running when a response does not match the model can opt out by setting strict_validation_mode=False:

from devopness import DevopnessClient, DevopnessClientConfig

config = DevopnessClientConfig(
    strict_validation_mode=False,
    debug=True,
)
devopness = DevopnessClient(config)

When strict validation is disabled, response payloads that fail Pydantic validation are returned as opaque data that still supports field access, such as response.data.id or response.data["id"]. If debug=True, the SDK emits a warning with details about the validation error; otherwise, it continues quietly.

Authentication

Authentication with Personal Access Token

Ensure you have a Personal Access Token from Devopness. If you don't have one, see Add a Personal Access Token.

Asynchronous usage
import asyncio
from devopness import DevopnessClientAsync, DevopnessClientConfig

# Option 1: Pass token during initialization
config = DevopnessClientConfig(api_token="your-personal-access-token-here")
devopness = DevopnessClientAsync(config)

# Option 2: Set token after initialization
devopness = DevopnessClientAsync()
devopness.api_token = "your-personal-access-token-here"


async def main():
    try:
        current_user = await devopness.users.get_user_me()
        print(f"User ID: {current_user.data.id}")
    finally:
        await devopness.aclose()


if __name__ == "__main__":
    asyncio.run(main())
Synchronous usage
from devopness import DevopnessClient, DevopnessClientConfig

# Option 1: Pass token during initialization
config = DevopnessClientConfig(api_token="your-personal-access-token-here")
devopness = DevopnessClient(config)

# Option 2: Set token after initialization
devopness = DevopnessClient()
devopness.api_token = "your-personal-access-token-here"


def main():
    try:
        current_user = devopness.users.get_user_me()
        print(f"User ID: {current_user.data.id}")
    finally:
        devopness.close()


if __name__ == "__main__":
    main()

Authentication with Project API Token

Ensure you have a Project API Token from Devopness. If you don't have one, see Add a Project API Token.

Asynchronous usage
import asyncio
from devopness import DevopnessClientAsync

devopness = DevopnessClientAsync()
devopness.api_token = "your-project-api-token-here"


async def main():
    try:
        project = await devopness.projects.get_project(project_id=123)
        print(f"Project name: {project.data.name}")
    finally:
        await devopness.aclose()


if __name__ == "__main__":
    asyncio.run(main())
Synchronous usage
from devopness import DevopnessClient

devopness = DevopnessClient()
devopness.api_token = "your-project-api-token-here"


def main():
    try:
        project = devopness.projects.get_project(project_id=123)
        print(f"Project name: {project.data.name}")
    finally:
        devopness.close()


if __name__ == "__main__":
    main()

Authentication with Login (Deprecated)

Warning: Email/password authentication is no longer supported. API requests using this method return 4xx errors.

Invoking authentication-protected endpoints

Once authenticated, you can invoke protected endpoints. Here's an example of retrieving user details and listing projects:

Asynchronous usage

import asyncio
import os
from devopness import DevopnessClientAsync, DevopnessClientConfig
from devopness.core import DevopnessSdkError

config = DevopnessClientConfig(api_token=os.getenv("DEVOPNESS_API_TOKEN"))
devopness = DevopnessClientAsync(config)


async def get_user_profile():
    try:
        # Retrieve current user details
        current_user = await devopness.users.get_user_me()
        print(f"User ID: {current_user.data.id}")

    except DevopnessSdkError as error:
        print(f"Error: {error}")
    finally:
        await devopness.aclose()


if __name__ == "__main__":
    asyncio.run(get_user_profile())

Synchronous usage

import os
from devopness import DevopnessClient, DevopnessClientConfig
from devopness.core import DevopnessSdkError

config = DevopnessClientConfig(api_token=os.getenv("DEVOPNESS_API_TOKEN"))
devopness = DevopnessClient(config)


def get_user_profile():
    try:
        # Retrieve current user details
        current_user = devopness.users.get_user_me()
        print(f"User ID: {current_user.data.id}")

    except DevopnessSdkError as error:
        print(f"Error: {error}")
    finally:
        devopness.close()


if __name__ == "__main__":
    get_user_profile()

Error Handling

The SDK provides structured error handling through exceptions:

  • DevopnessApiError: This exception is raised when the Devopness API returns an error response. This typically indicates issues with the request itself, such as invalid input data, unauthorized access, or resource not found. It provides the following attributes to help diagnose the error:
Attribute Description
status_code The HTTP status code returned by the API
message A general error message from the API
errors An optional dictionary containing detailed validation errors, often encountered during create or update operations
  • DevopnessNetworkError: This exception is raised when a generic network-related issue occurs during the communication with the Devopness API. This could be due to problems like an unreachable host, connection timeouts, or other network configuration errors.

Both exceptions inherit from DevopnessSdkError, the base class for all SDK exceptions. You can use this class to catch and handle all exceptions raised by the SDK.

Development

To build the SDK locally, use Docker:

With Docker

Prerequisites

Steps

  1. Navigate to the project directory:
cd packages/sdks/python/
  1. Build the Docker image:
make build-image
  1. Build the Python SDK:
make build-sdk-python

Release files for devopness 2.8.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for devopness 2.8.2
File Size Uploaded
devopness-2.8.2.tar.gz 145.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for devopness 2.8.2
File Interpreter ABI Platform
devopness-2.8.2-py3-none-any.whl Python 3 none any Details

Total release size: 580.6 kB

Release files / devopness-2.8.2.tar.gz

Download URL devopness-2.8.2.tar.gz
Size 145.0 kB
Tags Source
SHA-256 checksum
How to use checksums
1b578ca48e5ac1e9fc4092c6203b6c943aec68c76cc575e4bd68204f089b777d
BLAKE2b-256 checksum
How to use checksums
cc8204f2fd1191c7eaf6bfda39d2fe3af0159390b43051fd7d7534f625f6335a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.

Transparency log

Release files / devopness-2.8.2-py3-none-any.whl

Download URL devopness-2.8.2-py3-none-any.whl
Size 435.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5d07d0cc19d0381cc23603ca76f61205bcc30b6dd4e67d9d1d6edcb3b5548dc0
BLAKE2b-256 checksum
How to use checksums
b9e2c8cdd047b7f24ac7291053f45eb69f9a864b8e589b711fab2bbab1a95963
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.

Transparency log

Release history Release notifications | RSS feed

2.8.4

2 release files

2.8.3

2 release files

This release

2.8.2 This release

2 release files

2.8.1

2 release files

2.8.0

2 release files

2.7.2

2 release files

2.7.1

2 release files

2.7.0

2 release files

2.6.5

2 release files

2.6.4

2 release files

2.6.3

2 release files

2.6.2

2 release files

2.6.1

2 release files

2.6.0

2 release files

2.5.0

2 release files

2.4.1

2 release files

2.4.0

2 release files

2.3.3

2 release files

2.3.2

2 release files

2.3.1

2 release files

2.3.0

2 release files

2.2.1

2 release files

2.2.0

2 release files

2.1.11

2 release files

2.1.10

2 release files

2.1.9

2 release files

2.1.8

2 release files

2.1.7

2 release files

2.1.6

2 release files

2.1.5

2 release files

2.1.4

2 release files

2.1.3

2 release files

2.1.2

2 release files

2.1.1

2 release files

2.1.0

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.3.7

2 release files

1.3.6

2 release files

1.3.5

2 release files

1.3.4

2 release files

1.3.3

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.6

2 release files

1.1.5

2 release files

1.1.4

2 release files

1.1.3

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page