pynetdicom.dul.DULServiceProvider

class pynetdicom.dul.DULServiceProvider(socket=None, port=None, dul_timeout=None, assoc=None)[source][source]

The DICOM Upper Layer Service Provider.

Three ways to call DULServiceProvider:

  • If a port number is given, the DUL will wait for incoming connections on this port.
  • If a socket is given, the DUL will use this socket as the client socket.
  • If neither is given, the DUL will not be able to accept connections (but will be able to initiate them.)
artim_timer

The ARTIM timer

Type:timer.Timer
association

The DUL’s current Association

Type:association.Association
dul_from_user_queue

Queue of PDUs from the DUL service user to be processed by the DUL provider

Type:queue.Queue
dul_to_user_queue

Queue of primitives from the DUL service to be processed by the DUL user

Type:queue.Queue
event_queue

List of queued events to be processed by the state machine

Type:queue.Queue
scp_socket

If the local AE is acting as an SCP, this is the connection from the peer AE to the SCP

Type:socket.socket()
scu_socket

If the local AE is acting as an SCU, this is the connection from the local AE to the peer AE SCP

Type:socket.socket()
state_machine

The DICOM Upper Layer’s State Machine

Type:fsm.StateMachine
__init__(socket=None, port=None, dul_timeout=None, assoc=None)[source][source]
Parameters:
  • socket (socket.socket, optional) – The local AE’s listen socket
  • port (int, optional) – The port number on which to wait for incoming connections
  • dul_timeout (float, optional) – The maximum amount of time to wait for connection responses (in seconds)
  • assoc (association.Association) – The DUL’s current Association

Methods

__init__([socket, port, dul_timeout, assoc])
param socket:The local AE’s listen socket
getName()
idle_timer_expired() Checks if the idle timer has expired
isAlive() Return whether the thread is alive.
isDaemon()
is_alive() Return whether the thread is alive.
join([timeout]) Wait until the thread terminates.
kill_dul() Immediately interrupts the thread
on_receive_pdu() Called after the first byte of an incoming PDU is read.
peek_next_pdu() Check the next PDU to be processed.
receive_pdu([wait, timeout]) Get the next item to be processed out of the queue of items sent from the DUL service provider to the service user
run() The main threading.Thread run loop.
send_pdu(params)
param params -:The parameters to put on FromServiceUser [FIXME]
setDaemon(daemonic)
setName(name)
start() Start the thread’s activity.
stop_dul() Interrupts the thread if state is “Sta1”

Attributes

daemon A boolean value indicating whether this thread is a daemon thread.
ident Thread identifier of this thread or None if it has not been started.
name A string used for identification purposes only.
daemon

A boolean value indicating whether this thread is a daemon thread.

This must be set before start() is called, otherwise RuntimeError is raised. Its initial value is inherited from the creating thread; the main thread is not a daemon thread and therefore all threads created in the main thread default to daemon = False.

The entire Python program exits when no alive non-daemon threads are left.

ident

Thread identifier of this thread or None if it has not been started.

This is a nonzero integer. See the get_ident() function. Thread identifiers may be recycled when a thread exits and another thread is created. The identifier is available even after the thread has exited.

idle_timer_expired()[source][source]

Checks if the idle timer has expired

Returns:True if the idle timer has expired, False otherwise
Return type:bool
isAlive()[source]

Return whether the thread is alive.

This method returns True just before the run() method starts until just after the run() method terminates. The module function enumerate() returns a list of all alive threads.

is_alive()[source]

Return whether the thread is alive.

This method returns True just before the run() method starts until just after the run() method terminates. The module function enumerate() returns a list of all alive threads.

join(timeout=None)[source]

Wait until the thread terminates.

This blocks the calling thread until the thread whose join() method is called terminates – either normally or through an unhandled exception or until the optional timeout occurs.

When the timeout argument is present and not None, it should be a floating point number specifying a timeout for the operation in seconds (or fractions thereof). As join() always returns None, you must call isAlive() after join() to decide whether a timeout happened – if the thread is still alive, the join() call timed out.

When the timeout argument is not present or None, the operation will block until the thread terminates.

A thread can be join()ed many times.

join() raises a RuntimeError if an attempt is made to join the current thread as that would cause a deadlock. It is also an error to join() a thread before it has been started and attempts to do so raises the same exception.

kill_dul()[source][source]

Immediately interrupts the thread

name

A string used for identification purposes only.

It has no semantics. Multiple threads may be given the same name. The initial name is set by the constructor.

on_receive_pdu()[source][source]

Called after the first byte of an incoming PDU is read.

peek_next_pdu()[source][source]

Check the next PDU to be processed.

receive_pdu(wait=False, timeout=None)[source][source]

Get the next item to be processed out of the queue of items sent from the DUL service provider to the service user

Parameters:
  • wait (bool, optional) – If wait is True and timeout is None, blocks until an item is available. If timeout is a positive number, blocks at most timeout seconds. Otherwise returns an item if one is immediately available.
  • timeout (int or None) – See the definition of Wait
Returns:

  • queue_item – The next object in the to_user_queue [FIXME]
  • None – If the queue is empty

run()[source][source]

The main threading.Thread run loop. Runs constantly, checking the connection for incoming data. When incoming data is received it categorises it and add its to the to_user_queue.

Ripping out this loop and replacing it with event-driven reactor would
be nice.
send_pdu(params)[source][source]
Parameters:- (params) – The parameters to put on FromServiceUser [FIXME]
start()[source]

Start the thread’s activity.

It must be called at most once per thread object. It arranges for the object’s run() method to be invoked in a separate thread of control.

This method will raise a RuntimeError if called more than once on the same thread object.

stop_dul()[source][source]

Interrupts the thread if state is “Sta1”

Returns:True if Sta1, False otherwise
Return type:bool