Metadata-Version: 2.1
Name: orthanc-server-extensions
Version: 3.5.0
Summary: An Orthanc python plugin based framework to extend Orthanc's feature set with testable Python scripts 
Home-page: https://github.com/walkIT-nl/orthanc-server-extensions
Author: WalkIT
Author-email: code@walkit.nl
License: GNU Affero General Public License v3
Keywords: orthanc testing
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: GNU Affero General Public License v3
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Requires-Python: >=3.8
Provides-Extra: nats-event-publisher
Provides-Extra: kafka-event-publisher
Provides-Extra: rabbitmq-event-publisher
Provides-Extra: pyorthanc
License-File: LICENSE

=========================
Orthanc Server Extensions
=========================


.. image:: https://img.shields.io/pypi/v/orthanc-server-extensions.svg
        :target: https://pypi.python.org/pypi/orthanc-server-extensions

.. image:: https://travis-ci.com/walkIT-nl/orthanc-server-extensions.svg?branch=main
        :target: https://travis-ci.com/walkIT-nl/orthanc-server-extensions

.. image:: https://readthedocs.org/projects/orthanc-server-extensions/badge/?version=latest
        :target: https://orthanc-server-extensions.readthedocs.io/en/latest/?badge=latest
        :alt: Documentation Status

.. image:: https://github.com/walkIT-nl/orthanc-server-extensions/actions/workflows/main.yml/badge.svg
        :target: https://github.com/walkIT-nl/orthanc-server-extensions/actions/workflows/main.yml
        :alt: 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.


* 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.

.. _change events: https://book.orthanc-server.com/plugins/python.html#listening-to-changes).
.. _Cookiecutter: https://github.com/audreyr/cookiecutter
.. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage


=======
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.


