2.0.0

The major breaking changes with the version 2.0 release are:

  • Python 2 is no longer supported

  • SOP class variable names now use their new DICOM UID keywords (for example, VerificationSOPClass becomes simply Verification)

  • AE title values should be str rather than bytes and trailing padding spaces are stripped from the raw value during decoding.

Fixes

  • Fixed not processing multiple PDUs received when acting as the association requestor with SSL/TLS (#528)

  • Fixed not using the correct Move Originator Message ID when sending C-STORE-RQs when acting as a Move SCP (#541)

  • Fixed C-FIND, C-GET and C-MOVE SCPs sending the previous pending Identifier with the final success response (#571)

  • Fixed Composite Instance Retrieve Without Bulk Data Get SCPs not removing Overlay Data, Audio Sample Data and Curve Data bulk data elements (#608)

  • Fixed not sending a failure response if all C-GET or C-MOVE sub-operations failed when acting as an Query/Retrieve SCP (#577)

  • Fixed ServiceUser.requested_contexts and ServiceUser.supported_contexts not returning the expected contexts (#636)

  • Fixed qrscp –clean (#681, #682)

  • Fixed a memory leak when running AssociationServer due to old Association threads not being garbage collected (#669)

  • Fixed an exception in the state machine during association negotiation as the acceptor when an A-ABORT-RQ PDU is received before the initial A-ASSOCIATE-RQ has been processed (#721)

  • Fixed network timeouts not working as expected on Windows (#653)

Enhancements

  • Added the ability to pass a file path to a dataset to send_c_store() (#517)

  • Allow parsing of DIMSE command sets that contain elements with non-conformant VMs (#554)

  • Added a check when acting as a QR SCP that returns from the event handler if the association is aborted or released (#592)

  • Added AE.connection_timeout (#616)

  • Updated to meet the 2021e version of the DICOM Standard

  • Added type hints

  • Handle non-conformant A-ASSOCIATE (RJ) ‘Result’, ‘Source’ and ‘Diagnostic’ values during ACSE negotiation (#633)

  • Added query_model keyword parameter to send_c_cancel() to make sending a C-CANCEL request easier (#535)

  • Added the following configuration options:

  • The DUL reactor should be more performant when processing multiple successive events (#651)

  • Added Association.network_timeout_response to allow normal association release on network timeout expiry rather than an abort (#619)

Changes

  • Removed support for Python 2.7, 3.5 and 3.6, added it for Python 3.9 and 3.10

  • Minimum pydicom version is 2.2

  • The Failed SOP Instance UID List sent with the final C-GET/C-MOVE SCP failure or warning responses no longer includes the SOP Instance UIDs for sub-operations that return a warning status

  • SOP Class and Instance variable names changed to match the new UID keywords from the DICOM Standard. In particular VerificationSOPClass is now simply Verification

  • All AE titles and DIMSE elements with a VR of AE should be set using an ASCII str rather than bytes

  • The default bind address used when making association requests has been changed to ("127.0.0.1", 0) (#680)

  • DULServiceProvider.primitive and DULServiceProvider.pdu have been removed

  • AssociationSocket.connect now takes a T_CONNECT primitive