iris-devtester 1.10.0__tar.gz → 1.10.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/PKG-INFO +1 -1
- iris_devtester-1.10.2/docs/GETTING_STARTED.md +372 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/__init__.py +1 -1
- iris_devtester-1.10.2/iris_devtester/cli/__init__.py +58 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/cli/container.py +37 -18
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/containers/iris_container.py +161 -11
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/fixtures/__init__.py +21 -10
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/fixtures/creator.py +18 -3
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/fixtures/loader.py +5 -2
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/fixtures/manifest.py +13 -4
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/fixtures/validator.py +9 -3
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester.egg-info/PKG-INFO +1 -1
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester.egg-info/SOURCES.txt +1 -1
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/pyproject.toml +1 -1
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/conftest.py +14 -2
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/ports/test_manual_port_override.py +30 -29
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/ports/test_multi_project_isolation.py +5 -4
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/ports/test_port_exhaustion.py +6 -6
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/ports/test_port_persistence.py +3 -2
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/ports/test_stale_cleanup.py +3 -2
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_cpf_merge.py +13 -2
- iris_devtester-1.10.0/tests/integration/test_dat_fixtures_integration.py → iris_devtester-1.10.2/tests/integration/test_fixtures_integration.py +60 -22
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/unit/test_password_preconfig.py +8 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/unit/test_wait_strategies.py +2 -2
- iris_devtester-1.10.0/docs/GETTING_STARTED.md +0 -248
- iris_devtester-1.10.0/iris_devtester/cli/__init__.py +0 -29
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/AGENTS.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/CLAUDE.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/CONSTITUTION.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/LICENSE +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/MANIFEST.in +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/README.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/SKILL.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/LANGCHAIN_INTEGRATION_QUICKSTART.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/ROADMAP.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/SQL_VS_OBJECTSCRIPT.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/TROUBLESHOOTING.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/WHATS_NEW_v1.4.0.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/archive/AGENTIC_SANDBOX_ENHANCEMENT_REPORT.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/archive/IMPACT_ANALYSIS.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/archive/IRIS_DEVTESTER_POSITIONING_REPORT.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/archive/LANGCHAIN_INTEGRATION_STRATEGY.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/archive/LANGCHAIN_INTEGRATION_TEST_RESULTS.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/archive/PHASE_2_PLAN.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/archive/RAG_TEMPLATES_ANALYSIS.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/archive/README.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/archive/STRATEGIC_ROADMAP_SUMMARY.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/archive/feature-009-refactor-plan.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/development/BUG_REPORT.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/development/EXTRACTION_SUMMARY.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/development/FEATURE_006_SUMMARY.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/development/PHASE2_RESULTS.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/development/PRE_PUBLISH_REVIEW.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/development/PROGRESS.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/development/PYPI_READINESS.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/development/SESSION-INTEGRATION-TESTS.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/development/SESSION-SUMMARY.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/development/STATUS-002-PIVOTED.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/development/STATUS-003-COMPLETE.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/development/STATUS.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/development/V1_COMPLETION_PLAN.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/development/V1_RELEASE_SUMMARY.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/features/WSGI-ASGI-SERVER-SETUP.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/features/agent-skills.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/features/dat-fixtures.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/features/docker-compose.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/features/performance-monitoring.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/features/testcontainers.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/learnings/api-contract-synchronization.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/learnings/callin-service-requirement.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/learnings/cpf-merge-and-container-restarts.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/learnings/dat-fixtures-docker-exec-pattern.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/learnings/dat-restore-database-isolation-problem.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/learnings/dbapi-bulk-insert-performance-issue.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/learnings/dbapi-objectscript-limitation.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/learnings/dbapi-password-reset-limitation.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/learnings/dbapi-private-module-myth.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/learnings/docker-hub-image-naming.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/learnings/embedded-python-considerations.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/learnings/feature-002-pivot-summary.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/learnings/integration-test-dbapi-limitation.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/learnings/iris-backup-patterns.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/learnings/iris-container-performance.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/learnings/iris-container-readiness.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/learnings/iris-docker-sdk-environment-variables.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/learnings/iris-performance-monitoring-landscape.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/learnings/iris-security-users-api.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/learnings/password-reset-changeflag-fix.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/learnings/rag-templates-production-patterns.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/learnings/sql-task-manager-operations.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/learnings/test-isolation-fix-summary.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/learnings/test-isolation-investigation.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/docs/learnings/testcontainers-ryuk-lifecycle.md +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/examples/01_quickstart.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/examples/02_connection_management.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/examples/04_pytest_fixtures.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/examples/05_ci_cd.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/examples/08_auto_discovery.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/examples/09_enterprise.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/examples/10_docker_compose_integration.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/examples/langchain_integration_example.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/cli/__main__.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/cli/connection_commands.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/cli/container_commands.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/cli/fixture_commands.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/config/__init__.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/config/auto_discovery.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/config/container_config.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/config/container_state.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/config/defaults.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/config/discovery.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/config/models.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/config/presets.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/config/yaml_loader.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/connections/__init__.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/connections/auto_discovery.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/connections/connection.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/connections/dbapi.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/connections/jdbc.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/connections/manager.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/connections/models.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/connections/retry.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/containers/__init__.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/containers/cpf_manager.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/containers/models.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/containers/monitor_utils.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/containers/monitoring.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/containers/performance.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/containers/validation.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/containers/wait_strategies.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/fixtures/obj_export.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/integrations/__init__.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/integrations/langchain.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/ports/__init__.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/ports/assignment.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/ports/exceptions.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/ports/registry.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/testing/__init__.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/testing/fixtures.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/testing/helpers.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/testing/models.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/testing/schema_reset.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/utils/__init__.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/utils/container_port.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/utils/container_status.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/utils/dbapi_compat.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/utils/enable_callin.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/utils/health_checks.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/utils/iris_container_adapter.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/utils/password.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/utils/progress.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester/utils/test_connection.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester.egg-info/dependency_links.txt +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester.egg-info/entry_points.txt +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester.egg-info/requires.txt +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/iris_devtester.egg-info/top_level.txt +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/setup.cfg +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/__init__.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/__init__.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/cli/test_container_logs_contract.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/cli/test_container_remove_contract.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/cli/test_container_restart_contract.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/cli/test_container_start_contract.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/cli/test_container_status_contract.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/cli/test_container_stop_contract.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/cli/test_container_up_contract.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/test_agent_skills.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/test_cli_container_commands.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/test_cli_fixture_commands.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/test_connection_api.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/test_container_api.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/test_container_integration_contract.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/test_container_status_api.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/test_container_validation_api.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/test_enable_callin_api.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/test_fixture_creator_api.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/test_fixture_loader_api.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/test_fixture_validator_api.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/test_iriscontainer_attach.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/test_legacy_package_contract.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/test_modern_package_contract.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/test_monitoring_config_api.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/test_package_detection.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/test_port_registry_contract.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/test_preconfig_contract.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/test_reset_verification_contract.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/test_resource_monitoring_api.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/test_retry_logic_contract.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/test_task_manager_api.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/test_test_connection_api.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/contract/test_testing_fixtures_api.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/e2e/__init__.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/e2e/test_skill_workflow.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/__init__.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/conftest.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/ports/__init__.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_bug_fixes.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_bug_fixes_011.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_cli_container_integration.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_connection_integration.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_container_health_monitor.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_container_status_integration.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_container_validation.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_cpf_presets.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_cpf_security.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_custom_user_remediation.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_enable_callin_integration.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_fixture_export_patterns.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_fixture_performance.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_fixture_refresh.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_iriscontainer_attach_integration.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_monitor_utils_integration.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_monitoring_integration.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_password_preconfig_integration.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_password_reset_both_editions.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_password_reset_integration.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_password_reset_macos.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_password_reset_timing.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_password_reset_validation.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_proactive_password_reset.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_real_world_problems.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_reliable_password_reset.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/integration/test_test_connection_integration.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/unit/__init__.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/unit/config/test_config_hierarchy.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/unit/config/test_container_config.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/unit/config/test_yaml_loader.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/unit/test_auto_discovery.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/unit/test_config_discovery.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/unit/test_connection_fallback.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/unit/test_connection_info.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/unit/test_cpf_manager.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/unit/test_iris_config.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/unit/test_iris_container.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/unit/test_manifest.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/unit/test_monitoring_policy.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/unit/test_password_preconfig_unit.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/unit/test_performance_metrics.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/unit/test_resource_thresholds.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/unit/test_retry.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/unit/test_schema_models.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/unit/test_validation_results.py +0 -0
- {iris_devtester-1.10.0 → iris_devtester-1.10.2}/tests/unit/utils/test_iris_container_adapter.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: iris-devtester
|
|
3
|
-
Version: 1.10.
|
|
3
|
+
Version: 1.10.2
|
|
4
4
|
Summary: Battle-tested InterSystems IRIS infrastructure utilities for Python development
|
|
5
5
|
Author-email: InterSystems Community <community@intersystems.com>
|
|
6
6
|
Maintainer-email: Thomas Dyar <thomas.dyar@intersystems.com>
|
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
# Getting Started with iris-devtester
|
|
2
|
+
|
|
3
|
+
**Version**: 1.10.1
|
|
4
|
+
**Package**: [iris-devtester on PyPI](https://pypi.org/project/iris-devtester/)
|
|
5
|
+
|
|
6
|
+
## What Is This?
|
|
7
|
+
|
|
8
|
+
`iris-devtester` is a Python testing toolkit for InterSystems IRIS databases. It provides:
|
|
9
|
+
|
|
10
|
+
- **Container Management**: Start/stop IRIS containers with one command
|
|
11
|
+
- **Connection Handling**: DBAPI-first connections with automatic retry
|
|
12
|
+
- **Fixture Loading**: Load .DAT fixtures for reproducible test data
|
|
13
|
+
- **pytest Integration**: Ready-to-use fixtures for test isolation
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# Basic installation (DBAPI support)
|
|
19
|
+
pip install iris-devtester
|
|
20
|
+
|
|
21
|
+
# With all features (JDBC, fixtures, testing)
|
|
22
|
+
pip install "iris-devtester[all]"
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Quick Start
|
|
26
|
+
|
|
27
|
+
### CLI Usage (Recommended for CI/CD)
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# Start an IRIS container (zero-config)
|
|
31
|
+
iris-devtester container up
|
|
32
|
+
|
|
33
|
+
# Start light edition (85% smaller, ideal for CI/CD)
|
|
34
|
+
iris-devtester container up --edition light
|
|
35
|
+
|
|
36
|
+
# List running containers
|
|
37
|
+
iris-devtester container list
|
|
38
|
+
|
|
39
|
+
# Test database connectivity
|
|
40
|
+
iris-devtester test-connection
|
|
41
|
+
|
|
42
|
+
# View container status
|
|
43
|
+
iris-devtester container status
|
|
44
|
+
|
|
45
|
+
# Stop and remove when done
|
|
46
|
+
iris-devtester container stop
|
|
47
|
+
iris-devtester container remove
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Python API Usage
|
|
51
|
+
|
|
52
|
+
```python
|
|
53
|
+
from iris_devtester.containers import IRISContainer
|
|
54
|
+
|
|
55
|
+
# Start a container with context manager (auto-cleanup)
|
|
56
|
+
with IRISContainer.community() as iris:
|
|
57
|
+
conn = iris.get_connection()
|
|
58
|
+
cursor = conn.cursor()
|
|
59
|
+
cursor.execute("SELECT $ZVERSION")
|
|
60
|
+
print(cursor.fetchone()[0])
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### pytest Integration
|
|
64
|
+
|
|
65
|
+
```python
|
|
66
|
+
# conftest.py
|
|
67
|
+
from iris_devtester.testing import iris_db
|
|
68
|
+
|
|
69
|
+
# Use the fixture in tests
|
|
70
|
+
def test_database_query(iris_db):
|
|
71
|
+
conn = iris_db.get_connection()
|
|
72
|
+
cursor = conn.cursor()
|
|
73
|
+
cursor.execute("SELECT 1+1")
|
|
74
|
+
assert cursor.fetchone()[0] == 2
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Container Editions
|
|
78
|
+
|
|
79
|
+
Choose the right edition for your use case:
|
|
80
|
+
|
|
81
|
+
| Edition | Size | Use Case | Factory Method |
|
|
82
|
+
|---------|------|----------|----------------|
|
|
83
|
+
| **Community** | ~3.5GB | Full-featured development | `IRISContainer.community()` |
|
|
84
|
+
| **Light** | ~580MB | CI/CD pipelines (6x smaller) | `IRISContainer.light()` |
|
|
85
|
+
| **Enterprise** | ~1GB+ | Licensed production features | `IRISContainer.enterprise(license_key=...)` |
|
|
86
|
+
|
|
87
|
+
### Light Edition Details
|
|
88
|
+
|
|
89
|
+
The light edition (`caretdev/iris-community-light`) is optimized for CI/CD:
|
|
90
|
+
|
|
91
|
+
- **85% smaller** than full community edition
|
|
92
|
+
- **Removes**: Interoperability, Management Portal, DeepSee/BI, CSP/REST
|
|
93
|
+
- **Keeps**: SQL engine, DBAPI, JDBC, ODBC, SQLAlchemy-IRIS
|
|
94
|
+
- **Multi-arch**: Supports both ARM64 (Apple Silicon) and x86
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# CLI
|
|
98
|
+
iris-devtester container up --edition light
|
|
99
|
+
|
|
100
|
+
# Python
|
|
101
|
+
with IRISContainer.light() as iris:
|
|
102
|
+
conn = iris.get_connection()
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Enterprise Edition
|
|
106
|
+
|
|
107
|
+
For licensed IRIS with enterprise features:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
# CLI
|
|
111
|
+
iris-devtester container up --edition enterprise --license ~/.iris/iris.key
|
|
112
|
+
|
|
113
|
+
# Python
|
|
114
|
+
with IRISContainer.enterprise(license_key="/path/to/iris.key") as iris:
|
|
115
|
+
conn = iris.get_connection()
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## CLI Command Reference
|
|
119
|
+
|
|
120
|
+
### Container Commands
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
iris-devtester container --help
|
|
124
|
+
|
|
125
|
+
# Available commands:
|
|
126
|
+
up Create and start container
|
|
127
|
+
list List IRIS containers
|
|
128
|
+
status Check container health
|
|
129
|
+
start Start existing container
|
|
130
|
+
stop Stop container
|
|
131
|
+
restart Restart container
|
|
132
|
+
remove Remove container
|
|
133
|
+
logs View container logs
|
|
134
|
+
reset-password Reset IRIS user password
|
|
135
|
+
enable-callin Enable CallIn service (for DBAPI)
|
|
136
|
+
test-connection Test database connectivity
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Common Options
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
# Custom container name
|
|
143
|
+
iris-devtester container up --name my-project-db
|
|
144
|
+
|
|
145
|
+
# Specify edition
|
|
146
|
+
iris-devtester container up --edition light
|
|
147
|
+
|
|
148
|
+
# JSON output (for scripting/agents)
|
|
149
|
+
iris-devtester container list --format json
|
|
150
|
+
iris-devtester container status --format json
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Exit Codes
|
|
154
|
+
|
|
155
|
+
For automation and AI agents:
|
|
156
|
+
|
|
157
|
+
| Code | Meaning |
|
|
158
|
+
|------|---------|
|
|
159
|
+
| 0 | Success |
|
|
160
|
+
| 1 | General error |
|
|
161
|
+
| 2 | Not found / Config error |
|
|
162
|
+
| 5 | Timeout |
|
|
163
|
+
|
|
164
|
+
## Configuration
|
|
165
|
+
|
|
166
|
+
### Environment Variables
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
export IRIS_HOST=localhost
|
|
170
|
+
export IRIS_PORT=1972
|
|
171
|
+
export IRIS_NAMESPACE=USER
|
|
172
|
+
export IRIS_USERNAME=_SYSTEM
|
|
173
|
+
export IRIS_PASSWORD=SYS
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### YAML Configuration
|
|
177
|
+
|
|
178
|
+
Create `iris-config.yml`:
|
|
179
|
+
|
|
180
|
+
```yaml
|
|
181
|
+
container_name: my-iris-db
|
|
182
|
+
edition: community
|
|
183
|
+
superserver_port: 1972
|
|
184
|
+
webserver_port: 52773
|
|
185
|
+
namespace: USER
|
|
186
|
+
password: SYS
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Then use:
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
iris-devtester container up --config iris-config.yml
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Common Workflows
|
|
196
|
+
|
|
197
|
+
### Local Development
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
# Start container once
|
|
201
|
+
iris-devtester container up --name dev-iris
|
|
202
|
+
|
|
203
|
+
# Run your tests
|
|
204
|
+
pytest
|
|
205
|
+
|
|
206
|
+
# Container persists between test runs
|
|
207
|
+
# Stop when done for the day
|
|
208
|
+
iris-devtester container stop
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### CI/CD Pipeline
|
|
212
|
+
|
|
213
|
+
```yaml
|
|
214
|
+
# GitHub Actions example
|
|
215
|
+
jobs:
|
|
216
|
+
test:
|
|
217
|
+
runs-on: ubuntu-latest
|
|
218
|
+
steps:
|
|
219
|
+
- uses: actions/checkout@v4
|
|
220
|
+
- uses: actions/setup-python@v5
|
|
221
|
+
with:
|
|
222
|
+
python-version: '3.11'
|
|
223
|
+
|
|
224
|
+
- name: Install dependencies
|
|
225
|
+
run: pip install -e ".[test]"
|
|
226
|
+
|
|
227
|
+
- name: Start IRIS (light edition for speed)
|
|
228
|
+
run: iris-devtester container up --edition light
|
|
229
|
+
|
|
230
|
+
- name: Run tests
|
|
231
|
+
run: pytest
|
|
232
|
+
|
|
233
|
+
- name: Cleanup
|
|
234
|
+
if: always()
|
|
235
|
+
run: iris-devtester container remove --force
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### Fixture-Based Testing
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
# Create fixture from existing data
|
|
242
|
+
iris-devtester fixture create --namespace USER --output ./fixtures/baseline
|
|
243
|
+
|
|
244
|
+
# Load fixture into test database
|
|
245
|
+
iris-devtester fixture load --fixture ./fixtures/baseline
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
## Troubleshooting
|
|
249
|
+
|
|
250
|
+
### "Access Denied" Errors
|
|
251
|
+
|
|
252
|
+
Usually caused by expired passwords. Fix:
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
iris-devtester container reset-password
|
|
256
|
+
iris-devtester test-connection
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### Container Won't Start
|
|
260
|
+
|
|
261
|
+
Check if port is in use:
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
# List all IRIS containers
|
|
265
|
+
iris-devtester container list --all
|
|
266
|
+
|
|
267
|
+
# Remove old container
|
|
268
|
+
iris-devtester container remove old-container --force
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### DBAPI Connection Fails
|
|
272
|
+
|
|
273
|
+
Ensure CallIn service is enabled:
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
iris-devtester container enable-callin
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
## For AI Agents
|
|
280
|
+
|
|
281
|
+
This CLI is designed to be agent-friendly:
|
|
282
|
+
|
|
283
|
+
1. **Self-documenting**: `iris-devtester --help` shows all options
|
|
284
|
+
2. **Structured output**: `--format json` for machine-readable data
|
|
285
|
+
3. **Clear exit codes**: 0=success, non-zero=failure
|
|
286
|
+
4. **Idempotent operations**: Safe to run commands multiple times
|
|
287
|
+
|
|
288
|
+
Example agent workflow:
|
|
289
|
+
|
|
290
|
+
```bash
|
|
291
|
+
# Check if container exists
|
|
292
|
+
iris-devtester container list --format json
|
|
293
|
+
|
|
294
|
+
# Start if not running
|
|
295
|
+
iris-devtester container up --edition light
|
|
296
|
+
|
|
297
|
+
# Verify connectivity
|
|
298
|
+
iris-devtester test-connection
|
|
299
|
+
|
|
300
|
+
# Run tests
|
|
301
|
+
pytest tests/
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
## When to Use docker-compose Instead
|
|
305
|
+
|
|
306
|
+
`iris-devtester` manages **single IRIS containers**. For these scenarios, use `docker-compose` directly:
|
|
307
|
+
|
|
308
|
+
| Scenario | Why docker-compose |
|
|
309
|
+
|----------|-------------------|
|
|
310
|
+
| **Sharded clusters** | Multiple shards + router require coordinated networking |
|
|
311
|
+
| **Mirrored pairs** | Primary + backup with failover configuration |
|
|
312
|
+
| **ECP configurations** | Application servers + database servers |
|
|
313
|
+
| **Multi-service stacks** | IRIS + web server + cache + queue |
|
|
314
|
+
| **Custom networking** | Specific network topologies or bridges |
|
|
315
|
+
|
|
316
|
+
### Example: Sharded IRIS Cluster
|
|
317
|
+
|
|
318
|
+
For a sharded HNSW vector search setup with 8 shards:
|
|
319
|
+
|
|
320
|
+
```yaml
|
|
321
|
+
# docker-compose.yaml
|
|
322
|
+
services:
|
|
323
|
+
iris-router:
|
|
324
|
+
image: intersystemsdc/iris-community:latest
|
|
325
|
+
ports:
|
|
326
|
+
- "1972:1972"
|
|
327
|
+
# Router configuration...
|
|
328
|
+
|
|
329
|
+
iris-shard-1:
|
|
330
|
+
image: intersystemsdc/iris-community:latest
|
|
331
|
+
# Shard 1 configuration...
|
|
332
|
+
|
|
333
|
+
iris-shard-2:
|
|
334
|
+
image: intersystemsdc/iris-community:latest
|
|
335
|
+
# Shard 2 configuration...
|
|
336
|
+
|
|
337
|
+
# ... more shards
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
Then use:
|
|
341
|
+
|
|
342
|
+
```bash
|
|
343
|
+
docker-compose up -d
|
|
344
|
+
# Wait for cluster to be ready
|
|
345
|
+
docker-compose logs -f iris-router
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
### Custom Images with iris-devtester
|
|
349
|
+
|
|
350
|
+
For **single containers** with custom images, use the `--image` option:
|
|
351
|
+
|
|
352
|
+
```bash
|
|
353
|
+
# Custom registry
|
|
354
|
+
iris-devtester container up --image myregistry.io/iris:custom
|
|
355
|
+
|
|
356
|
+
# Specific IRIS version
|
|
357
|
+
iris-devtester container up --image intersystemsdc/iris-community:2024.1
|
|
358
|
+
|
|
359
|
+
# IRIS with ZPM pre-installed
|
|
360
|
+
iris-devtester container up --image intersystemsdc/iris-community:2024.1-zpm
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
## Next Steps
|
|
364
|
+
|
|
365
|
+
- [README.md](../README.md) - Full package documentation
|
|
366
|
+
- [TROUBLESHOOTING.md](TROUBLESHOOTING.md) - Common issues and solutions
|
|
367
|
+
- [CONSTITUTION.md](../CONSTITUTION.md) - Design principles
|
|
368
|
+
- [SKILL.md](../SKILL.md) - AI agent skill manifest
|
|
369
|
+
|
|
370
|
+
---
|
|
371
|
+
|
|
372
|
+
**Questions?** Open an issue on [GitHub](https://github.com/intersystems-community/iris-devtester/issues)
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"""CLI commands for iris-devtester."""
|
|
2
|
+
|
|
3
|
+
import click
|
|
4
|
+
|
|
5
|
+
from iris_devtester import __version__
|
|
6
|
+
|
|
7
|
+
from .connection_commands import test_connection
|
|
8
|
+
from .container import container_group as container
|
|
9
|
+
from .fixture_commands import fixture
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@click.group()
|
|
13
|
+
@click.version_option(version=__version__, prog_name="iris-devtester")
|
|
14
|
+
def main():
|
|
15
|
+
"""
|
|
16
|
+
iris-devtester - Python testing toolkit for InterSystems IRIS databases.
|
|
17
|
+
|
|
18
|
+
\b
|
|
19
|
+
WHAT THIS TOOL DOES:
|
|
20
|
+
Manages IRIS database containers, fixtures, and connections for testing.
|
|
21
|
+
Designed for CI/CD pipelines, local development, and AI agent automation.
|
|
22
|
+
|
|
23
|
+
\b
|
|
24
|
+
CONTAINER EDITIONS:
|
|
25
|
+
community Full IRIS Community (~3.5GB) - default, all features
|
|
26
|
+
light Minimal for CI/CD (~580MB) - SQL/DBAPI only, 6x smaller
|
|
27
|
+
enterprise Licensed IRIS - requires iris.key file
|
|
28
|
+
|
|
29
|
+
\b
|
|
30
|
+
QUICK START:
|
|
31
|
+
iris-devtester container up # Start community
|
|
32
|
+
iris-devtester container up --edition light # Start light (CI/CD)
|
|
33
|
+
iris-devtester container list # List containers
|
|
34
|
+
iris-devtester test-connection # Verify connectivity
|
|
35
|
+
iris-devtester container status # Check health
|
|
36
|
+
|
|
37
|
+
\b
|
|
38
|
+
COMMON WORKFLOWS:
|
|
39
|
+
Local dev: container up → test-connection → (your tests)
|
|
40
|
+
CI/CD: container up --edition light → test-connection → pytest
|
|
41
|
+
Fixtures: fixture load --fixture ./data → (verify data)
|
|
42
|
+
|
|
43
|
+
\b
|
|
44
|
+
FOR AI AGENTS:
|
|
45
|
+
All commands support --help for detailed options. Commands return
|
|
46
|
+
structured exit codes (0=success, 1=error, 2=not found, 5=timeout).
|
|
47
|
+
Use 'container list --format json' for machine-readable output.
|
|
48
|
+
"""
|
|
49
|
+
pass
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
# Register subcommands
|
|
53
|
+
main.add_command(fixture)
|
|
54
|
+
main.add_command(container)
|
|
55
|
+
main.add_command(test_connection)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
__all__ = ["main", "fixture", "container", "test_connection"]
|
|
@@ -21,8 +21,23 @@ def container_group(ctx):
|
|
|
21
21
|
"""
|
|
22
22
|
Container lifecycle management commands.
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
\b
|
|
25
|
+
Manage IRIS database containers for testing and development.
|
|
26
|
+
Supports Community, Enterprise, and Light editions.
|
|
27
|
+
|
|
28
|
+
\b
|
|
29
|
+
EDITIONS:
|
|
30
|
+
community Full IRIS Community Edition (~3.5GB, all features)
|
|
31
|
+
light Minimal CI/CD image (~580MB, SQL/DBAPI only)
|
|
32
|
+
enterprise Licensed IRIS (requires --license iris.key)
|
|
33
|
+
|
|
34
|
+
\b
|
|
35
|
+
QUICK START:
|
|
36
|
+
up Create and start a container
|
|
37
|
+
list Show running containers
|
|
38
|
+
status Check container health
|
|
39
|
+
test-connection Verify database connectivity
|
|
40
|
+
stop/remove Clean up containers
|
|
26
41
|
"""
|
|
27
42
|
pass
|
|
28
43
|
|
|
@@ -43,6 +58,12 @@ def container_group(ctx):
|
|
|
43
58
|
default="community",
|
|
44
59
|
help="IRIS edition: community (default), enterprise (requires license), light (minimal for CI/CD)",
|
|
45
60
|
)
|
|
61
|
+
@click.option(
|
|
62
|
+
"--image",
|
|
63
|
+
type=str,
|
|
64
|
+
default=None,
|
|
65
|
+
help="Custom Docker image (overrides --edition). Example: myregistry/iris:2024.1",
|
|
66
|
+
)
|
|
46
67
|
@click.option(
|
|
47
68
|
"--license",
|
|
48
69
|
"license_key",
|
|
@@ -60,37 +81,31 @@ def container_group(ctx):
|
|
|
60
81
|
)
|
|
61
82
|
@click.option("--cpf", help="Path to CPF merge file or raw CPF content")
|
|
62
83
|
@click.pass_context
|
|
63
|
-
def up(ctx, config, name, edition, license_key, detach, timeout, cpf):
|
|
84
|
+
def up(ctx, config, name, edition, image, license_key, detach, timeout, cpf):
|
|
64
85
|
"""
|
|
65
86
|
Create and start IRIS container from configuration.
|
|
66
87
|
|
|
67
88
|
Similar to docker-compose up. Creates a new container or starts existing one.
|
|
68
89
|
Supports zero-config mode - works without any configuration file.
|
|
69
90
|
|
|
70
|
-
|
|
91
|
+
\b
|
|
92
|
+
Container Lifecycle:
|
|
71
93
|
- Containers persist until explicitly removed with 'container remove'
|
|
72
94
|
- Volume mounts are verified during creation
|
|
73
95
|
- No automatic cleanup when CLI exits
|
|
74
96
|
|
|
75
97
|
\b
|
|
76
98
|
Examples:
|
|
77
|
-
# Zero-config (uses Community edition defaults)
|
|
78
99
|
iris-devtester container up
|
|
79
|
-
|
|
80
|
-
# Light edition for CI/CD (85% smaller, faster startup)
|
|
81
100
|
iris-devtester container up --edition light
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
iris-devtester container up --edition enterprise --license /path/to/iris.key
|
|
85
|
-
|
|
86
|
-
# With custom container name
|
|
101
|
+
iris-devtester container up --edition enterprise --license ./iris.key
|
|
102
|
+
iris-devtester container up --image myregistry/iris:2024.1
|
|
87
103
|
iris-devtester container up --name my-test-db
|
|
88
|
-
|
|
89
|
-
# With custom configuration including volumes
|
|
90
104
|
iris-devtester container up --config iris-config.yml
|
|
91
105
|
|
|
92
|
-
|
|
93
|
-
|
|
106
|
+
\b
|
|
107
|
+
NOTE: For multi-container setups (sharding, mirroring, clusters),
|
|
108
|
+
use docker-compose instead. This tool manages single containers.
|
|
94
109
|
"""
|
|
95
110
|
try:
|
|
96
111
|
# Load configuration
|
|
@@ -112,8 +127,12 @@ def up(ctx, config, name, edition, license_key, detach, timeout, cpf):
|
|
|
112
127
|
container_config.container_name = name
|
|
113
128
|
click.echo(f" → Container name: {name}")
|
|
114
129
|
|
|
115
|
-
# Override
|
|
116
|
-
if
|
|
130
|
+
# Override image if provided via --image (takes precedence over --edition)
|
|
131
|
+
if image:
|
|
132
|
+
container_config.image = image
|
|
133
|
+
click.echo(f" → Image: {image} (custom)")
|
|
134
|
+
# Override edition if provided via --edition (only if --image not set)
|
|
135
|
+
elif edition:
|
|
117
136
|
edition_lower = edition.lower()
|
|
118
137
|
container_config.edition = edition_lower
|
|
119
138
|
|