code: def get_points(self, measurement=None, tags=None):
          
          # Raise error if measurement is not str or bytes
          if not isinstance(measurement,
                            (bytes, type(b''.decode()), type(None))):
              raise TypeError('measurement must be an str or None')
  
          for series in self._get_series():
              series_name = series.get('measurement',
                                       series.get('name', 'results'))
              if series_name is None:
                  # this is a "system" query or a query which
                  # doesn't return a name attribute.
                  # like 'show retention policies' ..
                  if tags is None:
                      for item in self._get_points_for_series(series):
                          yield item
  
              elif measurement in (None, series_name):
                  # by default if no tags was provided then
                  # we will matches every returned series
                  series_tags = series.get('tags', {})
                  for item in self._get_points_for_series(series):
                      if tags is None or \
                              self._tag_matches(item, tags) or \
                              self._tag_matches(series_tags, tags):
                          yield item
docs: Return a generator for all the points that match the given filters.
  
          :param measurement: The measurement name
          :type measurement: str
  
          :param tags: Tags to look for
          :type tags: dict
  
          :return: Points generator