# Util

class tango.Util(args)
  This class is a used to store TANGO device server process data and to

    provide the user with a set of utilities method.

    This class is implemented using the singleton design pattern. Therefore a device server process can have only one instance of this class and its constructor is not public. Example:

        util = tango.Util.instance()
            print(util.get_host_name())

  add_Cpp_TgClass(device_class_name, tango_device_class_name)

    Register a new C++ tango class.

    If there is a shared library file called MotorClass.so which contains a MotorClass class and a _create_MotorClass_class method. Example:

        util.add_Cpp_TgClass('MotorClass', 'Motor')

    Note

    the parameter ‘device_class_name’ must match the shared library name.

    Deprecated since version 7.1.2: Use `tango.Util.add_class()` instead.

  add_TgClass(klass_device_class, klass_device, device_class_name=None)

    Register a new python tango class. Example:

        util.add_TgClass(MotorClass, Motor)
        util.add_TgClass(MotorClass, Motor, 'Motor') # equivalent to previous line

    Deprecated since version 7.1.2: Use `tango.Util.add_class()` instead.

  add_class(self, class<DeviceClass>, class<DeviceImpl>, language="python") → None

    Register a new tango class (‘python’ or ‘c++’).

    If language is ‘python’ then args must be the same as `tango.Util.add_TgClass()`. Otherwise, args should be the ones in `tango.Util.add_Cpp_TgClass()`. Example:

        util.add_class(MotorClass, Motor)
        util.add_class('CounterClass', 'Counter', language='c++')

    New in PyTango 7.1.2

  connect_db(self: tango._tango.Util) → None

    connect_db (self) -> `None`

    Connect the process to the TANGO database. If the connection to the database failed, a message is displayed on the screen and the process is aborted

    Parameters:

      None

    Return:

      None

  create_device(self, klass_name, device_name, alias=None, cb=None) → None

    Creates a new device of the given class in the database, creates a new DeviceImpl for it and calls init_device (just like it is done for existing devices when the DS starts up)

    An optional parameter callback is called AFTER the device is registered in the database and BEFORE the init_device for the newly created device is called

    Throws tango.DevFailed:

      - the device name exists already or

      - the given class is not registered for this DS.

      - the cb is not a callable

    New in PyTango 7.1.2

    Parameters:
      klass_name:

        (`str`) the device class name

      device_name:

        (`str`) the device name

      alias:

        (`str`) optional alias. Default value is None meaning do not create device alias

      cb:

        (`callable`) a callback that is called AFTER the device is registered in the database and BEFORE the init_device for the newly created device is called. Typically you may want to put device and/or attribute properties in the database here. The callback must receive a parameter device_name (str). Default value is None meaning no callback

    Return:

      None

  delete_device(self, klass_name, device_name) → None

    Deletes an existing device from the database and from this running server

    Throws tango.DevFailed:

      - the device name doesn’t exist in the database

      - the device name doesn’t exist in this DS.

    New in PyTango 7.1.2

    Parameters:
      klass_name:

        (`str`) the device class name

      device_name:

        (`str`) the device name

    Return:

      None

  fill_attr_polling_buffer(self, device, attribute_name, attr_history_stack) → None

    Fill attribute polling buffer with your own data. E.g.:

        def fill_history():
            util = Util.instance(False)
            # note is such case quality will ATTR_VALID, and time_stamp will be time.time()
            util.fill_attr_polling_buffer(device, attribute_name, TimedAttrData(my_new_value))

    or:

        def fill_history():
            util = Util.instance(False)

            data = TimedAttrData(value=my_new_value,
                                 quality=AttrQuality.ATTR_WARNING,
                                 w_value=my_new_w_value,
                                 time_stamp=my_time)

            util.fill_attr_polling_buffer(device, attribute_name, data)

    or:

        def fill_history():
            util = Util.instance(False)
            data = [TimedAttrData(my_new_value),
                    TimedAttrData(error=RuntimeError("Cannot read value")]

            util.fill_attr_polling_buffer(device, attribute_name, data)

    Parameters:

      - device (`tango.DeviceImpl`) – the device to fill attribute polling buffer

      - attribute_name (`str`) – name of the attribute to fill polling buffer

      - attr_history_stack (`tango.TimedAttrData` or list[`tango.TimedAttrData`]) – data to be inserted.

    Returns:

      None

    Raises:

      `tango.DevFailed`

    Added in version 10.1.0.

  fill_cmd_polling_buffer(self, device, command_name, attr_history_stack) → None

    Fill attribute polling buffer with your own data. E.g.:

        def fill_history():
            util = Util.instance(False)
            # note is such time_stamp will be set to time.time()
            util.fill_cmd_polling_buffer(device, command_name, TimedCmdData(my_new_value))

    or:

        def fill_history():
            util = Util.instance(False)

            data = TimedCmdData(value=my_new_value,
                                 time_stamp=my_time)

            util.fill_cmd_polling_buffer(device, command_name, data)

    or:

        def fill_history():
            util = Util.instance(False)
            data = [TimedCmdData(my_new_value),
                    TimedCmdData(error=RuntimeError("Cannot read value")]

            util.fill_cmd_polling_buffer(device, command_name, data)

    Parameters:

      - device (`tango.DeviceImpl`) – the device to fill command polling buffer

      - command_name (`str`) – name of the command to fill polling buffer

      - cmd_history_stack (`tango.TimedCmdData` or list[`tango.TimedCmdData`]) – data to be inserted

    Returns:

      None

    Raises:

      `tango.DevFailed`

    Added in version 10.1.0.

  get_class_list(self) → seq<DeviceClass>

    Returns a list of objects of inheriting from DeviceClass

    Parameters:

      None

    Return:

      (`seq`) a list of objects of inheriting from DeviceClass

  get_database(self: tango._tango.Util) → tango._tango.Database

    get_database (self) -> `Database`

    Get a reference to the TANGO database object

    Parameters:

      None

    Return:

      (`Database`) the database

    New in PyTango 7.0.0

  get_device_by_name(self: tango._tango.Util, dev_name: str) → object

    get_device_by_name (self, dev_name) -> `DeviceImpl`

    Get a device reference from its name

    Parameters:
      dev_name:

        (`str`) The TANGO device name

    Return:

      (`DeviceImpl`) The device reference

    New in PyTango 7.0.0

  get_device_ior(self: tango._tango.Util, device: tango._tango.DeviceImpl) → str

    get_device_ior (self, device) -> `str`

    Get the CORBA Interoperable Object Reference (IOR) associated with the device

    Parameters:

      device (`tango.LatestDeviceImpl`) – `tango.LatestDeviceImpl` device object

    Returns:

      the associated CORBA object reference

    Return type:

      str

  get_device_list(self: tango._tango.Util, arg0: str) → list

    get_device_list (self) -> sequence<`DeviceImpl`>

    Get device list from name. It is possible to use a wild card (‘*’) in the name parameter (e.g. “*”, “/tango/tangotest/n*”, …)

    Parameters:

      None

    Return:

      (sequence<`DeviceImpl`>) the list of device objects

    New in PyTango 7.0.0

  get_device_list_by_class(self: tango._tango.Util, class_name: str) → object

    get_device_list_by_class (self, class_name) -> sequence<`DeviceImpl`>

    Get the list of device references for a given TANGO class. Return the list of references for all devices served by one implementation of the TANGO device pattern implemented in the process.

    Parameters:
      class_name:

        (`str`) The TANGO device class name

    Return:

      (sequence<`DeviceImpl`>) The device reference list

    New in PyTango 7.0.0

  get_ds_exec_name(self: tango._tango.Util) → str

    get_ds_exec_name (self) -> `str`

    Get a COPY of the device server executable name.

    Parameters:

      None

    Return:

      (`str`) a COPY of the device server executable name.

    New in PyTango 3.0.4

  get_ds_inst_name(self: tango._tango.Util) → str

    get_ds_inst_name (self) -> `str`

    Get a COPY of the device server instance name.

    Parameters:

      None

    Return:

      (`str`) a COPY of the device server instance name.

    New in PyTango 3.0.4

  get_ds_name(self: tango._tango.Util) → str

    get_ds_name (self) -> `str`

    Get the device server name. The device server name is the <device server executable name>/<the device server instance name>

    Parameters:

      None

    Return:

      (`str`) device server name

    New in PyTango 3.0.4

  get_dserver_device(self: tango._tango.Util) → tango._tango.DServer

    get_dserver_device (self) -> `DServer`

    Get a reference to the dserver device attached to the device server process.

    Parameters:

      None

    Return:

      (`DServer`) the dserver device attached to the device server process

    New in PyTango 7.0.0

  get_dserver_ior(self: tango._tango.Util, device_server: tango._tango.DServer) → str

    get_dserver_ior (self, device_server) -> `str`

    Get the CORBA Interoperable Object Reference (IOR) associated with the device server

    Parameters:

      device_server (`DServer`) – `DServer` device object

    Returns:

      the associated CORBA object reference

    Return type:

      str

  get_host_name(self: tango._tango.Util) → str

    get_host_name (self) -> `str`

    Get the host name where the device server process is running.

    Parameters:

      None

    Return:

      (`str`) the host name where the device server process is running

    New in PyTango 3.0.4

  get_pid(self: tango._tango.Util) → int

    get_pid (self) -> `TangoSys_Pid`

    Get the device server process identifier.

    Parameters:

      None

    Return:

      (`int`) the device server process identifier

  get_pid_str(self: tango._tango.Util) → str

    get_pid_str (self) -> `str`

    Get the device server process identifier as a string.

    Parameters:

      None

    Return:

      (`str`) the device server process identifier as a string

    New in PyTango 3.0.4

  get_polling_threads_pool_size(self: tango._tango.Util) → int

    get_polling_threads_pool_size (self) -> `int`

    Get the polling threads pool size.

    Parameters:

      None

    Return:

      (`int`) the maximum number of threads in the polling threads pool

  get_serial_model(self: tango._tango.Util) → tango._tango.SerialModel

    get_serial_model (self) -> `SerialModel`

    Get the serialization model.

    Parameters:

      None

    Return:

      (`SerialModel`) the serialization model

  get_server_version(self: tango._tango.Util) → str

    get_server_version (self) -> `str`

    Get the device server version.

    Parameters:

      None

    Return:

      (`str`) the device server version.

  get_sub_dev_diag(self: tango._tango.Util) → tango._tango.SubDevDiag

    get_sub_dev_diag (self) -> `SubDevDiag`

    Get the internal sub device manager

    Parameters:

      None

    Return:

      (`SubDevDiag`) the sub device manager

    New in PyTango 7.0.0

  get_tango_lib_release(self: tango._tango.Util) → int

    get_tango_lib_release (self) -> `int`

    Get the TANGO library version number.

    Parameters:

      None

    Return:

      (`int`) The Tango library release number coded in 3 digits (for instance 550,551,552,600,….)

  get_trace_level(self: tango._tango.Util) → int

    get_trace_level (self) -> `int`

    Get the process trace level.

    Parameters:

      None

    Return:

      (`int`) the process trace level.

  get_version_str(self: tango._tango.Util) → str

    get_version_str (self) -> `str`

    Get the IDL TANGO version.

    Parameters:

      None

    Return:

      (`str`) the IDL TANGO version.

    New in PyTango 3.0.4

  static instance(*args, **kwargs)

    Overloaded function.

    1. instance() -> tango._tango.Util

    instance () -> `Util`

    Static method that gets the singleton object reference. If the class has not been initialised with it’s init method, this method prints a message and aborts the device server process.

    Returns:

      the tango `Util` object

    Return type:

      `Util`

    Raises:

      `DevFailed` instead of aborting if exit is set to False

    2. instance(exit: bool) -> tango._tango.Util

    instance (exit = True) -> `Util`

    Static method that gets the singleton object reference. If the class has not been initialised with it’s init method, this method prints a message and aborts the device server process.

    Parameters:

      exit (bool) – exit or throw DevFailed

    Returns:

      the tango `Util` object

    Return type:

      `Util`

    Raises:

      `DevFailed` instead of aborting if exit is set to False

  is_auto_alarm_on_change_event(self: tango._tango.Util) → bool

    is_auto_alarm_on_change_event (self) -> `bool`

    Returns True if alarm events are automatically pushed to subscribers when a device pushes a change event, and the attribute quality has changed to or from alarm.

    Can be configured in two ways:

    > - via the `CtrlSystem` free Tango database property `AutoAlarmOnChangeEvent` (set to true or false),

    > - by calling the `tango.Util.set_auto_alarm_on_change_event()`.

    Returns:

      True if alarm events are automatically pushed to subscribers when a device pushes a change event

    Return type:

      bool

    Added in version 10.0.0.

  is_device_restarting(self: tango._tango.Util, dev_name: str) → bool

    is_device_restarting (self, dev_name) -> `bool`

    Check if the device is actually restarted by the device server process admin device with its DevRestart command

    Parameters:

      dev_name : (str) device name

    Return:

      (`bool`) True if the device is restarting.

    New in PyTango 8.0.0

  is_svr_shutting_down(self: tango._tango.Util) → bool

    is_svr_shutting_down (self) -> `bool`

    Check if the device server process is in its shutting down sequence

    Parameters:

      None

    Return:

      (`bool`) True if the server is in its shutting down phase.

    New in PyTango 8.0.0

  is_svr_starting(self: tango._tango.Util) → bool

    is_svr_starting (self) -> `bool`

    Check if the device server process is in its starting phase

    Parameters:

      None

    Return:

      (`bool`) True if the server is in its starting phase

    New in PyTango 8.0.0

  orb_run(self: tango._tango.Util) → None

    orb_run (self) -> `None`

    Run the CORBA event loop directly (EXPERT FEATURE!)

    This method runs the CORBA event loop. It may be useful if the Util.server_run method needs to be bypassed. Normally, that method runs the CORBA event loop.

    Returns:

      None

    Return type:

      None

  reset_filedatabase(self: tango._tango.Util) → None

    reset_filedatabase (self) -> `None`

    Reread the file database.

    Parameters:

      None

    Return:

      None

  server_cleanup(self: tango._tango.Util) → None

    server_cleanup (self) -> `None`

    Release device server resources (EXPERT FEATURE!)

    This method cleans up the Tango device server and relinquishes all computer resources before the process exits. It is unnecessary to call this, unless Util.server_run has been bypassed.

  server_init(self: tango._tango.Util, with_window: bool = False) → None

    server_init (self, with_window = False) -> `None`

    Initialize all the device server pattern(s) embedded in a device server process.

    Parameters:
      with_window:

        (`bool`) default value is False

    Return:

      None

    Throws:

      `DevFailed` If the device pattern initialistaion failed

  server_run(self: tango._tango.Util) → None

    server_run (self) -> `None`

    Run the CORBA event loop. This method runs the CORBA event loop. For UNIX or Linux operating system, this method does not return. For Windows in a non-console mode, this method start a thread which enter the CORBA event loop.

    Parameters:

      None

    Return:

      None

  server_set_event_loop(self: tango._tango.Util, event_loop: object) → None

    server_set_event_loop (self, event_loop) -> `None`

    This method registers an event loop function in a Tango server. This function will be called by the process main thread in an infinite loop The process will not use the classical ORB blocking event loop. It is the user responsibility to code this function in a way that it implements some kind of blocking in order not to load the computer CPU. The following piece of code is an example of how you can use this feature:

        _LOOP_NB = 1
        def looping():
            global _LOOP_NB
            print "looping", _LOOP_NB
            time.sleep(0.1)
            _LOOP_NB += 1
            return _LOOP_NB > 100

    def main():

      util = tango.Util(sys.argv)

      # …

      U = tango.Util.instance() U.server_set_event_loop(looping) U.server_init() U.server_run()

    Parameters:

      None

    Return:

      None

    New in PyTango 8.1.0

  set_auto_alarm_on_change_event(self: tango._tango.Util, value: bool) → None

    set_auto_alarm_on_change_event (self, enabled) -> `None`

    Toggles if alarm events are automatically pushed - see `tango.Util.is_auto_alarm_on_change_event()`.

    This method takes priority over the value of the free property in the Tango database.

    Parameters:

      enabled (bool) – if True - the alarm event will be emitted with change event, if there is quality change to or from alarm

    Returns:

      None

    Return type:

      None

    Added in version 10.0.0.

  set_interceptors(self: tango._tango.Util, interceptors: tango._tango.Interceptors) → None
  set_polling_threads_pool_size(self: tango._tango.Util, thread_nb: SupportsInt) → None

    set_polling_threads_pool_size (self, thread_nb) -> `None`

    Set the polling threads pool size.

    Parameters:
      thread_nb:

        (`int`) the maximun number of threads in the polling threads pool

    Return:

      None

    New in PyTango 7.0.0

  set_serial_model(self: tango._tango.Util, ser: tango._tango.SerialModel) → None

    set_serial_model (self, ser) -> `None`

    Set the serialization model.

    Parameters:
      ser:

        (`SerialModel`) the new serialization model. The serialization model must be one of BY_DEVICE, BY_CLASS, BY_PROCESS or NO_SYNC

    Return:

      None

  set_server_version(self: tango._tango.Util, vers: str) → None

    set_server_version (self, vers) -> `None`

    Set the device server version.

    Parameters:
      vers:

        (`str`) the device server version

    Return:

      None

  set_trace_level(self: tango._tango.Util, level: SupportsInt) → None

    set_trace_level (self, level) -> `None`

    Set the process trace level.

    Parameters:
      level:

        (`int`) the new process level

    Return:

      None

  static set_use_db(arg0: bool) → None

    set_use_db (self) -> `None`

    Set the database use Tango::Util::_UseDb flag. Implemented for device server started without database usage.

    Use with extreme care!

  trigger_attr_polling(self: tango._tango.Util, dev: tango._tango.DeviceImpl, name: str) → None

    trigger_attr_polling (self, dev, name) -> `None`

    Trigger polling for polled attribute. This method send the order to the polling thread to poll one object registered with an update period defined as “externally triggerred”

    Parameters:
      dev:

        (`DeviceImpl`) the TANGO device

      name:

        (`str`) the attribute name which must be polled

    Return:

      None

  trigger_cmd_polling(self: tango._tango.Util, dev: tango._tango.DeviceImpl, name: str) → None

    trigger_cmd_polling (self, dev, name) -> `None`

    Trigger polling for polled command. This method send the order to the polling thread to poll one object registered with an update period defined as “externally triggerred”

    Parameters:
      dev:

        (`DeviceImpl`) the TANGO device

      name:

        (`str`) the command name which must be polled

    Return:

      None

    Throws:

      `DevFailed` If the call failed

  unregister_server(self: tango._tango.Util) → None

    unregister_server (self) -> `None`

    Unregister a device server process from the TANGO database. If the database call fails, a message is displayed on the screen and the process is aborted

    Parameters:

      None

    Return:

      None

    New in PyTango 7.0.0

class tango.SubDevDiag
  get_associated_device(self: tango._tango.SubDevDiag) → str

    Get the device name that is associated with the current thread of the device server

  get_sub_devices(self: tango._tango.SubDevDiag) → list[str]

    Read the list of sub devices for the device server The returned strings are formated as:

    ‘device_name sub_device_name’

    or

    sub_device_name

    when no associated device could be identified

  get_sub_devices_from_cache(self: tango._tango.SubDevDiag) → None

    Read the list of sub devices from the database cache. The cache is filled at server sart-up

  register_sub_device(self: tango._tango.SubDevDiag, dev_name: str, sub_dev_name: str) → None

    Register a sub device for an associated device in the list of sub devices of the device server

  remove_sub_devices(*args, **kwargs)

    Overloaded function.

    1. remove_sub_devices(self: tango._tango.SubDevDiag) -> None

    Remove all sub devices

    2. remove_sub_devices(self: tango._tango.SubDevDiag, dev_name: str) -> None

    Remove all sub devices for a device of the server

  set_associated_device(self: tango._tango.SubDevDiag, dev_name: str) → None

    Set the device name that should be associated to a thread in the device server

  store_sub_devices(self: tango._tango.SubDevDiag) → None

    Store the list of sub devices for the devices of the server. The sub device names are stored as a string array under the device property “sub_devices”. Sub device names without an associated device, will be stored under the name of the administration device.

    Database access will only happen when the list of sub devices was modified and when the list is different from the list read into the db_cache during the server startup