Skip to main content

An Orthanc python plugin based framework to extend Orthanc's feature set with testable Python scripts

Project description

Orthanc Server Extensions

https://img.shields.io/pypi/v/orthanc-server-extensions.svg https://travis-ci.com/walkIT-nl/orthanc-server-extensions.svg?branch=main Documentation Status Build and test status

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.

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

orthanc-server-extensions-3.5.1.tar.gz (39.2 kB view details)

Uploaded Source

File details

Details for the file orthanc-server-extensions-3.5.1.tar.gz.

File metadata

File hashes

Hashes for orthanc-server-extensions-3.5.1.tar.gz
Algorithm Hash digest
SHA256 ba2bc458b2659892492657ffb825fd83e740eac53c2e5f7c9b03dfbe0c89a677
MD5 d0e7fa5c8f843d2e1efa5681aac16a43
BLAKE2b-256 31cc475d1667b810bc66fdb3f0688fea17fdbe1bcc04a40f9b478baf23c6c863

See more details on using hashes here.

Supported by

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