code: def search_in_hdx(cls, query='*:*', configuration=None, page_size=1000, **kwargs):
          dataset = Dataset(configuration=configuration)
          total_rows = kwargs.get('rows', cls.max_int)
          start = kwargs.get('start', 0)
          all_datasets = None
          attempts = 0
          while attempts < cls.max_attempts and all_datasets is None:
              all_datasets = list()
              counts = set()
              for page in range(total_rows // page_size + 1):
                  pagetimespagesize = page * page_size
                  kwargs['start'] = start + pagetimespagesize
                  rows_left = total_rows - pagetimespagesize
                  rows = min(rows_left, page_size)
                  kwargs['rows'] = rows
                  _, result = dataset._read_from_hdx('dataset', query, 'q', Dataset.actions()['search'], **kwargs)
                  datasets = list()
                  if result:
                      count = result.get('count', None)
                      if count:
                          counts.add(count)
                          no_results = len(result['results'])
                          for datasetdict in result['results']:
                              dataset = Dataset(configuration=configuration)
                              dataset.old_data = dict()
                              dataset.data = datasetdict
                              dataset._dataset_create_resources()
                              datasets.append(dataset)
                          all_datasets += datasets
                          if no_results < rows:
                              break
                      else:
                          break
                  else:
                      logger.debug(result)
              if all_datasets and len(counts) != 1:
                  all_datasets = None
                  attempts += 1
              else:
                  ids = [dataset['id'] for dataset in all_datasets]
                  if len(ids) != len(set(ids)):
                      all_datasets = None
                      attempts += 1
          if attempts == cls.max_attempts and all_datasets is None:
              raise HDXError('Maximum attempts reached for searching for datasets!')
          return all_datasets