Release Notes¶
1.4.0¶
Fixes¶
Fixed Query Retrieve service class not responded with
0x0000(Success) if no matches were yielded by the C-FIND request handler.Fixed association being aborted due to failure to decode a rejected presentation context when the transfer syntax value is empty (#342)
Checkpoint added to the reactor in
Associationto prevent possible race conditions:When acting as the Acceptor and calling one of the
Association.send_*()methods.During an A-RELEASE collision.
Enhancements¶
Added
Event.move_destination(forevt.EVT_C_MOVE),Event.action_type(forevt.EVT_N_ACTION),Event.event_type(forevt.EVT_N_EVENT_REPORT) andEvent.eventproperties (#353)Added
meta_uidkeyword parameters to theAssociation.send_n_*()methods to allow the use of Meta SOP Classes (such as those used in the Print Management service class)Added Basic Grayscale Print Management Meta SOP Class and Basic Color Print Management Meta SOP Class to
sop_class.Added support for the following service classes:
Protocol Approval Query Retrieve (#327)
Application Event Logging
Instance Availability Notification
Media Creation Management
Print Management
Unified Procedure Step
RT Machine Verification
Storage Commitment
Added handling of non-conformant Presentation Context AC (reject) PDUs which contain no Transfer Syntax Sub-item (#361)
ae_titleandcontextskeyword arguments added toAE.start_server()Invalid (0000,1030) Move Originator Application Entity Title values received in C-STORE service requests are now logged and ignored rather than raising an exception and aborting the association.
Improved handling of DIMSE service messages with empty element values.
Added handling for DIMSE service requests when acting as the association Requestor
Changes¶
The following have been removed as per planned deprecation:
AE.on_c_store(),AE.on_c_echo(),AE.on_c_find(),AE.on_c_get(),AE.on_c_move(),AE.on_n_get(),AE.on_async_ops_window(),AE.on_sop_class_common_extended(),AE.on_sop_class_extended(),AE.on_user_identity(),AE.on_association_accepted(),AE.on_association_rejected(),AE.on_association_released(),AE.on_association_aborted(),_config.DECODE_STORE_DATASETSDIMSEServiceProvider.on_send_dimse_message(),DIMSEServiceProvider.on_receive_dimse_message()
Association.send_c_find(),Association.send_c_get()andAssociation.send_c_move()now require a query_model parameter that is used to set the Affected SOP Class UID value. The parameter should pass a pydicom UID or UID string. Passing a key that corresponds to a given UID is deprecated and will be removed in v1.5. (#348)Event.nameandEvent.descriptionproperties removed, useEvent.event.nameandEvent.event.descriptioninstead.
1.3.1¶
1.3.0¶
Fixes¶
Exceptions raised during generator operation for C-GET and C-MOVE services now handled properly.
fsm.AA_4andfsm.AA_8now send A-P-ABORT to the service user rather than an A-ABORTFixed rejected contexts not being included in the Presentation Context Definition Results List when acting as the association Acceptor.
The Message ID values for C-MOVE and C-GET sub-operations now iterate instead of just re-using 1. (#315)
The default
loggingconfiguration no longer uses a non-NullHandler (#321)Fixed Unified Procedure Step’s SOP Class UID variable names
Fixed memory leak caused by keeping old
Associationthreads around after they died (#328)
Enhancements¶
Added event-handler system as a replacement for the callback system
Added events.py module with the defined events, Event class and event-related support functions.
Added _handlers.py module with standard logging handlers
Added
bind(),unbind(),get_handlers()andget_events()toAssociationandAssociationServerclasses.Add
assocproperties toDIMSEServiceProviderandACSEclasses
_config.ENFORCE_UID_CONFORMANCEadded which determines the level of conformance required for UIDs. IfTruethen all UIDs are required to meet the UID rules in the DICOM Standard, ifFalse(default) then UIDs only need to meet the length requirement. (#316, #322)Support added for Modality Performed Procedure Step Management - only with the event-handler system. (#56)
Changes¶
The following have been removed as per planned deprecation:
AE.start(),AE.stop(),AE.address,AE.bind_address,AE.local_socket,AE.portAssociation.send_c_cancel_find(),Association.send_c_cancel_get(),Association.send_c_cancel_move()
All callback related class methods are deprecated and will be removed in v1.4. Use the event-handler system instead.
_config.DECODE_STORE_DATASETSis deprecated and will be removed in v1.4. Use the event-handler system instead.DIMSEServiceProviderinit now takes theAssociationas its only parameter.dul,dimse_timeoutandmaximum_pdu_sizeproperties added instead.
1.2.0¶
Fixes¶
Fixed
network_timeoutnot working when acting as the association requestor and an A-ABORT not being sent when the timeout expired. (#286)Fixed changing
network_timeoutvalue not propagating to the actual timer.All DIMSE service requests should now properly abort the association if no response is received within the DIMSE timeout window and return/yield expected values. (#119)
Any outgoing primitives are now sent to the peer before incoming PDUs are processed (#120)
Fixed not setting requestor presentation context roles to False when only one role is specified during Role Selection negotiation. (#293)
Enhancements¶
Added
_configmodule and the ability to skip the dataset decoding step in C-STORE operations by setting_config.DECODE_STORE_DATASETSto False (#282)Consolidated and improved the robustness of the transport related code (#42):
Added
transportmoduleAdded
AssociationSocketclass that wraps a clientsocket.socketto provide integration with the Association state machine. In particular all receive and send operations should emit state machine event ‘Evt17’ when the connection is closed. (#204)Added
AssociationServer, andThreadedAssociationServerclasses to provide association acceptor services.fsm.AE_1is now properly implemented and state machine event ‘Evt2’ is now emitted in a non-trivial manner.Added
AE.start_server()which allows operation in both blocking and non-blocking modes.Added
AE.shutdown()which allows the user to shutdown all non-blocking association servers that may be running.Support for TLS added via the
tls_argskeyword parameter forAE.associate()andssl_contextkeyword parameter forAE.start_server()(#175, #71)It should now be possible to both request a C-MOVE operation and act as the destination for the request’s C-STORE sub-operations over a new association within the same AE instance by running a non-blocking Storage SCP. (#5, #181)
Received P-DATA primitives are now processed when received rather than when processing is requested.
Added
DIMSEServiceProvider.get_msg(),DIMSEServiceProvider.receive_primitive(),DIMSEServiceProvider.peek_msg()andDIMSEServiceProvider.msg_queueto be used with the new P-DATA processing.Time required to start an association improved significantly.
Implemented C-CANCEL support
Added
ServiceClass.is_cancelled()method to allow checking whether a C-CANCEL message corresponding to a message ID value has been received.Added ‘cancelled’ key to the
infoparameter passed toAE.on_c_get(),AE.on_c_find()andAE.on_c_move(). The corresponding value is a callable function (is_cancelled()) that takes a Message ID value and and returns True if a C-CANCEL message with a corresponding Message ID Being Responded To value has been received.
Added thread names (‘threadtype@timestamp’).
Added
build_role()to simplify creating SCP/SCU Role Selection Negotiation items.
Changes¶
AE.quit(),DIMSEMessage.ID,ACSE.is_released()andACSE.release_association()removed as per planned deprecation.AE.start()is deprecated and will be removed in v1.3, useAE.start_server()instead.AE.stop()is deprecated and will be removed in v1.3, useAE.shutdown()instead.The
AE.portproperty andportargument forAE()are deprecated and will be removed in v1.3. Use theaddressparameter forAE.start_server()and thebind_addresskeyword parameter forAE.associate()instead.The
AE.local_socketattribute is deprecated and will be removed in v1.3.The
AE.addressattribute is deprecated and will be removed in v1.3.The
AE.bind_addrattribute is deprecated and will be removed in v1.3. Use theaddressparameter forAE.start_server()and thebind_addresskeyword parameter forAE.associate()instead.Changed the default DIMSE timeout to 30 s.
Changed the default number of maximum associations to 10.
The
acse_timeoutparameter toACSE()andACSE.acse_timeoutattribute removed, theAssociation.acse_timeoutvalue is used instead.AE.active_associationschanged from an attribute to a property and returns a list of all the AE’s active Association threads.AE.associate()is now synchronous until association negotiation has completed or the connection closed (#108).Removed
DIMSEServiceProvider.receive_msg().Association.send_c_cancel_get(),send_c_cancel_find()andsend_c_cancel_move()are deprecated and will be removed in v1.3. UseAssociation.send_c_cancel()instead.Removed
AE.on_c_get_cancel(),AE.on_c_find_cancel(),AE.on_c_move_cancel().
1.1.0¶
Fixes¶
No longer using a list as the default value for the
transfer_syntaxkeyword argument inAE.add_requested_context(),AE.add_supported_context()andpresentation.build_context()Completely fixed handling a maximum PDU length of 0. (#193)
DIMSEMessagesubclass creation andDIMSEMessage.primitive_to_messageshould now be thread-safe (#137)Fixed A-RELEASE collision not being implemented correctly. (#269)
Fixed bugs in
fsm.AR_8andfsm.AA_7.Fixed DUL not handling the service user sending A-P-ABORT primitives. (#270)
Fixed the DUL endlessly waiting in State 13 if the remote didn’t close the connection and there was data still available to be read. (#272)
Enhancements¶
Changes¶
AE.quit()is deprecated and will be removed in v1.2. UseAE.stop()instead.DIMSEMessage.IDis deprecated and will be removed in v1.2. UseDIMSEMessage.context_idinstead.Added
_globals.pyfor frequently used global constants.utils.validate_ae_titlechanged to only return bytes for Python 3AE.require_calling_aetnow takes a list of AE titles (as bytes) rather than a single AE title. If set to a non-empty list then association requests will be rejected unless the value of the Calling AE Title parameter matches one of those in the list. If set to an empty list (default) then all associations will be accepted (unless rejected for other reasons). (#192)AE.require_called_aetshould now be set using a bool. If True then any association requests will be rejected unless the value of the Called AE Title parameter matchesAE.ae_title. If False (default) then no matching will be performed and all associations accepted (unless rejected for other reasons). (#184)ACSE.is_releasedis deprecated and will be removed in v1.2. UseACSE.is_release_requestedinstead.ACSE.release_associationis deprecated and will be removed in v1.2. UseACSE.negotiate_releaseinstead.The association acceptor no longer aborts an accepted association if there are no accepted presentation contexts. The association requestor still does.
Default ACSE timeout changed to 30 s and default network timeout to 60 s.
1.0.0¶
Fixes¶
Fixed upstream pydicom changes to AE elements breaking logging (#195)
Fixed typos in SOP class names, fix bad UID
Fixed SCP/SCU Role Negotiation requiring both SCP and SCU role values to be set (as association requestor)
Starting with v1.0.0, versioning should be consistent
Changes¶
applicationentitymodule renamedaeApplicationEntityinterface updatedRemoved the following:
AE.scu_supported_sop,AE.scp_supported_sop,AE.transfer_syntax,AE.presentation_contexts_scu,AE.presentation_contexts_scp.scu_sop_class,scp_sop_class,transfer_syntaxandbind_addrarguments removed fromAEinitialisation.Added
AE.bind_addrattribute to allow the user to specify the network adapter.Added
AE.add_supported_context(),AE.supported_contexts,AE.remove_supported_context()for adding and removing the presentation contexts supported as an SCP.Added
AE.add_requested_context(),AE.requested_contexts,AE.remove_requested_context()for adding and removing the presentation contexts requested as an SCU.
Removed
VerificationSOPClass,StorageSOPClassListandQueryRetrieveSOPClassList.Added
VerificationPresentationContexts,StoragePresentationContexts,QueryRetrievePresentationContextsandBasicWorklistManagmentPresentationContextsto replace themAdded
service_classmodule and moved the service class implementations fromsop_classtoservice_class.The three Query/Retrieve service class implementations (Find, Get, Move) have been consolidated into one.
BasicWorklistManagementServiceClassreimplemented separately from QR.SOPClassclass added tosop_classmodule and all SOP Class objects now inherit from it rather than the corresponding service class.utils.PresentationContextManagerremovedMaximumLengthNegotiationchanged toMaximumLengthNotificationImplementationClassUIDNegotiationchanged toImplementationClassUIDNotificationImplementationVersionNameNegotiationchanged toImplementationVersioNameNotificationSimplified
service_class.ServiceClassinterfaceACSErefactored to do more of the association negotiation work and to operate independently of the Association instance.Added
send_abort,send_ap_abort,send_reject,send_releasesend_request,send_acceptmethodsAdded
negotiate_associationmethodAdded
release_associationmethod
Added
association.ServiceUserclassAssociationrefactored to do less association negotiation work and to operate independently of the ACSE instance.Added
Association.requestorandAssociation.acceptorattributes which areServiceUserinstances that track the association requestor and acceptor.
Project named changed from pynetdicom3 to pynetdicom
Enhancements¶
Add
contextandinfoparameters to on_c_* callbacks (#45, #54, #65, #106)Added contribution, issue and PR guides (#66)
Added PEP8 conformant
PYNETDICOM_IMPLEMENTATION_VERSIONandPYNETDICOM_IMPLEMENTATION_UIDvariables. The old ones will be removed in v1.0Added
AE.implementation_version_nameandAE.implementation_class_uidattributes so user’s can specify the values used during association negotiation.Allow per-association presentation context requests (SCU)
Allow more than 128 supported presentation contexts (SCP)
Documentation added: user guide, examples, API reference (#1, #45, #49, #50)
Add support for QR Instance and Frame Level Retrieve
Add support for QR Composite Instance Root Retrieval
Add support for the Relevant Patient Information Query service
Add support for the Hanging Protocol QR service
Add support for the Substance Administration Query service
Add support for the Color Palette QR service
Add support for the Implant Template QR service
Add support for the Non-Patient Information Storage service
Add support for the Defined Procedure Protocol QR service
Add support for the Display System Management service
Add support for N-GET, N-SET, N-EVENT-REPORT, N-DELETE, N-ACTION, N-CREATE as SCU.
Add full support for SCP/SCU Role Selection Negotiation
Add support for SOP Class Extended Negotiation
Add support for Asynchronous Operations Window Negotiation, however pynetdicom does not support asynchronous operations.
Add support for User Identity Negotiation
Add support for SOP Class Common Extended Negotiation
Non-conformant (null trailing padded) UIDs in A-ASSOCIATE messages are now handled