Skip to content

Should all hardware objects' init() method call their super's init()? #1346

Description

@fabcor-maxiv

Should all hardware objects' init() method call their super's init()?

For example some abstract hardware objects do not, and I wonder if it is on purpose or if it was simply forgotten:

  • def init(self):
    """Init properties: actuator_name, username, read_only and default_value."""
    self.actuator_name = self.get_property("actuator_name")
    self.read_only = self.get_property("read_only") or False
    self.default_value = self.get_property("default_value")
    if self.default_value is not None:
    self.update_value(self.default_value)
    limits = self.get_property("default_limits")
    if limits:
    try:
    self._nominal_limits = tuple(literal_eval(limits))
    except TypeError:
    print("Invalid limits")
    self.username = self.get_property("username")
  • def init(self):
    try:
    self._diameter_size_list = eval(self.get_property("diameter_size_list"))
    except Exception:
    logging.getLogger("HWR").error("Aperture: no diameter size list defined")
    try:
    self._position_list = eval(self.get_property("position_list"))
    except Exception:
    logging.getLogger("HWR").error("Aperture: no position list defined")
  • def init(self):
    self.ready_event = gevent.event.Event()
    undulators = []
    try:
    for undulator in self.config.undulators:
    undulators.append(undulator)
    except Exception:
    pass
    beam_div_hor, beam_div_ver = HWR.beamline.beam.get_beam_divergence()
    self.set_beamline_configuration(
    synchrotron_name=HWR.beamline.session.synchrotron_name,
    directory_prefix=self.get_property("directory_prefix"),
    default_exposure_time=HWR.beamline.detector.get_property(
    "default_exposure_time"
    ),
    minimum_exposure_time=HWR.beamline.detector.get_property(
    "minimum_exposure_time"
    ),
    detector_fileext=HWR.beamline.detector.get_property("fileSuffix"),
    detector_type=HWR.beamline.detector.get_property("type"),
    detector_manufacturer=HWR.beamline.detector.get_property("manufacturer"),
    detector_model=HWR.beamline.detector.get_property("model"),
    detector_px=HWR.beamline.detector.get_property("px"),
    detector_py=HWR.beamline.detector.get_property("py"),
    detector_binning_mode=HWR.beamline.detector.get_binning_mode(),
    undulators=undulators,
    focusing_optic=self.get_property("focusing_optic"),
    monochromator_type=self.get_property("monochromator"),
    beam_divergence_vertical=beam_div_hor,
    beam_divergence_horizontal=beam_div_ver,
    polarisation=self.get_property("polarisation"),
    input_files_server=self.get_property("input_files_server"),
    )
  • def init(self):
    """Initialisation"""
    self.lims = HWR.beamline.lims
    if not self.lims:
    logging.getLogger().warning("EnergyScan: no lims set")
  • def init(self):
    """Get the attributes to be defined as keys in the _machine_info_dict"""
    attr = self.get_property("parameters")
    if attr:
    self._check_attributes(literal_eval(attr))
    else:
    # at least current should be in the list
    self._check_attributes(["current"])
  • def init(self):
    self.done_event = gevent.event.Event()
    self.ssx_setup = self.get_object_by_role("ssx_setup")
    self.result_types = self.get_property("result_types", DEFAULT_RESULT_TYPES)
    self.start_command = str(self.get_property("processing_command"))
    self.kill_command = str(self.get_property("kill_command"))
    self.interpolate_results = self.get_property("interpolate_results")
  • def init(self):
    """
    HardwareObject init method
    """
    use_update_timer = self.get_property("useUpdateTimer", True)
    msg = f"SampleChanger: Using update timer is {use_update_timer}"
    logging.getLogger("HWR").info(msg)
    if use_update_timer:
    task1s = self.__timer_1s_task(wait=False)
    task1s.link(self._on_timer_1s_exit)
    updateTask = self.__update_timer_task(wait=False)
    updateTask.link(self._on_timer_update_exit)
    self.use_update_timer = use_update_timer
    self.update_info()
  • def init(self):
    """Initialise the values from config and set default values,
    when appropriate
    """
    self.cam_name = self.get_property("name", "camera")
    try:
    self.cam_mirror = eval(self.get_property("mirror"))
    except TypeError:
    self.cam_mirror = [False, False]
    try:
    self.cam_encoding = self.get_property("encoding").lower()
    except AttributeError:
    # apply default value
    self.cam_encoding = AbstractVideoDevice.default_cam_encoding
    scale = self.get_property("scale")
    try:
    self.cam_scale_factor = eval(scale)
    except TypeError:
    logging.getLogger().warning(
    "%s: failed to interpret scale factor for camera.\nUsing default.",
    self.id,
    )
    self.cam_scale_factor = self.default_scale_factor
    self.poll_interval = self.get_property("interval", self.default_poll_interval)
    try:
    self.cam_gain = float(self.get_property("gain"))
    except TypeError:
    pass
    try:
    self.cam_exposure = float(self.get_property("exposure"))
    except TypeError:
    # apply default value
    self.cam_exposure = self.poll_interval / 1000.0
    self.scale = self.get_property("scale", 1.0)
    try:
    self.cam_type = self.get_property("type").lower()
    except AttributeError:
    # apply default value
    self.cam_type = self.default_cam_type
    # Apply values
    self.set_video_live(False)
    time.sleep(0.1)
    self.set_cam_encoding(self.cam_encoding)
    self.set_exposure_time(self.cam_exposure)
    if self.cam_gain is not None:
    self.set_gain(self.cam_gain)
    self.image_dimensions = self.get_image_dimensions()
    # Start polling greenlet
    if self.image_polling is None:
    self.set_video_live(True)
    self.change_owner()
    logging.getLogger("HWR").info("Starting polling for camera")
    self.image_polling = gevent.spawn(
    self.do_image_polling, self.poll_interval / 1000.0
    )
    self.image_polling.link_exception(self.polling_ended_exc)
    self.image_polling.link(self.polling_ended)
  • def init(self):
    """Initialisation"""
    self.default_integration_time = self.get_property("default_integration_time", 3)
    self.file_suffix = self.get_property("file_suffix", "dat")
    self.lims = HWR.beamline.lims
    if not self.lims:
    logging.getLogger().warning("XRFSpectrum: no lims set")

I am not sure that it makes a big difference either way, but that seems strange to me. But again, things seem to work fine like this, so I am confused.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions