docs: def list_sensors(parent_class, sensor_items, filter, strategy, status,
                   use_python_identifiers, tuple, refresh):
      """Helper for implementing :meth:`katcp.resource.KATCPResource.list_sensors`
  
      Parameters
      ----------
  
      sensor_items : tuple of sensor-item tuples
          As would be returned the items() method of a dict containing KATCPSensor objects
          keyed by Python-identifiers.
      parent_class: KATCPClientResource or KATCPClientResourceContainer
          Is used for prefix calculation
      Rest of parameters as for :meth:`katcp.resource.KATCPResource.list_sensors`
      """
      filter_re = re.compile(filter)
      found_sensors = []
      none_strat = resource.normalize_strategy_parameters('none')
      sensor_dict = dict(sensor_items)
      for sensor_identifier in sorted(sensor_dict.keys()):
          sensor_obj = sensor_dict[sensor_identifier]
          search_name = (sensor_identifier if use_python_identifiers
                         else sensor_obj.name)
          name_match = filter_re.search(search_name)
          # Only include sensors with strategies
          strat_match = not strategy or sensor_obj.sampling_strategy != none_strat
          if name_match and strat_match:
              if refresh:
                  # First refresh the sensor reading
                  yield sensor_obj.get_value()
              # Determine the sensorname prefix:
              # parent_name. except for aggs when in KATCPClientResourceContinaer
              prefix = ""
              if isinstance(parent_class, KATCPClientResourceContainer):
                  if sensor_obj.name.startswith("agg_"):
                      prefix = ""
                  else:
                      prefix = sensor_obj.parent_name + "."
              if not status or (sensor_obj.reading.status in status):
                  # Only include sensors of the given status
                  if tuple:
                      # (sensor.name, sensor.value, sensor.value_seconds, sensor.type, sensor.units, sensor.update_seconds, sensor.status, strategy_and_params)
                      found_sensors.append((
                          prefix+sensor_obj.name,
                          sensor_obj.reading.value,
                          sensor_obj.reading.timestamp,
                          sensor_obj.type,
                          sensor_obj.units,
                          sensor_obj.reading.received_timestamp,
                          sensor_obj.reading.status,
                          sensor_obj.sampling_strategy
                          ))
                  else:
                      found_sensors.append(resource.SensorResultTuple(
                          object=sensor_obj,
                          name=prefix+sensor_obj.name,
                          python_identifier=sensor_identifier,
                          description=sensor_obj.description,
                          units=sensor_obj.units,
                          type=sensor_obj.type,
                          reading=sensor_obj.reading))
      raise tornado.gen.Return(found_sensors)