MontyCloud DAY2 SDK for Python
Project description
MontyCloud SDK
A Python SDK for interacting with the MontyCloud DAY2 API.
Features
- AWS-style client factories for simplified access
- Secure authentication with API key and API secret key
- Multi-tenant context management
- Comprehensive error handling with retry logic
- Strongly typed models using Pydantic
- CLI interface for common operations
Requirements
- Python 3.11 or higher
Installation
pip install day2
Quick Start
Using the SDK
Method 1: AWS-style Client Factories
import day2
# Use module-level client factories (automatically creates a default session)
tenants = day2.tenant().list_tenants()
for tenant in tenants.tenants:
print(f"Tenant: {tenant.name} (ID: {tenant.id})")
# List assessments
assessments = day2.assessment().list_assessments(
tenant_id="tenant-123",
status="PENDING"
)
for assessment in assessments.assessments:
print(f"Assessment: {assessment.name} (ID: {assessment.id})")
Method 2: Explicit Session
import day2
# Create a session with API key
session = day2.Session(api_key="your-api-key", api_secret_key="your-api-secret-key")
# List tenants
tenants = session.tenant.list_tenants()
for tenant in tenants.tenants:
print(f"Tenant: {tenant.name} (ID: {tenant.id})")
# Set tenant context
session.set_tenant("tenant-123")
# List assessments in the tenant
assessments = session.assessment.list_assessments(tenant_id="tenant-123", status="PENDING")
for assessment in assessments.assessments:
print(f"Assessment: {assessment.name} (ID: {assessment.id})")
Using the CLI
Configure authentication:
day2 auth configure --api-key your-api-key --api-secret-key your-api-secret-key
List tenants:
day2 tenant list
Get details of a specific tenant:
day2 tenant get tenant-123
List questions for a specific pillar in an assessment:
day2 assessment questions tenant-123 assessment-456 operational-excellence
Create a new assessment:
day2 assessment create tenant-123 \
--name "My Assessment" \
--description "My assessment description" \
--review-owner "user@example.com" \
--scope '{"AccountId": "123456789012"}' \
--lenses "AWS Well-Architected Framework"
Authentication
The SDK supports authentication with both an API key and an API secret key. You can provide these credentials in several ways:
-
Directly in code:
# Simplified API session = day2.Session(api_key="your-api-key", api_secret_key="your-secret-key") # With API secret key session = day2.Session( api_key="your-api-key", api_secret_key="your-api-secret-key" )
-
Environment variables:
export DAY2_API_KEY="your-api-key" export DAY2_API_SECRET_KEY="your-api-secret-key"
# Will use the environment variables session = day2.Session() # Or use the default session session = day2.get_default_session()
-
Configuration file:
# Using the CLI to configure day2 auth configure --api-key your-api-key --api-secret-key your-api-secret-key
# Will use the configuration file session = day2.Session() # Or use the default session session = day2.get_default_session()
Multi-Tenant Support
The SDK supports multi-tenant operations through session-based tenant context:
# Create a session
session = day2.Session(api_key="your-api-key", api_secret_key="your-secret-key")
# Set tenant context
session.set_tenant("org-123")
# Operations will now be performed in the context of the tenant
assessments = session.assessment.list_assessments(tenant_id="tenant-123", status="PENDING")
# Switch to a different tenant
session.set_tenant("tenant-456")
# Operations will now be performed in the context of the new tenant
assessments = session.assessment.list_assessments(tenant_id="tenant-456", status="PENDING")
# Clear tenant context
session.clear_tenant()
You can also use the default session with module-level client factories:
# Get the default session and set tenant context
default_session = day2.get_default_session()
default_session.set_tenant("org-123")
# Now all module-level client factories will use this tenant context
assessments = day2.assessment().list_assessments(tenant_id="tenant-123", status="PENDING")
Error Handling
The SDK provides comprehensive error handling with custom exceptions:
import day2
from day2.exceptions import (
ClientError,
ServerError,
ValidationError,
ResourceNotFoundError,
AuthenticationError,
TenantContextError,
)
try:
# Using module-level client factory
tenant = day2.tenant().get_tenant("tenant-nonexistent")
except ResourceNotFoundError as e:
print(f"Resource not found: {e}")
except ClientError as e:
print(f"Client error: {e}")
except ServerError as e:
print(f"Server error: {e}")
except Exception as e:
print(f"Unexpected error: {e}")
License
This project is licensed under the MIT License - see the LICENSE file for details.
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 day2-0.2.8.tar.gz.
File metadata
- Download URL: day2-0.2.8.tar.gz
- Upload date:
- Size: 78.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
71c451de807363aaab9bd3e2a96e5e5526173d7d467e56d7152eb82d4c220727
|
|
| MD5 |
26497544587eba81051caeaf6284d500
|
|
| BLAKE2b-256 |
cd252640b6e193395c36a4546ca497adc175c089569d7ae6665690f57a5ada12
|
Provenance
The following attestation bundles were made for day2-0.2.8.tar.gz:
Publisher:
publish.yml on montycloud/day2-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
day2-0.2.8.tar.gz -
Subject digest:
71c451de807363aaab9bd3e2a96e5e5526173d7d467e56d7152eb82d4c220727 - Sigstore transparency entry: 559605343
- Sigstore integration time:
-
Permalink:
montycloud/day2-sdk@f79ed384ff19d974df98bce30affc1ac7fa75eaa -
Branch / Tag:
refs/tags/v0.2.8 - Owner: https://github.com/montycloud
-
Access:
internal
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f79ed384ff19d974df98bce30affc1ac7fa75eaa -
Trigger Event:
release
-
Statement type:
File details
Details for the file day2-0.2.8-py3-none-any.whl.
File metadata
- Download URL: day2-0.2.8-py3-none-any.whl
- Upload date:
- Size: 93.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
520f4f465d887e23634bbda1f6706c486cd1c7d6bf811b20913d9e271a9ce0ac
|
|
| MD5 |
84789c5e9e9c945c7529b756d0544ae3
|
|
| BLAKE2b-256 |
a2a123722b1dc19ea0498f05e91b5386a4e6a3bd80a46b3afbcb16499284e68f
|
Provenance
The following attestation bundles were made for day2-0.2.8-py3-none-any.whl:
Publisher:
publish.yml on montycloud/day2-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
day2-0.2.8-py3-none-any.whl -
Subject digest:
520f4f465d887e23634bbda1f6706c486cd1c7d6bf811b20913d9e271a9ce0ac - Sigstore transparency entry: 559605362
- Sigstore integration time:
-
Permalink:
montycloud/day2-sdk@f79ed384ff19d974df98bce30affc1ac7fa75eaa -
Branch / Tag:
refs/tags/v0.2.8 - Owner: https://github.com/montycloud
-
Access:
internal
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f79ed384ff19d974df98bce30affc1ac7fa75eaa -
Trigger Event:
release
-
Statement type: