pynetdicom._handlers.doc_handle_move

pynetdicom._handlers.doc_handle_move(event: Event, *args: Sequence[Any]) Iterator[Tuple[str, int] | Tuple[str, int, Dict[str, Any]] | int | Dataset | None][source]

Documentation for handlers bound to evt.EVT_C_MOVE.

User implementation of this event handler is required if one or more services that use C-MOVE are to be supported. If a handler is not implemented and bound to evt.EVT_C_MOVE then the C-MOVE request will be responded to using a Status value of 0xC511 - Failure.

The first yield should be the (addr, port) of the move destination, however you may instead yield (addr, port, kwargs), where kwargs is a dict containing keyword parameters that will be passed to AE.associate(). This allows you to customise the presentation contexts requested by the association with the Storage SCP via the contexts keyword parameter.

The second yield should be the number of required C-STORE sub-operations as an int, and the remaining yields the (status, dataset) pairs.

Matching SOP Instances will be sent to the move destination Storage SCP over a new association. If the move destination is unknown then the SCP will send a response with a ‘Failure’ status of 0xA801 ‘Move Destination Unknown’.

Changed in version 1.5: Added the ability to yield either (addr, port) or (addr, port, kwargs)

Event

evt.EVT_C_MOVE

Supported Service Classes

Status

Success
0x0000 - Sub-operations complete, no failures
Pending
0xFF00 - Sub-operations are continuing
Cancel
0xFE00 - Sub-operations terminated due to Cancel indication
Failure
0x0122 - SOP class not supported
0x0124 - Not authorised
0x0210 - Duplicate invocation
0x0211 - Unrecognised operation
0x0212 - Mistyped argument
0xA701 - Out of resources: unable to calculate number of matches
0xA702 - Out of resources: unable to perform sub-operations
0xA801 - Move destination unknown
0xA900 - Identifier does not match SOP class
0xAA00 - None of the frames requested were found in the SOP instance
0xAA01 - Unable to create new object for this SOP class
0xAA02 - Unable to extract frames
0xAA03 - Time-based request received for a non-time-based original SOP Instance
0xAA04 - Invalid request
0xC000 to 0xCFFF - Unable to process
Parameters:
  • event (events.Event) –

    The event representing a service class receiving a C-MOVE request message. Event attributes are:

    Event properties are:

    • identifier: the decoded Dataset contained within the C-MOVE request’s Identifier parameter. Because pydicom uses a deferred read when decoding data, if the decode fails the returned Dataset will only raise an exception at the time of use.

    • is_cancelled: returns True if a C-CANCEL request has been received, False otherwise. If a C-CANCEL is received then the handler should yield a (0xFE00, None) status/dataset pair and return.

    • message_id: the C-MOVE request’s Message ID as int.

    • move_destination: the C-MOVE request’s Move Destination value as str.

  • args – If the handler was bound to the event using bind(event, handler, args) or by passing evt_handlers=[(event, handler, args), ...], where args is a list then there will be one or more optional extra parameters matching the contents of args.

Yields:
  • addr, port or addr, port, kwargs (str, int, (dict) or None, None, (None)) – The first yield should be the (TCP/IP address, port number) of the destination AE (if known) or (None, None) if unknown. If (None, None) is yielded then the SCP will send a C-MOVE response with a ‘Failure’ Status of 0xA801 (move destination unknown), in which case nothing more needs to be yielded. You may instead yield (addr, port, kwargs), where kwargs is a dict containing keyword parameters to pass to AE.associate() when the new association with the Storage SCP is initiated.

  • int – The second yield should be the number of C-STORE sub-operations required to complete the C-MOVE operation. In other words, this is the number of matching SOP Instances to be sent to the peer.

  • status (pydicom.dataset.Dataset or int) – The status returned to the peer AE in the C-MOVE response. Must be a valid C-MOVE status value for the applicable Service Class as either an int or a Dataset containing (at a minimum) a (0000,0900) Status element. If returning a Dataset then it may also contain optional elements related to the Status (as in DICOM Standard, Part 7, Annex C).

  • dataset (pydicom.dataset.Dataset or None) – If the status is ‘Pending’ then yield the Dataset to send to the peer via a C-STORE sub-operation over a new association.

    If the status is ‘Failed’, ‘Warning’ or ‘Cancel’ then yield a Dataset with a (0008,0058) Failed SOP Instance UID List element containing the list of the C-STORE sub-operation SOP Instance UIDs for which the C-MOVE operation has failed.

    If the status is ‘Success’ then yield None, although yielding a final ‘Success’ status is not required and will be ignored if necessary.

References