=========================
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.
Raw data
{
"_id": null,
"home_page": "https://github.com/walkIT-nl/orthanc-server-extensions",
"name": "orthanc-server-extensions",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": "",
"keywords": "orthanc testing",
"author": "WalkIT",
"author_email": "code@walkit.nl",
"download_url": "https://files.pythonhosted.org/packages/31/cc/475d1667b810bc66fdb3f0688fea17fdbe1bcc04a40f9b478baf23c6c863/orthanc-server-extensions-3.5.1.tar.gz",
"platform": null,
"description": "=========================\nOrthanc Server Extensions\n=========================\n\n\n.. image:: https://img.shields.io/pypi/v/orthanc-server-extensions.svg\n :target: https://pypi.python.org/pypi/orthanc-server-extensions\n\n.. image:: https://travis-ci.com/walkIT-nl/orthanc-server-extensions.svg?branch=main\n :target: https://travis-ci.com/walkIT-nl/orthanc-server-extensions\n\n.. image:: https://readthedocs.org/projects/orthanc-server-extensions/badge/?version=latest\n :target: https://orthanc-server-extensions.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\n.. image:: https://github.com/walkIT-nl/orthanc-server-extensions/actions/workflows/main.yml/badge.svg\n :target: https://github.com/walkIT-nl/orthanc-server-extensions/actions/workflows/main.yml\n :alt: Build and test status\n\nA simple Orthanc python plugin based event processing framework to extend Orthanc\u2019s feature set. It focuses on\nintegration and orchestration, like study routing, event notifications and audit logging.\n\n\n* Free software: GNU Affero General Public License v3\n* Documentation: https://orthanc-server-extensions.readthedocs.io.\n\n\nFeatures\n--------\n* easily plug event handling scripts for all Orthanc's `change events`_ -\n* chain functions into a pipeline (composition)\n* run asyncio functions (coroutines) for concurrent processing of a change event\n* run (integration) tests for your Orthanc python scripts\n* publish events to Kafka, RabbitMQ and NATS\n\nModules\n-------\n* auto_retries: retry failed jobs\n* auto_forward: forward DICOM to external systems based on python match functions\n* anonymization: anonymize DICOM Series using the Orthanc API\n\nWhy this library was written\n----------------------------\n\nImprove developer happiness: the development roundtrip is just a little bit long to build, run and test a function, even with Docker.\nWith this library, you can start from the unit tests, move to integration tests, and then deploy the result in the Docker image.\n\nEnable testability: the Orthanc API is provided as a module which is not easy to mock in a clean way.\nOrthanc server extensions provide a few simple abstractions that keep functions clean and independently testable.\n\nImprove performance: async functions will be executed concurrently, which is advantageous if the processing is I/O bound.\n\nHttpx was chosen as a base library to access the Orthanc API, rather than orthanc.RestApi*, because it is well known,\ndeveloper friendly, and external API access avoids deadlocks in the Python plugin (before this was solved in 3.1).\n\n\nRunning\n-------\n\n``entry_point.py`` provides the first boilerplate to get started. Run it by issuing\n``docker-compose up --build``; you should be greeted with 'orthanc started event handled!' message, which is also published to\n\nDeveloping\n----------\n\nWrite your event handling scripts and register them in ``event_dispatcher.register_event_handlers()``. Examples,\nincluding the use of async functions and function composition (pipeline), can be found in ``tests/test_event_dispatcher.py``.\n\n\nCredits\n-------\n\nThis project would obviously not exist without Orthanc, its documentation and its community.\n\nThis package was created with Cookiecutter_ and the `audreyr/cookiecutter-pypackage`_ project template.\n\n.. _change events: https://book.orthanc-server.com/plugins/python.html#listening-to-changes).\n.. _Cookiecutter: https://github.com/audreyr/cookiecutter\n.. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage\n\n\n=======\nHistory\n=======\n\n3.5.0 (2023-10-12)\n------------------\n* Support pyOrthanc as Orthanc API client\n\n3.4.0 (2023-06-21)\n------------------\n* Improved asyncio performance\n\n3.3.0 (2023-01-30)\n------------------\n* Publish Orthanc change events to Kafka, RabbitMQ and NATS\n* Run asyncio functions (coroutines) for concurrent processing of a change event\n* Chain functions into a pipeline (composition)\n\n3.2.8 (2021-09-18)\n------------------\n* get_metadata_of_first_instance_of_series() now propagates http errors if /instances call fails.\n\n3.2.7 (2021-09-17)\n------------------\n* Small resilience fix for httpx (more conservative timeouts)\n* get_metadata_of_first_instance_of_series() will now return None for unknown keys\n\n3.2.6 (2021-09-16)\n------------------\n\n* Replace requests/responses library by httpx/respx\n* Add support for anonymization and re-identification using study merge\n* Many smaller and bigger refactorings\n* Dependency updates\n\n3.1.1 (2021-02-11)\n------------------\n\n* Add DICOM auto forwarding sample with retries\n\n3.1.0 (2021-02-07)\n------------------\n\n* Improved logging, aligned log format and levels with Orthanc.\n\n0.1.0 (2021-01-09)\n------------------\n\n* First release on PyPI.\n\n\n",
"bugtrack_url": null,
"license": "GNU Affero General Public License v3",
"summary": "An Orthanc python plugin based framework to extend Orthanc's feature set with testable Python scripts",
"version": "3.5.1",
"project_urls": {
"Homepage": "https://github.com/walkIT-nl/orthanc-server-extensions"
},
"split_keywords": [
"orthanc",
"testing"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "31cc475d1667b810bc66fdb3f0688fea17fdbe1bcc04a40f9b478baf23c6c863",
"md5": "d0e7fa5c8f843d2e1efa5681aac16a43",
"sha256": "ba2bc458b2659892492657ffb825fd83e740eac53c2e5f7c9b03dfbe0c89a677"
},
"downloads": -1,
"filename": "orthanc-server-extensions-3.5.1.tar.gz",
"has_sig": false,
"md5_digest": "d0e7fa5c8f843d2e1efa5681aac16a43",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 39161,
"upload_time": "2024-01-09T19:01:39",
"upload_time_iso_8601": "2024-01-09T19:01:39.315756Z",
"url": "https://files.pythonhosted.org/packages/31/cc/475d1667b810bc66fdb3f0688fea17fdbe1bcc04a40f9b478baf23c6c863/orthanc-server-extensions-3.5.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-01-09 19:01:39",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "walkIT-nl",
"github_project": "orthanc-server-extensions",
"travis_ci": true,
"coveralls": false,
"github_actions": true,
"tox": true,
"lcname": "orthanc-server-extensions"
}