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

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.3.tar.gz (538.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.3-py3-none-any.whl (176.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: iris_devtester-1.19.3.tar.gz
  • Upload date:
  • Size: 538.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.3.tar.gz
Algorithm Hash digest
SHA256 dbeab7164e9017445e0eb546752af978b1487a27e729f9f6d141d13c3e6b77b2
MD5 f1eace90dc2464918361ec1a19ce6ad7
BLAKE2b-256 af13df8b50bed9812aa799100b848004d92b1e26527f5e1fb20c6480894f61d4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for iris_devtester-1.19.3-py3-none-any.whl
Algorithm Hash digest
SHA256 4ba8a7122a14c4676b98728252635bb1ab0e94c494e04ba33466f2c3b50e0e98
MD5 34dc4821b1150a647918a4cacf2abf78
BLAKE2b-256 b677708bdec5225ad9133ece0db7e4af445f37775b41799a830bbe79e98166fc

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.19.3 This release

2 files

1.19.2

2 files

1.19.1

2 files

1.19.0

2 files

1.18.1

2 files

1.18.0

2 files

1.17.0

2 files

1.16.0

2 files

1.15.0

2 files

1.14.0

2 files

1.13.0

2 files

1.12.7

2 files

1.12.6

2 files

1.12.5

2 files

1.12.4

2 files

1.12.3

2 files

1.12.2

2 files

1.12.1

2 files

1.12.0

2 files

1.11.1

2 files

1.11.0

2 files

1.10.4

2 files

1.10.3

2 files

1.10.2

2 files

1.10.0

2 files

1.9.3

2 files

1.9.2

2 files

1.9.1

2 files

1.9.0

2 files

1.8.1

2 files

1.8.0

2 files

1.7.5

2 files

1.7.2

2 files

1.6.0

2 files

1.5.3

2 files

1.5.2

2 files

1.5.1

2 files

1.5.0

2 files

1.4.7

2 files

1.4.6

2 files

1.4.5

2 files

1.4.4

2 files

1.4.3

2 files

1.4.2

2 files

1.4.1

2 files

1.4.0

2 files

1.3.0

2 files

1.2.2

2 files

1.2.1

2 files

1.2.0

2 files

1.0.2

2 files

1.0.1

2 files

1.0.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page