Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
self.dimse.send_msg(rsp, context.context_id)
# If not already done, send the final 'Success' or 'Warning' response
if not store_results[1] and not store_results[2]:
# Success response - no failures or warnings
LOGGER.info('Get SCP Result: (Success)')
rsp.Status = 0x0000
else:
# Warning response - one or more failures or warnings
LOGGER.info('Get SCP Result: (Warning)')
rsp.Status = 0xB000
# If Warning response, need to return an Identifier with
# (0008,0058) Failed SOP Instance UID List element
ds = Dataset()
ds.FailedSOPInstanceUIDList = failed_instances
bytestream = encode(ds,
transfer_syntax.is_implicit_VR,
transfer_syntax.is_little_endian)
rsp.Identifier = BytesIO(bytestream)
rsp.NumberOfRemainingSuboperations = None
rsp.NumberOfFailedSuboperations = store_results[1]
rsp.NumberOfWarningSuboperations = store_results[2]
rsp.NumberOfCompletedSuboperations = store_results[3]
self.dimse.send_msg(rsp, context.context_id)
# Check Status validity
# Validate rsp_status and set rsp.Status accordingly
rsp = self.validate_status(status, rsp)
if rsp.Status in self.statuses:
status = self.statuses[rsp.Status]
else:
# Unknown status
self.dimse.send_msg(rsp, context.context_id)
return
if status[0] in (STATUS_SUCCESS, STATUS_WARNING) and ds:
# If Success or Warning then there **may** be a dataset
transfer_syntax = context.transfer_syntax[0]
# If encode() fails then returns `None`
bytestream = encode(ds,
transfer_syntax.is_implicit_VR,
transfer_syntax.is_little_endian)
if bytestream is None:
LOGGER.error(
"Failed to encode the N-CREATE response's 'Attribute "
"List' dataset"
)
# Processing failure
rsp.Status = 0x0110
else:
rsp.AttributeList = BytesIO(bytestream)
# Send response primitive
self.dimse.send_msg(rsp, context.context_id)
bytestream = encode(dataset,
transfer_syntax.is_implicit_VR,
transfer_syntax.is_little_endian)
rsp.Identifier = BytesIO(bytestream)
self.dimse.send_msg(rsp, context.context_id)
return
elif status[0] == STATUS_SUCCESS:
# If user yields Success, check it
# dataset is None
if store_results[1] or store_results[2]:
LOGGER.info('Get SCP Response: (Warning)')
rsp.Status = 0xB000
ds = Dataset()
ds.FailedSOPInstanceUIDList = failed_instances
bytestream = encode(ds,
transfer_syntax.is_implicit_VR,
transfer_syntax.is_little_endian)
rsp.Identifier = BytesIO(bytestream)
else:
LOGGER.info('Get SCP Response: (Success)')
rsp.Identifier = None
rsp.NumberOfRemainingSuboperations = None
rsp.NumberOfFailedSuboperations = store_results[1]
rsp.NumberOfWarningSuboperations = store_results[2]
rsp.NumberOfCompletedSuboperations = store_results[3]
self.dimse.send_msg(rsp, context.context_id)
return
elif status[0] == STATUS_PENDING and dataset:
# If pending, dataset is the Dataset to send
self.dimse.send_msg(rsp, context.context_id)
return
elif status[0] == STATUS_FAILURE:
# If failed, then rsp_identifier is None
LOGGER.info('Find SCP Response: (Failure - %s)', status[1])
self.dimse.send_msg(rsp, context.context_id)
return
elif status[0] == STATUS_SUCCESS:
# User isn't supposed to send these, but handle anyway
# If success, then rsp_identifier is None
LOGGER.info('Find SCP Response: %s (Success)', ii + 1)
self.dimse.send_msg(rsp, context.context_id)
return
elif status[0] == STATUS_PENDING:
# If pending, the rsp_identifier is the Identifier dataset
bytestream = encode(rsp_identifier,
transfer_syntax.is_implicit_VR,
transfer_syntax.is_little_endian)
bytestream = BytesIO(bytestream)
if bytestream.getvalue() == b'':
LOGGER.error("Failed to encode the received Identifier "
"dataset")
# Failure: Unable to Process - Can't decode dataset
# returned by handler
rsp.Status = 0xC312
self.dimse.send_msg(rsp, context.context_id)
return
rsp.Identifier = bytestream
LOGGER.info('Find SCP Response: %s (Pending)', ii + 1)
# Validate rsp_status and set rsp.Status accordingly
rsp = self.validate_status(status, rsp)
if rsp.Status in self.statuses:
status = self.statuses[rsp.Status]
else:
# Unknown status
self.dimse.send_msg(rsp, context.context_id)
return
if status[0] in [STATUS_SUCCESS, STATUS_WARNING] and ds:
# If Success or Warning then there **may** be a dataset
transfer_syntax = context.transfer_syntax[0]
# If encode() fails then returns `None`
bytestream = encode(ds,
transfer_syntax.is_implicit_VR,
transfer_syntax.is_little_endian)
if bytestream is None:
LOGGER.error(
"Failed to encode the N-GET response's 'Attribute "
"List' dataset"
)
# Processing failure - Failed to encode dataset
rsp.Status = 0x0110
else:
rsp.AttributeList = BytesIO(bytestream)
self.dimse.send_msg(rsp, context.context_id)
# 'FailedSOPInstanceUIDList' element
LOGGER.info('Get SCP Result (%s - %s)', status[0], status[1])
rsp.NumberOfRemainingSuboperations = None
rsp.NumberOfFailedSuboperations = (
store_results[1] + store_results[0]
)
rsp.NumberOfWarningSuboperations = store_results[2]
rsp.NumberOfCompletedSuboperations = store_results[3]
# In case user didn't include it
if (not isinstance(dataset, Dataset) or
'FailedSOPInstanceUIDList' not in dataset):
dataset = Dataset()
dataset.FailedSOPInstanceUIDList = failed_instances
bytestream = encode(dataset,
transfer_syntax.is_implicit_VR,
transfer_syntax.is_little_endian)
rsp.Identifier = BytesIO(bytestream)
self.dimse.send_msg(rsp, context.context_id)
return
elif status[0] == STATUS_SUCCESS:
# If user yields Success, check it
# dataset is None
if store_results[1] or store_results[2]:
LOGGER.info('Get SCP Response: (Warning)')
rsp.Status = 0xB000
ds = Dataset()
ds.FailedSOPInstanceUIDList = failed_instances
bytestream = encode(ds,
transfer_syntax.is_implicit_VR,
transfer_syntax.is_little_endian)
# Check Status validity
# Validate rsp_status and set rsp.Status accordingly
rsp = self.validate_status(status, rsp)
if rsp.Status in self.statuses:
status = self.statuses[rsp.Status]
else:
# Unknown status
self.dimse.send_msg(rsp, context.context_id)
return
if status[0] in (STATUS_SUCCESS, STATUS_WARNING) and ds:
# If Success or Warning then there **may** be a dataset
transfer_syntax = context.transfer_syntax[0]
# If encode() fails then returns `None`
bytestream = encode(ds,
transfer_syntax.is_implicit_VR,
transfer_syntax.is_little_endian)
if bytestream is None:
LOGGER.error(
"Failed to encode the N-EVENT-REPORT response's 'Event "
"Reply' dataset"
)
# Processing failure
rsp.Status = 0x0110
else:
rsp.EventReply = BytesIO(bytestream)
# Send response primitive
self.dimse.send_msg(rsp, context.context_id)
rsp.NumberOfCompletedSuboperations = store_results[3]
self.dimse.send_msg(rsp, context.context_id)
return
elif status[0] == STATUS_SUCCESS:
# If Success, then dataset is None
store_assoc.release()
# If the user yields Success, check it
if store_results[1] or store_results[2]:
# Sub-operations contained failures/warnings
LOGGER.info('Move SCP Response: (Warning)')
ds = Dataset()
ds.FailedSOPInstanceUIDList = failed_instances
bytestream = encode(ds,
transfer_syntax.is_implicit_VR,
transfer_syntax.is_little_endian)
rsp.Identifier = BytesIO(bytestream)
rsp.Status = 0xB000
else:
# No failures or warnings
LOGGER.info('Move SCP Response: (Success)')
rsp.Identifier = None
rsp.NumberOfRemainingSuboperations = None
rsp.NumberOfFailedSuboperations = store_results[1]
rsp.NumberOfWarningSuboperations = store_results[2]
rsp.NumberOfCompletedSuboperations = store_results[3]
self.dimse.send_msg(rsp, context.context_id)
# Check Status validity
# Validate rsp_status and set rsp.Status accordingly
rsp = self.validate_status(status, rsp)
if rsp.Status in self.statuses:
status = self.statuses[rsp.Status]
else:
# Unknown status
self.dimse.send_msg(rsp, context.context_id)
return
if status[0] in (STATUS_SUCCESS, STATUS_WARNING) and ds:
# If Success or Warning then there **may** be a dataset
transfer_syntax = context.transfer_syntax[0]
# If encode() fails then returns `None`
bytestream = encode(ds,
transfer_syntax.is_implicit_VR,
transfer_syntax.is_little_endian)
if bytestream is None:
LOGGER.error(
"Failed to encode the N-ACTION response's 'Action Reply' "
"dataset"
)
# Processing failure
rsp.Status = 0x0110
else:
rsp.ActionReply = BytesIO(bytestream)
# Send response primitive
self.dimse.send_msg(rsp, context.context_id)
# Validate rsp_status and set rsp.Status accordingly
rsp = self.validate_status(status, rsp)
if rsp.Status in self.statuses:
status = self.statuses[rsp.Status]
else:
# Unknown status
self.dimse.send_msg(rsp, context.context_id)
return
if status[0] in (STATUS_SUCCESS, STATUS_WARNING) and ds:
# If Success or Warning then there **may** be a dataset
transfer_syntax = context.transfer_syntax[0]
# If encode() fails then returns `None`
bytestream = encode(ds,
transfer_syntax.is_implicit_VR,
transfer_syntax.is_little_endian)
if bytestream is None:
LOGGER.error(
"Failed to encode the N-SET response's 'Attribute "
"List' dataset"
)
# Processing failure
rsp.Status = 0x0110
else:
rsp.AttributeList = BytesIO(bytestream)
# Send response primitive
self.dimse.send_msg(rsp, context.context_id)