def add_scp_scu_role(self, primitive): """Add SCP/SCU Role Selection to the A-ASSOCIATE primitive.""" contexts = [ build_context('1.2.840.10008.1.1'), build_context('1.2.840.10008.1.2'), build_context('1.2.840.10008.1.3'), build_context('1.2.840.10008.1.4'), ] for ii, cx in enumerate(contexts): cx.context_id = ii * 2 + 1 primitive.presentation_context_definition_list = contexts item = SCP_SCU_RoleSelectionNegotiation() item.sop_class_uid = '1.2.840.10008.1.2' item.scu_role = True item.scp_role = False primitive.user_information.append(item) item = SCP_SCU_RoleSelectionNegotiation() item.sop_class_uid = '1.2.840.10008.1.3' item.scu_role = False item.scp_role = True primitive.user_information.append(item) item = SCP_SCU_RoleSelectionNegotiation() item.sop_class_uid = '1.2.840.10008.1.4' item.scu_role = True item.scp_role = True primitive.user_information.append(item)
def test_scp_raises(self): """Test that ServiceClass.SCP raises exception""" service = ServiceClass(None) msg = (r"No service class has been implemented for the " r"SOP Class UID '1.2.3'") with pytest.raises(NotImplementedError, match=msg): service.SCP(None, build_context('1.2.3'))
def setup(self): self.ae = None _config.LOG_HANDLER_LEVEL = 'none' # Implicit VR Little Endian self.bytestream = BytesIO( # (0010,0010) PatientName # | tag | length | value b'\x10\x00\x10\x00\x09\x00\x00\x00' b'\x54\x45\x53\x54\x5E\x54\x65\x73\x74') self.context = build_context('1.2.840.10008.1.1', ImplicitVRLittleEndian)
def context(self): """Return a presentation context for the Instance. Returns ------- pynetdicom.presentation.PresentationContext Raises ------ ValueError If either of the *SOP Class UID* or *Transfer Syntax UID* is not available for the Instance. """ if None in [self.sop_class_uid, self.transfer_syntax_uid]: raise ValueError( "Cannot determine which presentation context is required for " "for the SOP Instance") return build_context(self.sop_class_uid, self.transfer_syntax_uid)
def setup(self): """Setup each test.""" self.acse = ACSE(5) # A-ASSOCIATE (request) primitive = A_ASSOCIATE() primitive.application_context_name = APPLICATION_CONTEXT_NAME # Calling AE Title is the source DICOM AE title primitive.calling_ae_title = b'ABCDEFGHIJKLMNOP' # Called AE Title is the destination DICOM AE title primitive.called_ae_title = b'1234567890123456' # The TCP/IP address of the source, pynetdicom includes port too primitive.calling_presentation_address = ('127.127.127.127', 111112) # The TCP/IP address of the destination, pynetdicom includes port too primitive.called_presentation_address = ('0.0.0.0', 0) # Proposed presentation contexts contexts = [ build_context('1.2.3.4.5.6', JPEGBaseline), build_context('1.2.840.10008.1.1') ] for ii, cx in enumerate(contexts): cx.context_id = ii * 2 + 1 primitive.presentation_context_definition_list = contexts item = MaximumLengthNotification() item.maximum_length_received = 0 primitive.user_information.append(item) item = ImplementationClassUIDNotification() item.implementation_class_uid = generate_uid(entropy_srcs=['lorem']) primitive.user_information.append(item) self.associate_rq = primitive # A-ASSOCIATE (accept) primitive = A_ASSOCIATE() primitive.application_context_name = APPLICATION_CONTEXT_NAME # Calling AE Title is the source DICOM AE title primitive.calling_ae_title = b'ABCDEFGHIJKLMNOP' # Called AE Title is the destination DICOM AE title primitive.called_ae_title = b'1234567890123456' # The TCP/IP address of the source, pynetdicom includes port too primitive.calling_presentation_address = ('127.127.127.127', 111112) # The TCP/IP address of the destination, pynetdicom includes port too primitive.called_presentation_address = ('0.0.0.0', 0) # Proposed presentation contexts contexts = [ build_context('1.2.3.4.5.6', JPEGBaseline), build_context('1.2.840.10008.1.1'), build_context('1.2.840.10008.1.1'), build_context('1.2.840.10008.1.1'), build_context('1.2.840.10008.1.1'), ] for ii, cx in enumerate(contexts): cx.context_id = ii * 2 + 1 cx.result = ii primitive.presentation_context_definition_results_list = contexts primitive.result = 0x00 item = MaximumLengthNotification() item.maximum_length_received = 0 primitive.user_information.append(item) item = ImplementationClassUIDNotification() item.implementation_class_uid = generate_uid(entropy_srcs=['lorem']) primitive.user_information.append(item) self.associate_ac = primitive
#!/usr/bin/env python3 # -*- coding: utf-8 -*- from pynetdicom.presentation import PresentationContext from pynetdicom import build_context cx = PresentationContext() cx.context_id = 1 # 1.2.840.10008.1.1 - Verification SOP Class # 1.2.840.10008.5.1.4.1.1 - CT Image Storage cx.abstract_syntax = '1.2.840.10008.1.1' # 1.2.840.10008.1.2 - Implicit VR Little Endian # 1.2.840.10008.1.2.4.50 - JPEG Baseline cx.transfer_syntax = ['1.2.840.10008.1.2', '1.2.840.10008.1.2.4.50'] print(cx) cx1 = build_context( '1.2.840.10008.1.1', ['1.2.840.10008.5.1.4.1.1.3.1'] ) print(cx1) cx2 = build_context('1.2.840.10008.1.1') print(cx2)