# Device

## DeviceImpl

class tango.LatestDeviceImpl

  Latest implementation of the TANGO device base class (alias for Device_5Impl).

  It inherits from CORBA classes where all the network layer is implemented.

  add_attribute(self, attr, r_meth=None, w_meth=None, is_allo_meth=None) → Attr

    > Add a new attribute to the device attribute list. Please, note that if you add an attribute to a device at device creation time, this attribute will be added to the device class attribute list. Therefore, all devices belonging to the same class created after this attribute addition will also have this attribute.

    Parameters
      attr

        (Attr or AttrData) the new attribute to be added to the list.

      r_meth

        (`callable`) the read method to be called on a read request

      w_meth

        (`callable`) the write method to be called on a write request (if attr is writable)

      is_allo_meth

        (`callable`) the method that is called to check if it is possible to access the attribute or not

    Return

      (`Attr`) the newly created attribute.

    Throws

      `DevFailed`

  add_command(self, cmd, level=TANGO::OPERATOR) → cmd

    Add a new command to the device command list.

    Parameters
      cmd

        the new command to be added to the list

      device_level

        Set this flag to true if the command must be added for only this device

    Return

      Command

    Throws

      `DevFailed`

  always_executed_hook(self) → None

    > Hook method. Default method to implement an action necessary on a device before any command is executed. This method can be redefined in sub-classes in case of the default behaviour does not fullfill the needs

    Parameters

      None

    Return

      None

    Throws

      `DevFailed` This method does not throw `exception` but a redefined method can.

  append_status(self, status, new_line=False) → None

    > Appends a string to the device status.

    Parameters

      status : (str) the string to be appened to the device status new_line : (bool) If true, appends a new line character before the string. Default is False

    Return

      None

  check_command_exists(self) → None

    > This method check that a command is supported by the device and does not need input value. The method throws an exception if the command is not defined or needs an input value

    Parameters
      cmd_name

        (`str`) the command name

    Return

      None

    Throws

      `DevFailed` API_IncompatibleCmdArgumentType, API_CommandNotFound

    New in PyTango 7.1.2

  debug_stream(self, msg, *args) → None

    > Sends the given message to the tango debug stream.

    > Since PyTango 7.1.3, the same can be achieved with:

    >     print(msg, file=self.log_debug)

    Parameters
      msg

        (`str`) the message to be sent to the debug stream

    Return

      None

  delete_device(self) → None

    > Delete the device.

    Parameters

      None

    Return

      None

  dev_state(self) → DevState

    > Get device state. Default method to get device state. The behaviour of this method depends on the device state. If the device state is ON or ALARM, it reads the attribute(s) with an alarm level defined, check if the read value is above/below the alarm and eventually change the state to ALARM, return the device state. For all th other device state, this method simply returns the state This method can be redefined in sub-classes in case of the default behaviour does not fullfill the needs.

    Parameters

      None

    Return

      (`DevState`) the device state

    Throws

      `DevFailed` - If it is necessary to read attribute(s) and a problem occurs during the reading

  dev_status(self) → str

    > Get device status. Default method to get device status. It returns the contents of the device dev_status field. If the device state is ALARM, alarm messages are added to the device status. This method can be redefined in sub-classes in case of the default behaviour does not fullfill the needs.

    Parameters

      None

    Return

      (`str`) the device status

    Throws

      `DevFailed` - If it is necessary to read attribute(s) and a problem occurs during the reading

  error_stream(self, msg, *args) → None

    > Sends the given message to the tango error stream.

    > Since PyTango 7.1.3, the same can be achieved with:

    >     print(msg, file=self.log_error)

    Parameters
      msg

        (`str`) the message to be sent to the error stream

    Return

      None

  fatal_stream(self, msg, *args) → None

    > Sends the given message to the tango fatal stream.

    > Since PyTango 7.1.3, the same can be achieved with:

    >     print(msg, file=self.log_fatal)

    Parameters
      msg

        (`str`) the message to be sent to the fatal stream

    Return

      None

  get_attr_min_poll_period(self) → seq<str>

    > Returns the min attribute poll period

    Parameters

      None

    Return

      (`seq`) the min attribute poll period

    New in PyTango 7.2.0

  get_attr_poll_ring_depth(self, attr_name) → int

    > Returns the attribute poll ring depth

    Parameters
      attr_name

        (`str`) the attribute name

    Return

      (`int`) the attribute poll ring depth

    New in PyTango 7.1.2

  get_attribute_poll_period(self, attr_name) → int

    > Returns the attribute polling period (ms) or 0 if the attribute is not polled.

    Parameters
      attr_name

        (`str`) attribute name

    Return

      (`int`) attribute polling period (ms) or 0 if it is not polled

    New in PyTango 8.0.0

  get_cmd_min_poll_period(self) → seq<str>

    > Returns the min command poll period

    Parameters

      None

    Return

      (`seq`) the min command poll period

    New in PyTango 7.2.0

  get_cmd_poll_ring_depth(self, cmd_name) → int

    > Returns the command poll ring depth

    Parameters
      cmd_name

        (`str`) the command name

    Return

      (`int`) the command poll ring depth

    New in PyTango 7.1.2

  get_command_poll_period(self, cmd_name) → int

    > Returns the command polling period (ms) or 0 if the command is not polled.

    Parameters
      cmd_name

        (`str`) command name

    Return

      (`int`) command polling period (ms) or 0 if it is not polled

    New in PyTango 8.0.0

  get_dev_idl_version(self) → int

    > Returns the IDL version

    Parameters

      None

    Return

      (`int`) the IDL version

    New in PyTango 7.1.2

  get_device_attr(self) → MultiAttribute

    > Get device multi attribute object.

    Parameters

      None

    Return

      (`MultiAttribute`) the device’s MultiAttribute object

  get_device_properties(self, ds_class=None) → None

    > Utility method that fetches all the device properties from the database and converts them into members of this DeviceImpl.

    Parameters
      ds_class

        (`DeviceClass`) the DeviceClass object. Optional. Default value is None meaning that the corresponding DeviceClass object for this DeviceImpl will be used

    Return

      None

    Throws

      `DevFailed`

  get_exported_flag(self) → bool

    > Returns the state of the exported flag

    Parameters

      None

    Return

      (`bool`) the state of the exported flag

    New in PyTango 7.1.2

  get_logger(self) → Logger

    > Returns the Logger object for this device

    Parameters

      None

    Return

      (`Logger`) the Logger object for this device

  get_min_poll_period(self) → int

    > Returns the min poll period

    Parameters

      None

    Return

      (`int`) the min poll period

    New in PyTango 7.2.0

  get_name(self)

    > Get a COPY of the device name.

    Parameters

      None

    Return

      (`str`) the device name

  get_non_auto_polled_attr(self) → sequence<str>

    > Returns a COPY of the list of non automatic polled attributes

    Parameters

      None

    Return

      (sequence<`str`>) a COPY of the list of non automatic polled attributes

    New in PyTango 7.1.2

  get_non_auto_polled_cmd(self) → sequence<str>

    > Returns a COPY of the list of non automatic polled commands

    Parameters

      None

    Return

      (sequence<`str`>) a COPY of the list of non automatic polled commands

    New in PyTango 7.1.2

  get_poll_old_factor(self) → int

    > Returns the poll old factor

    Parameters

      None

    Return

      (`int`) the poll old factor

    New in PyTango 7.1.2

  get_poll_ring_depth(self) → int

    > Returns the poll ring depth

    Parameters

      None

    Return

      (`int`) the poll ring depth

    New in PyTango 7.1.2

  get_polled_attr(self) → sequence<str>

    > Returns a COPY of the list of polled attributes

    Parameters

      None

    Return

      (sequence<`str`>) a COPY of the list of polled attributes

    New in PyTango 7.1.2

  get_polled_cmd(self) → sequence<str>

    > Returns a COPY of the list of polled commands

    Parameters

      None

    Return

      (sequence<`str`>) a COPY of the list of polled commands

    New in PyTango 7.1.2

  get_prev_state(self) → DevState

    > Get a COPY of the device’s previous state.

    Parameters

      None

    Return

      (`DevState`) the device’s previous state

  get_state(self) → DevState

    > Get a COPY of the device state.

    Parameters

      None

    Return

      (`DevState`) Current device state

  get_status(self) → str

    > Get a COPY of the device status.

    Parameters

      None

    Return

      (`str`) the device status

  info_stream(self, msg, *args) → None

    > Sends the given message to the tango info stream.

    > Since PyTango 7.1.3, the same can be achieved with:

    >     print(msg, file=self.log_info)

    Parameters
      msg

        (`str`) the message to be sent to the info stream

    Return

      None

  init_device(self) → None

    > Intialize the device.

    Parameters

      None

    Return

      None

  is_device_locked(self) → bool

    > Returns if this device is locked by a client

    Parameters

      None

    Return

      (`bool`) True if it is locked or False otherwise

    New in PyTango 7.1.2

  is_polled(self) → bool

    > Returns if it is polled

    Parameters

      None

    Return

      (`bool`) True if it is polled or False otherwise

    New in PyTango 7.1.2

  is_there_subscriber(self, att_name, event_type) → bool

    > Check if there is subscriber(s) listening for the event.

    > This method returns a boolean set to true if there are some subscriber(s) listening on the event specified by the two method arguments. Be aware that there is some delay (up to 600 sec) between this method returning false and the last subscriber unsubscription or crash…

    > The device interface change event is not supported by this method.

    Parameters
      att_name

        (`str`) the attribute name

      event_type (EventType)

        the event type

    Return

      True if there is at least one listener or False otherwise

  push_archive_event(self, attr_name) → None
  push_archive_event(self, attr_name, except) → None
  push_archive_event(self, attr_name, data, dim_x=1, dim_y=0) → None
  push_archive_event(self, attr_name, str_data, data) → None
  push_archive_event(self, attr_name, data, time_stamp, quality, dim_x=1, dim_y=0) → None
  push_archive_event(self, attr_name, str_data, data, time_stamp, quality) → None

    > Push an archive event for the given attribute name. The event is pushed to the notification daemon.

    Parameters
      attr_name

        (`str`) attribute name

      data

        the data to be sent as attribute event data. Data must be compatible with the attribute type and format. for SPECTRUM and IMAGE attributes, data can be any type of sequence of elements compatible with the attribute type

      str_data

        (`str`) special variation for DevEncoded data type. In this case ‘data’ must be a str or an object with the buffer interface.

      except

        (`DevFailed`) Instead of data, you may want to send an exception.

      dim_x

        (`int`) the attribute x length. Default value is 1

      dim_y

        (`int`) the attribute y length. Default value is 0

      time_stamp

        (`double`) the time stamp

      quality

        (`AttrQuality`) the attribute quality factor

    Throws

      `DevFailed` If the attribute data type is not coherent.

  push_att_conf_event(self, attr) → None

    > Push an attribute configuration event.

    Parameters

      (Attribute) the attribute for which the configuration event will be sent.

    Return

      None

    New in PyTango 7.2.1

  push_change_event(self, attr_name) → None
  push_change_event(self, attr_name, except) → None
  push_change_event(self, attr_name, data, dim_x=1, dim_y=0) → None
  push_change_event(self, attr_name, str_data, data) → None
  push_change_event(self, attr_name, data, time_stamp, quality, dim_x=1, dim_y=0) → None
  push_change_event(self, attr_name, str_data, data, time_stamp, quality) → None

    Push a change event for the given attribute name. The event is pushed to the notification daemon.

    Parameters
      attr_name

        (`str`) attribute name

      data

        the data to be sent as attribute event data. Data must be compatible with the attribute type and format. for SPECTRUM and IMAGE attributes, data can be any type of sequence of elements compatible with the attribute type

      str_data

        (`str`) special variation for DevEncoded data type. In this case ‘data’ must be a str or an object with the buffer interface.

      except

        (`DevFailed`) Instead of data, you may want to send an exception.

      dim_x

        (`int`) the attribute x length. Default value is 1

      dim_y

        (`int`) the attribute y length. Default value is 0

      time_stamp

        (`double`) the time stamp

      quality

        (`AttrQuality`) the attribute quality factor

    Throws

      `DevFailed` If the attribute data type is not coherent.

  push_data_ready_event(self, attr_name, counter=0) → None

    > Push a data ready event for the given attribute name. The event is pushed to the notification daemon.

    > The method needs only the attribue name and an optional “counter” which will be passed unchanged within the event

    Parameters
      attr_name

        (`str`) attribute name

      counter

        (`int`) the user counter

    Return

      None

    Throws

      `DevFailed` If the attribute name is unknown.

  push_event(self, attr_name, filt_names, filt_vals) → None
  push_event(self, attr_name, filt_names, filt_vals, data, dim_x=1, dim_y=0) → None
  push_event(self, attr_name, filt_names, filt_vals, str_data, data) → None
  push_event(self, attr_name, filt_names, filt_vals, data, time_stamp, quality, dim_x=1, dim_y=0) → None
  push_event(self, attr_name, filt_names, filt_vals, str_data, data, time_stamp, quality) → None

    > Push a user event for the given attribute name. The event is pushed to the notification daemon.

    Parameters
      attr_name

        (`str`) attribute name

      filt_names

        (sequence<`str`>) the filterable fields name

      filt_vals

        (sequence<`double`>) the filterable fields value

      data

        the data to be sent as attribute event data. Data must be compatible with the attribute type and format. for SPECTRUM and IMAGE attributes, data can be any type of sequence of elements compatible with the attribute type

      str_data

        (`str`) special variation for DevEncoded data type. In this case ‘data’ must be a str or an object with the buffer interface.

      dim_x

        (`int`) the attribute x length. Default value is 1

      dim_y

        (`int`) the attribute y length. Default value is 0

      time_stamp

        (`double`) the time stamp

      quality

        (`AttrQuality`) the attribute quality factor

    Throws

      `DevFailed` If the attribute data type is not coherent.

  push_pipe_event(self, blob) → None

    > Push an pipe event.

    Parameters

      the blob which pipe event will be send.

    Return

      None

    New in PyTango 9.2.2

  read_attr_hardware(self, attr_list) → None

    > Read the hardware to return attribute value(s). Default method to implement an action necessary on a device to read the hardware involved in a a read attribute CORBA call. This method must be redefined in sub-classes in order to support attribute reading

    Parameters
      attr_list(sequence<int>) list of indices in the device object attribute vector

        of an attribute to be read.

    Return

      None

    Throws

      `DevFailed` This method does not throw `exception` but a redefined method can.

  register_signal(self, signo) → None

    > Register a signal. Register this device as device to be informed when signal signo is sent to to the device server process

    Parameters
      signo

        (`int`) signal identifier

    Return

      None

  remove_attribute(self, attr_name) → None

    > Remove one attribute from the device attribute list.

    Parameters
      attr_name

        (`str`) attribute name

    Return

      None

    Throws

      `DevFailed`

  remove_command(self, attr_name) → None

    > Remove one command from the device command list.

    Parameters
      cmd_name

        (`str`) command name to be removed from the list

      free_it

        Boolean set to true if the command object must be freed.

      clean_db

        Clean command related information (included polling info if the command is polled) from database.

    Return

      None

    Throws

      `DevFailed`

  set_archive_event(self, attr_name, implemented, detect=True) → None

    > Set an implemented flag for the attribute to indicate that the server fires archive events manually, without the polling to be started. If the detect parameter is set to true, the criteria specified for the archive event are verified and the event is only pushed if they are fullfilled. If detect is set to false the event is fired without any value checking!

    Parameters
      attr_name

        (`str`) attribute name

      implemented

        (`bool`) True when the server fires change events manually.

      detect

        (`bool`) Triggers the verification of the change event properties when set to true. Default value is true.

    Return

      None

  set_change_event(self, attr_name, implemented, detect=True) → None

    > Set an implemented flag for the attribute to indicate that the server fires change events manually, without the polling to be started. If the detect parameter is set to true, the criteria specified for the change event are verified and the event is only pushed if they are fullfilled. If detect is set to false the event is fired without any value checking!

    Parameters
      attr_name

        (`str`) attribute name

      implemented

        (`bool`) True when the server fires change events manually.

      detect

        (`bool`) Triggers the verification of the change event properties when set to true. Default value is true.

    Return

      None

  set_state(self, new_state) → None

    > Set device state.

    Parameters
      new_state

        (`DevState`) the new device state

    Return

      None

  set_status(self, new_status) → None

    > Set device status.

    Parameters
      new_status

        (`str`) the new device status

    Return

      None

  signal_handler(self, signo) → None

    > Signal handler. The method executed when the signal arrived in the device server process. This method is defined as virtual and then, can be redefined following device needs.

    Parameters
      signo

        (`int`) the signal number

    Return

      None

    Throws

      `DevFailed` This method does not throw `exception` but a redefined method can.

  stop_polling(self) → None
  stop_polling(self, with_db_upd) → None

    > Stop all polling for a device. if the device is polled, call this method before deleting it.

    Parameters
      with_db_upd

        (`bool`) Is it necessary to update db ?

    Return

      None

    New in PyTango 7.1.2

  unregister_signal(self, signo) → None

    > Unregister a signal. Unregister this device as device to be informed when signal signo is sent to to the device server process

    Parameters
      signo

        (`int`) signal identifier

    Return

      None

  warn_stream(self, msg, *args) → None

    > Sends the given message to the tango warn stream.

    > Since PyTango 7.1.3, the same can be achieved with:

    >     print(msg, file=self.log_warn)

    Parameters
      msg

        (`str`) the message to be sent to the warn stream

    Return

      None

  write_attr_hardware(self) → None

    > Write the hardware for attributes. Default method to implement an action necessary on a device to write the hardware involved in a a write attribute. This method must be redefined in sub-classes in order to support writable attribute

    Parameters
      attr_list(sequence<int>) list of indices in the device object attribute vector

        of an attribute to be written.

    Return

      None

    Throws

      `DevFailed` This method does not throw `exception` but a redefined method can.