Example #1
0
    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)
Example #2
0
 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)
Example #4
0
    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)
Example #5
0
    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
Example #6
0
#!/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)