Events

pynetdicom uses an event-handler system to give the user access to the data exchanged between different services within an AE as well as the PDUs and data sent between the local and peer AEs. Two different types of events are used: notification events and intervention events. Events are imported using from pynetdicom import evt

Notification Events

Notification events are those events where bound event handlers don’t need to return or yield anything (i.e. the user is notified some event has occurred). Each notification event can have multiple handlers bound to it and any exceptions raised by the handlers are caught and the exception message logged instead. The table below lists the available notification events.

Event Description
evt.EVT_ABORTED Association aborted
evt.EVT_ACCEPTED Association accepted
evt.EVT_ACSE_RECV ACSE received a primitive from the DUL service provider
evt.EVT_ACSE_SENT ACSE sent a primitive to the DUL service provider
evt.EVT_CONN_CLOSE Connection with remote closed
evt.EVT_CONN_OPEN Connection with remote opened
evt.EVT_DATA_RECV Data received from the peer AE
evt.EVT_DATA_SENT Data sent to the peer AE
evt.EVT_DIMSE_RECV DIMSE service received and decoded a message
evt.EVT_DIMSE_SENT DIMSE service encoded and sent a message
evt.EVT_ESTABLISHED Association established
evt.EVT_FSM_TRANSITION State machine transitioning
evt.EVT_PDU_RECV PDU received from the peer AE
evt.EVT_PDU_SENT PDU sent to the peer AE
evt.EVT_REJECTED Association rejected
evt.EVT_RELEASED Association released
evt.EVT_REQUESTED Association requested

By default a number of notification handlers are bound for logging purposes. If you wish to remove these then you can do the following before creating any associations:

from pynetdicom import _config

# Don't bind any of the default notification handlers
_config.LOG_HANDLER_LEVEL = 'none'

Intervention Events

Intervention events are those events where the bound event handler must return or yield certain expected values so that pynetdicom can complete an action (i.e. user intervention is required). Each intervention event has only a single handler bound to it at all times. If the user hasn’t bound their own handler then a default will be used, which usually returns a negative response (i.e. service request failed, or extended negotiation ignored). The sole exception is the default handler for evt.EVT_C_ECHO which returns an 0x0000 Success status. The table below lists the possible intervention events.

Event Description  
Association request includes extended negotiation items
evt.EVT_ASYNC_OPS Association request includes Asynchronous Operations Window negotiation item Handler documentation
evt.EVT_SOP_COMMON Association request includes SOP Class Common Extended negotiation item(s) Handler documentation
evt.EVT_SOP_EXTENDED Association request includes SOP Class Extended negotiation item(s) Handler documentation
evt.EVT_USER_ID Association request includes User Identity negotiation item Handler documentation
Service class received a DIMSE service request
evt.EVT_C_ECHO Service class received C-ECHO request Handler documentation
evt.EVT_C_FIND Service class received C-FIND request Handler documentation
evt.EVT_C_GET Service class received C-GET request Handler documentation
evt.EVT_C_MOVE Service class received C-MOVE request Handler documentation
evt.EVT_C_STORE Service class received C-STORE request Handler documentation
evt.EVT_N_ACTION Service class received N-ACTION request Handler documentation
evt.EVT_N_CREATE Service class received N-CREATE request Handler documentation
evt.EVT_N_DELETE Service class received N-DELETE request Handler documentation
evt.EVT_N_EVENT_REPORT Service class received N-EVENT-REPORT request Handler documentation
evt.EVT_N_GET Service class received N-GET request Handler documentation
evt.EVT_N_SET Service class received N-SET request Handler documentation

Event Handlers

Event handlers are callable functions bound to an event that get passed a single parameter, event, which is an Event instance. All Event instances come with at least three attributes:

  • Event.assoc - the Association in which the event occurred
  • Event.event - the corresponding event, as a python namedtuple
  • Event.timestamp - the date and time the event occurred at, as a python datetime

Additional attributes and properties are available depending on the event type, see the handler implementation documentation for more information.

Handlers can be bound to events through the bind(event, handler) methods in the Association and AssociationServer classes or by using the evt_handlers keyword argument to AE.associate() and AE.start_server(). Handlers can be unbound with the unbind(event, handler) methods in the Association and AssociationServer classes. See the Association guide for more details.