Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[4.0.1] - unreleased
Added
- Add default target support to
target(...), allowingtarget("OperationName")to populate the generated setting initial expression, production Host setting, and graph edge once the named target item exists. - Allow
ComponentRef.connect(...)to accept class-declaredtarget()descriptors, supporting static-friendly calls such asrest.connect(Rest.Output, operation). - Add package typing metadata with
py.typedand explicitComponentRefreturn annotations for production factory methods.
Fixed
- Expose declared and manual target settings through
dir(ComponentRef)sorest.my_targetstyle graph handles are discoverable by runtime autocomplete. - Validate target setting values that reference missing production items.
- Normalize
setting(...)andtarget(...)descriptors used as production setting keys before validation and IRIS rendering. - Render generated instance-style Python routes with
component.connect(...). - Refactor business process and operation message dispatch around normalized message keys for
@handler, typed methods, legacyDISPATCH, and native IRIS requests.
[4.0.0] - 2026-06-21
Breaking Changes
- Remove the legacy
grongier.pexcompatibility package andGrongier.PEXObjectScript classes. UseiopandIOP.*classes instead. - Rename Python component lifecycle hooks to snake_case, including
on_init,on_message, andon_process_input. - Move implementation modules from private
iop._*files into package namespaces such asiop.components,iop.messages,iop.migration,iop.production, andiop.runtime. - Remove the legacy WSGI helper classes and package metadata from
setup.py; project metadata is now managed frompyproject.toml.
Added
- Add
PollingBusinessServiceforiopto create scheduled polling business services without manually returningEns.InboundAdapter. - Add
iop --migrate --dry-run/--explainto print and validate the migration plan without writing to IRIS. - Add Pythonic component setting metadata with
setting(...),Setting,Category, andcontrolshelpers for IRIS production categories, descriptions, required flags, and editor controls. - Add
Productionmodule: a Python DSL for authoring, importing, diffing, and managing IRIS interoperability production topology entirely from Python. Declare components, ports, and routing withservice(),operation(),process(),connect(), andconnect_add(); drive the full production lifecycle (start,stop,restart,test,diff,apply); and export the topology as a typed graph (ProductionGraph,GraphEdge,GraphNode). - Add production reconstruction and rendering support to import productions from IRIS, rebuild them from dictionaries, export them as JSON, XML, Python drafts, or graph data, and include runtime connections and queue information.
- Add runtime director abstractions for local and remote IRIS management, including namespace-aware production control, component start/stop/restart, queue inspection, runtime connection export, and
DirectorProtocol. - Add REST endpoints for production connections, queue information, component lifecycle actions, and IOP-generated proxy class bindings.
- Add CLI support for export formats with
--format json|python|graph, remote settings files with-R/--remote-settings,--bindings,--unused, and--unbind. - Add public binding helpers:
bind_component,unbind_component,list_bindings,register_component, andunregister_component. - Add
@handler(MessageType)for explicit business operation and business process message dispatch; duplicate mappings now emit a warning that identifies the discarded handler. - Add support metadata for Python 3.13 and 3.14.
Changed
- Register
PollingBusinessServiceclasses through package/file migration. - Improve migration output and validation for common message registration mistakes.
- Include mode, namespace, and a final success line in migration output.
- Refactor the CLI into dedicated parser, formatting, and type modules.
- Refactor remote runtime support into dedicated client, director, migration, settings, and setup modules.
- Improve production object migration by automatically registering referenced component, adapter, and
PersistentMessageclasses with deduplication. - Improve business host connection discovery and message serialization error handling.
- Improve service hook ergonomics:
BusinessService.on_process_input()now delegates toon_message(), andPollingBusinessServicenow recommendson_poll()for scheduled polling. - Update demos, tests, and documentation to use the
ioppackage layout, snake_case hooks, and Pythonic production definitions.
Deprecated
- Deprecate the static
iop.Utils/iop.migration.utils._Utilsfacades in favor of functions iniop.migration.utils; these facades are scheduled for removal in v5.0. - Deprecate the static
iop.Director/iop.runtime.director._Directorfacades in favor of functions iniop.runtime.director; these facades are scheduled for removal in v5.0. - Deprecate silent default no-op handlers for unimplemented
on_message(),on_process_input(), andon_poll()hooks; they now warn and are scheduled to raise in v5.0.
Fixed
- Fix production graph edge assertions and runtime connection handling to match the new graph structure.
- Fix production lifecycle and migration error handling for local and remote execution paths.
- Fix component connection discovery so inspection does not execute component initialization hooks.
- Fix message dispatch for postponed annotations and native IRIS message annotations such as
"iris.Ens.StringRequest".
[3.7.1] - 2026-05-28
Added
- Add native
PersistentMessagesupport backed byiris-persistence, includingCLASSESregistration, native IRIS message body materialization, class-parameter based deserialization, and defaultEns.MessageBodyschema generation in extend mode. - Export
Modelfromiopfor nested native persistent or serial objects insidePersistentMessage.
Fixed
- Fix
PersistentMessagedeserialization for IRIS-originated messages whose Python module is not already importable by storing and usingIOP_PYTHON_CLASSPATH. - using ruff to fix various linting issues and improve code quality
Changed
- Optimize
PersistentMessagedispatch by caching IRIS classname to Python class resolution and avoiding repeated IRIS wrapper checks on the native message hot path.
[3.6.1] - 2026-05-12
Fixed
- Fix json schema handling enums.
[3.6.0] - 2026-03-30
Added
iopcommand line has a new full remote controle feature, allowing to start, stop, restart, update, test and log productions on a remote IRIS instance through its REST API
Fixed
- Review how sys.path is updated by Common.cls to ensure it works correctly in all environments
Changed
- Refactor whole unittest and e2e test suite for better maintainability and reliability
- Export production now returns Production name as key in the returned dict for better clarity
- Prevent dataclass and pydantic messages from being serialized with the same serializer as regular messages, to avoid issues with dataclass fields and pydantic validation
[3.5.5] - 2026-01-23
Added
- Add
iop --updatecommand to update a production from the command line - New info displayed in
iop --helpcommand showing current namespace iop --statuscommand now shows if production needs update, if so a message is displayed- Command line option
--namespacealone will show the current namespace
Fixed
- Fix issue with boolean
response_requiredparameter insend_request_asyncmethod of BusinessProcess - Now converts boolean to integer (1 or 0) to ensure compatibility with IRIS API
[3.5.4] - 2025-11-25
Added
- new option for migrate
--force-localto force local migration even if remote url is provided in thesettings.pyfile verify_ssloption insettings.pyto enable or disable SSL verification for remote migration
Fixed
- Fix an error when running
iopcommand without a valid iris instance available - Now it will log a warning instead of raising an exception
- Support purging old messages in production settings
[3.5.3] - 2025-08-01
Fixed
- Fix a regression test message interoperability where list of messages was not displayed correctly in the UI
- This was caused by MessageHandler changes in version 3.5.1
- Minor fixes for remote migration support
[3.5.2] - 2025-08-01
Added
- Remote migration support, allowing importing Python IOP modules into IRIS through
http
[3.5.1] - 2025-07-22
Added
- New IOP.Wrapper class for simplified python module import into IRIS with remote debugging support and traceback handling
Changed
- Improve module loading and initialization for better performance in BusinessProcess by checking if the module is already loaded
- Change OnMessage to MessageHandler in BusinessOperation for better performance and clarity
[3.5.0] - 2025-06-30
Added
- Initial support for venv
- New
send_generator_requestmethod iniopmodule to send generator requests - Add
get_iris_idmethod toMessage*classes to retrieve the IRIS ID of a message
Fixed
- Fix
iris.*function dispatch mapping
[3.4.4] - 2025-06-13
Added
Changed
%tracebacksetting default value is nowTrueto show traceback in message log- serializer is now more permissive for iris objects, allowing iris object type of
%Streamto support http inbound/outbound adapters - remove usage of
pkg_resourcesin favor ofimportlib.resources - refactor import statements for better clarity and organization
Fixed
- fix typing issues in python code
- fix long string attribute from production settings ( greater than 255 characters )
[3.4.3] - 2025-05-26
Fixed
- Fix a regression in DTL to display sub-objects
- Improve upgrade compatibility with 3.4.0 (pre-debugger)
Changed
- Change debugger settings to be prefixed with
%to avoid conflict with other settings
Added
- Add
%tracebacksetting to enable or disable traceback in message log
[3.4.2] - 2025-05-2
Fixed
- Fix regression in version 3.4.0 and 3.4.1 where production settings were not properly loaded
[3.4.1] - 2025-04-30
Added
- Add namespace selection in the
iopcommand -nor--namespaceoption to select a namespace- Initial remote debugging support
Changed
- Change how
irismodule is loaded - Create a new
_irismodule in theioppackage - Remove dependency on community driver
- Use
irismodule instead
Fixed
- Fix dataclass message serialization
- Go back to best effort serialization : type check is not forced
- For checking use PydanticMessage
- Logger now uses the correct level for
debug,infoand similar methods
[3.4.0] - 2025-03-24
Added
- Support for production settings configuration and management
- Enhanced Python logging integration with IRIS
- Support for schema registration with PydanticMessage
- Improved Pydantic integration for message validation
- Logger property in _Common class for better logging management
Changed
- Refactored _director and _utils modules
- Enhanced serialization module
- Simplified type conversion
- Improved Pydantic integration
- Removed deprecated methods
- Remove dacite and dc-schema dependencies in favor of Pydantic
- Improved logging mechanism
- Encapsulated console logging behavior
- Enhanced logger initialization
- Updated pytest configuration for asyncio
Fixed
- Fixed log handling in Command class
- Improved error handling in OnGetConnections method
[3.3.0] - 2025-01-25
Added
- Support of Pydantic message validation and serialization
- Enhanced Python logging integration with LogManager
- New test framework with pytest-asyncio support
- Improved error handling and validation
Changed
- Refactored core components for better maintainability
- Enhanced message serialization system
- Improved production settings handling
Fixed
- Various log handling issues
- Message validation edge cases
[3.2.0] - 2025-01-15
Added
- DTL (Data Transformation Layer) with JSON Schema support
- Complex JSON transformation capabilities
- Enhanced documentation for DTL features
- JsonPath support for data manipulation
- Comprehensive schema validation system
Changed
- Improved message transformation handling
- Enhanced error reporting for schema validation
- Refactored transformation engine
Fixed
- JSON Schema processing issues
- Array handling in transformations
- Various DTL edge cases
[3.1.0] - 2024-07-26
Added
- Async function support in Business Processes and Operations
- Multi-sync call capabilities
- Enhanced trace logging options
- New benchmarking tools
- Improved session handling
Changed
- Refactored business host dispatch system
- Enhanced message serialization
- Improved async request handling
Fixed
- Retro-compatibility with grongier.pex
- Session management issues
- Various async operation bugs
[3.0.0] - 2024-07-08
Changed
- Renamed package from grongier.pex to iop
- Major refactoring of core components
- Improved package structure
- Enhanced documentation
Added
- New installation methods
- Better package management
- Improved error handling
[2.3.24] - 2024-03-08
Added
- Dev mode support for WSGI applications
- Experimental iris module features
- Sugar syntax for common operations
- Enhanced intellisense support
- Improved WSGI configuration options
Fixed
- PyPI version synchronization
- WSGI handling issues
- Device redirection in WSGI
[2.3.20] - 2023-12-13
Fixed
- Fix upgrade version issues
[2.3.19] - 2023-12-12
Added
- Support for OnGetConnections and on_get_connections to show connections between components in interoperability UI
[2.3.18] - 2023-12-11
Fixed
- Named argument not serialized for send_request_sync and send_request_async
[2.3.17] - 2023-11-24
Added
- Support relative path for migration
[2.3.16] - 2023-10-30
Added
- Support of Japanese characters
- New command line options
- Logs number of line
- Start production async
[2.3.12] - 2023-10-04
Added
- New command line option test
Changed
- Refactored some code
Fixed
- Various minor fixes
[2.3.8] - 2023-07-13
Fixed
- iop --init command
- cls compilation with zpm
[2.3.7] - 2023-07-07
Fixed
- Source dir and package for zpm
[2.3.6] - 2023-07-07
Fixed
- ZPM installation
[2.3.5] - 2023-07-05
Added
- Initial WSGI support
- Settings.py support
Changed
- Aligned version with pypi
[2.3.0] - 2023-05-31
Added
- Command line support
- Settings.py files support
[2.2.0] - 2023-05-19
Added
- Manager support for production management
- Settings.py class support for component and production configuration
- Director support for production control and logging
[2.1.0] - 2023-04-21
Added
- Support for Python 3.6 (RedHat 8.x)
- Deployment with PyPi
Fixed
- Files and folders named with "_"
- Stronger check on Message
[2.0.0] - 2023-03-15
Added
- Iop command line