Skip to main content

Battle-tested InterSystems IRIS infrastructure utilities for Python development

Project description

IRIS DevTester

Battle-tested InterSystems IRIS infrastructure utilities for Python development

PyPI version Python Versions License: MIT Test Coverage Works with iris-agentic-dev

What is This?

IRIS DevTester is a comprehensive Python package that provides automatic, reliable, production-tested infrastructure for InterSystems IRIS development. It handles connectivity, container lifecycles, and test data management, codifying years of experience into a reusable toolkit.

Problems It Solves

  • Auto-Remediation: Fixes "Password change required" and expired accounts automatically
  • Port Management: Eliminates conflicts when running tests in parallel
  • Isolation: Ensures every test gets a clean, isolated database instance
  • Performance: DBAPI-first connection pooling is 3x faster than traditional JDBC
  • Data Refresh: High-speed GOF fixture loading (10-100x faster than SQL inserts)

Quick Start

1. Install

pip install iris-devtester[all]

2. SQLite-Level Connectivity (Warm Start)

Use the persistent dev instance for instant connections across projects:

idt dev up

Then in your code:

from iris_devtester.connections import get_connection

# Instant connection to a project-specific namespace
conn = get_connection()

3. Ephemeral Containers (for CI/CD)

For completely isolated test containers:

from iris_devtester.containers import IRISContainer

def test_connection():
    with IRISContainer.community() as iris:
        conn = iris.get_connection()
        cursor = conn.cursor()
        cursor.execute("SELECT 1")
        assert cursor.fetchone()[0] == 1

Container Editions

Three canonical container editions are available:

Edition Size Use Case Image
Community ~972MB Development, testing intersystemsdc/iris-community
Enterprise ~1GB+ Production testing containers.intersystems.com/intersystems/iris
Light ~580MB CI/CD pipelines caretdev/iris-community-light

Python API

from iris_devtester.containers import IRISContainer

# Community Edition (auto-detects ARM64 vs x86)
with IRISContainer.community() as iris:
    conn = iris.get_connection()

# Light Edition (85% smaller, for CI/CD)
with IRISContainer.light() as iris:
    conn = iris.get_connection()

# Enterprise Edition (requires license)
with IRISContainer.enterprise(license_key="/path/to/iris.key") as iris:
    conn = iris.get_connection()

# Specify version
with IRISContainer.community(version="2025.1") as iris:
    conn = iris.get_connection()

CLI Usage

# Community (default)
iris-devtester container up

# Light edition for CI/CD
iris-devtester container up --edition light

# Enterprise edition with license
iris-devtester container up --edition enterprise --license /path/to/iris.key

# List running IRIS containers
iris-devtester container list

Light Edition Details

The Light edition removes components unnecessary for SQL-only workloads:

  • Removed: Interoperability/Ensemble, Management Portal, DeepSee/BI, CSP/REST
  • Kept: SQL engine, DBAPI, JDBC, ODBC, SQLAlchemy-IRIS support

Perfect for microservices, automated testing, and Python/SQL pipelines.

Builder Methods

# Set a custom container name (for debugging, logs, multiple containers)
iris = IRISContainer.community().with_name("my-test-db")

# Set credentials
iris = IRISContainer.community().with_credentials("_SYSTEM", "MyPassword")

# Pre-configure password (set via IRIS_PASSWORD env var at startup)
iris = IRISContainer.community().with_preconfigured_password("MyPassword")

# Chain multiple options
with IRISContainer.community() \
    .with_name("integration-test-db") \
    .with_credentials("_SYSTEM", "TestPass123") as iris:
    conn = iris.get_connection()

Constructor Parameters

IRISContainer(
    image="intersystemsdc/iris-community:latest",  # Docker image
    username="_SYSTEM",                             # Default username
    password="SYS",                                 # Default password
    namespace="USER",                               # Default namespace
    name="my-container",                            # Container name (alternative to with_name)
)

Key Features

  • 🔐 Automatic Password Management: Remediates security flags using official system APIs.
  • 🐳 Container Lifecycle: CLI and Python API for IRIS container management (up, start, stop).
  • 📦 DAT Fixture Management: Create and load reproducible test fixtures in seconds.
  • ⚡ DBAPI-First Performance: Automatically selects the fastest available driver.
  • 📊 Resource Monitoring: Resource-aware performance tracking.

AI-Assisted Development

This project is optimized for AI coding assistants:

  • Agent Skills - Hierarchical guidance for Claude, Cursor, and Copilot (iris-devtester, -containers, -connections).
  • AGENTS.md - Common build and test commands.

Works with iris-agentic-dev

iris-devtester owns the container lifecycle; iris-agentic-dev (iad) owns compiling and executing ObjectScript inside it. They share one authoritative description of a connection so neither side has to reconstruct it — no manual port hunting.

Once a container is up, emit the handoff fragment iad reads from .iris-agentic-dev.toml:

from iris_devtester.containers import IRISContainer

# Attach to a running container (e.g. started by `idt container up`)
container = IRISContainer.attach("opsreview-iris")

# Build the handoff contract (auto-detects a WebGateway sidecar if present)
info = container.connection_info()

# Write the fragment iad hot-reloads
with open(".iris-agentic-dev.toml", "w") as f:
    f.write(info.to_toml_snippet())

For a Docker-only container (no WebGateway), to_toml_snippet() emits:

container = "opsreview-iris"
docker_only = true
namespace = "USER"

When a WebGateway sidecar is detected on the same Docker network, it emits the host-mapped web port instead:

container = "opsreview-iris"
web_port = 52774
docker_only = false
namespace = "USER"

Install the optional integration extra with pip install iris-devtester[iad]. See AGENTS.md → ECOSYSTEM and the iris-devtester-connections skill.

Documentation

License

MIT License - See LICENSE

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

iris_devtester-1.19.2.tar.gz (537.7 kB view details)

Uploaded Source

Built Distribution

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

iris_devtester-1.19.2-py3-none-any.whl (175.9 kB view details)

Uploaded Python 3

File details

Details for the file iris_devtester-1.19.2.tar.gz.

File metadata

  • Download URL: iris_devtester-1.19.2.tar.gz
  • Upload date:
  • Size: 537.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for iris_devtester-1.19.2.tar.gz
Algorithm Hash digest
SHA256 2819b117087ac461b6974619e7ba0f7d2e9cefd688708d4c83c42fc7e1709e8d
MD5 acdef5de01ffa89c57fb7f014614e63e
BLAKE2b-256 d171c21386907d0402e3a7d4de46c46cac2f3f6322430fa3044ab8ecbe8f1b15

See more details on using hashes here.

File details

Details for the file iris_devtester-1.19.2-py3-none-any.whl.

File metadata

  • Download URL: iris_devtester-1.19.2-py3-none-any.whl
  • Upload date:
  • Size: 175.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for iris_devtester-1.19.2-py3-none-any.whl
Algorithm Hash digest
SHA256 4373592f0540cd9c994c3bb66ce79fd68383451b270e587e4eb9a6b564c8b3df
MD5 8afb35597ce1e88d1b9a4c68b30765ba
BLAKE2b-256 840aa388a917e8f7c2adcc05a81eeaa6bb118c53aef99ec6919c9ff2952b519b

See more details on using hashes here.

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