Skip to main content

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

Metadata

Release files for iris-devtester 1.20.0

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

Source distribution (sdist)

Source distribution for iris-devtester 1.20.0
File Size Uploaded
iris_devtester-1.20.0.tar.gz 626.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for iris-devtester 1.20.0
File Interpreter ABI Platform
iris_devtester-1.20.0-py3-none-any.whl Python 3 none any Details

Total release size: 811.3 kB

Release files / iris_devtester-1.20.0.tar.gz

Download URL iris_devtester-1.20.0.tar.gz
Size 626.3 kB
Tags Source
SHA-256 checksum
How to use checksums
68b02f633086a8a7d5a406be9a2f41d5c3db3d98fbf350911b1b364dcbad7049
BLAKE2b-256 checksum
How to use checksums
8e88340f23e8ed76ff05b9d2f38f884ca3f707902697aa87298ab78b3498e060
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.12

Release files / iris_devtester-1.20.0-py3-none-any.whl

Download URL iris_devtester-1.20.0-py3-none-any.whl
Size 185.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d600e9e9127a5b0488e75f006c608f52264dbcc49769aa32124e9c002f9341b5
BLAKE2b-256 checksum
How to use checksums
b37689b3207e938cf93a781f05c6dcd1bcf269d80bb7be4938739e41a7e072df
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.12

Release history Release notifications | RSS feed

1.20.1

2 release files

This release

1.20.0 This release

2 release files

1.19.4

2 release files

1.19.2

2 release files

1.19.1

2 release files

1.19.0

2 release files

1.18.1

2 release files

1.18.0

2 release files

1.17.0

2 release files

1.16.0

2 release files

1.15.0

2 release files

1.14.0

2 release files

1.13.0

2 release files

1.12.7

2 release files

1.12.6

2 release files

1.12.5

2 release files

1.12.4

2 release files

1.12.3

2 release files

1.12.2

2 release files

1.12.1

2 release files

1.12.0

2 release files

1.11.1

2 release files

1.9.3

2 release files

1.9.2

2 release files

1.9.1

2 release files

1.9.0

2 release files

1.8.1

2 release files

1.8.0

2 release files

1.7.5

2 release files

1.7.2

2 release files

1.6.0

2 release files

1.5.3

2 release files

1.5.2

2 release files

1.5.1

2 release files

1.5.0

2 release files

1.4.7

2 release files

1.4.6

2 release files

1.4.5

2 release files

1.4.4

2 release files

1.4.3

2 release files

1.4.2

2 release files

1.4.1

2 release files

1.4.0

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.0.2

2 release files

1.0.1

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