An Orthanc python plugin based framework to extend Orthanc's feature set with testable Python scripts
Project description
Orthanc Server Extensions
A simple Orthanc python plugin based event processing framework to extend Orthanc’s feature set. It focuses on integration and orchestration, like study routing, event notifications and audit logging.
Free software: GNU Affero General Public License v3
Documentation: https://orthanc-server-extensions.readthedocs.io.
Features
easily plug event handling scripts for all Orthanc’s change events -
chain functions into a pipeline (composition)
run asyncio functions (coroutines) for concurrent processing of a change event
run (integration) tests for your Orthanc python scripts
publish events to Kafka, RabbitMQ and NATS
Modules
auto_retries: retry failed jobs
auto_forward: forward DICOM to external systems based on python match functions
anonymization: anonymize DICOM Series using the Orthanc API
Why this library was written
Improve developer happiness: the development roundtrip is just a little bit long to build, run and test a function, even with Docker. With this library, you can start from the unit tests, move to integration tests, and then deploy the result in the Docker image.
Enable testability: the Orthanc API is provided as a module which is not easy to mock in a clean way. Orthanc server extensions provide a few simple abstractions that keep functions clean and independently testable.
Improve performance: async functions will be executed concurrently, which is advantageous if the processing is I/O bound.
Httpx was chosen as a base library to access the Orthanc API, rather than orthanc.RestApi*, because it is well known, developer friendly, and external API access avoids deadlocks in the Python plugin (before this was solved in 3.1).
Running
entry_point.py provides the first boilerplate to get started. Run it by issuing docker-compose up --build; you should be greeted with ‘orthanc started event handled!’ message, which is also published to
Developing
Write your event handling scripts and register them in event_dispatcher.register_event_handlers(). Examples, including the use of async functions and function composition (pipeline), can be found in tests/test_event_dispatcher.py.
Credits
This project would obviously not exist without Orthanc, its documentation and its community.
This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.
History
3.5.0 (2023-10-12)
Support pyOrthanc as Orthanc API client
3.4.0 (2023-06-21)
Improved asyncio performance
3.3.0 (2023-01-30)
Publish Orthanc change events to Kafka, RabbitMQ and NATS
Run asyncio functions (coroutines) for concurrent processing of a change event
Chain functions into a pipeline (composition)
3.2.8 (2021-09-18)
get_metadata_of_first_instance_of_series() now propagates http errors if /instances call fails.
3.2.7 (2021-09-17)
Small resilience fix for httpx (more conservative timeouts)
get_metadata_of_first_instance_of_series() will now return None for unknown keys
3.2.6 (2021-09-16)
Replace requests/responses library by httpx/respx
Add support for anonymization and re-identification using study merge
Many smaller and bigger refactorings
Dependency updates
3.1.1 (2021-02-11)
Add DICOM auto forwarding sample with retries
3.1.0 (2021-02-07)
Improved logging, aligned log format and levels with Orthanc.
0.1.0 (2021-01-09)
First release on PyPI.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Hashes for orthanc-server-extensions-3.5.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | ba2bc458b2659892492657ffb825fd83e740eac53c2e5f7c9b03dfbe0c89a677 |
|
MD5 | d0e7fa5c8f843d2e1efa5681aac16a43 |
|
BLAKE2b-256 | 31cc475d1667b810bc66fdb3f0688fea17fdbe1bcc04a40f9b478baf23c6c863 |