Skip to main content

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:

  1. 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"
    )
    
  2. 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()
    
  3. 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


Download files

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

Source Distribution

day2-0.2.4.tar.gz (63.3 kB view details)

Uploaded Source

Built Distribution

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

day2-0.2.4-py3-none-any.whl (74.1 kB view details)

Uploaded Python 3

File details

Details for the file day2-0.2.4.tar.gz.

File metadata

  • Download URL: day2-0.2.4.tar.gz
  • Upload date:
  • Size: 63.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for day2-0.2.4.tar.gz
Algorithm Hash digest
SHA256 e4c6ae98c18073689a35939414e87fb1698ea9350bb85f1213deb3001f8a495a
MD5 5b21b0e4e5c7983f2bdbceaf03c1a2e4
BLAKE2b-256 cbda6662c0f07fcfea5004458fe4f6ddaf6844cbf63a86699ccc8b1ae726c6dd

See more details on using hashes here.

Provenance

The following attestation bundles were made for day2-0.2.4.tar.gz:

Publisher: publish.yml on montycloud/day2-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 day2-0.2.4-py3-none-any.whl.

File metadata

  • Download URL: day2-0.2.4-py3-none-any.whl
  • Upload date:
  • Size: 74.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for day2-0.2.4-py3-none-any.whl
Algorithm Hash digest
SHA256 aaad3d3aa961198f68d608944d38524ab3bd64d9f76e8da1dc9ab56f91f26a37
MD5 7d5d29022d210887250034d039c4cd8e
BLAKE2b-256 f519c230c97e8550edb88fdf5aaef15a9ccc25b498052b84b4fbed7c545c971a

See more details on using hashes here.

Provenance

The following attestation bundles were made for day2-0.2.4-py3-none-any.whl:

Publisher: publish.yml on montycloud/day2-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