1.5.0

This will be the last release that supports Python 2, with fixes for serious bugs being available for a year after the release date.

Fixes

  • Fixed the AssociationServer not properly closing its sockets (#382)

  • Improved the robustness of determining the local IP address (#394)

  • Fixed not being able to set an Implementation Version Name of length 1 (#414)

  • Changed ImplantationPlanSRDocumentStorage to ImplantationPlanSRStorage to match the name from Part 6 of the DICOM Standard rather than Part 4.

  • Stopped the QR Move SCP from associating with the move destination when no sub-operations were required (#436)

  • Fixed a possible race condition during DIMSE message exchange (#435)

  • Fixed the association acceptor selecting the first matching proposed transfer syntax rather than the first matching supported transfer syntax during presentation context negotiation (#445)

  • Fixed incorrect Pending status value for Modality Worklist (#462)

  • Fixed an InvalidEventError due to two A-ABORT messages being sent. Issue is triggered when the DIMSE and network timeouts have the same value and both expire while sending a DIMSE request. (#460)

  • Fixed datasets encoding using Deflated Explicit VR Little Endian not transferring correctly (#482)

Enhancements

  • Added configuration option _config.USE_SHORT_DIMSE_AET so elements with a VR of AE in DIMSE messages are no longer padded to the maximum 16 characters. (#403)

  • When acting as the association Acceptor check that the user hasn’t sent an A-ABORT or A-ASSOCIATE-RJ before attempting association negotiation (#408)

  • Added message_id to Event for use when receiving a DIMSE service request

  • Added the well-known SOP Instances for the supported service classes to sop_class.

  • Added support for the DIMSE intervention event handlers aborting or releasing the association during service class operation.

  • Add new SOP classes up to 2019e version of the standard (#424)

  • Added AllStoragePresentationContexts which contains all of the Storage Service Class’ SOP Class UIDs rather than just the first 128 as in StoragePresentationContexts.

  • Updates and additions to the applications:

  • Apps can now be invoked from the command line with python -m pynetdicom [appname] [options], e.g. python -m pynetdicom echoscu 127.0.0.1 11112 -d

  • Added ability to pass optional extra arguments to event handlers by using (evt.EVT_NAME, handler, ['list', 'of', 'args']) (#447)

  • Added AE.make_server() (#453)

  • Added request_handler keyword parameter to AssociationServer (#453)

  • Added hook in AE for creating AssociationSocket objects (#455)

  • Added a customisable Status convenience class for comparing, returning and yielding status values (#454)

  • Added hook in RequestHandler for creating Association objects (#455)

  • Prefer an exact match when selecting a valid presentation context over a convertible one (#472)

  • Added configuration options _config.LOG_REQUEST_IDENTIFIERS and _config.LOG_RESPONSE_IDENTIFIERS for controlling whether or not the contents of C-FIND, C-GET and C-MOVE request and response Identifier datasets are logged

  • Added pretty_dataset() and pretty_element() functions for producing pretty string output from datasets and elements

  • When handling evt.EVT_C_MOVE, the handler function may optionally yield (addr, port, kwargs) as its first yield, where kwargs is a dict containing keyword parameters that will be passed to AE.associate() when the association with the Storage SCP is initiated.

Changes

Known Issues

  • TLS v1.3 (with OpenSSL 1.1.1 or higher) is not currently supported (#364)