docs: def _find(api_method, query, limit, return_handler, first_page_size, **kwargs):
      ''' Takes an API method handler (dxpy.api.find*) and calls it with *query*,
      and then wraps a generator around its output. Used by the methods below.
  
      Note that this function may only be used for /system/find* methods.
      '''
      num_results = 0
  
      if "limit" not in query:
          query["limit"] = first_page_size
  
      while True:
          resp = api_method(query, **kwargs)
  
          by_parent = resp.get('byParent')
          descriptions = resp.get('describe')
          def format_result(result):
              if return_handler:
                  result = dxpy.get_handler(result['id'], project=result.get('project'))
              if by_parent is not None:
                  return result, by_parent, descriptions
              else:
                  return result
  
          for i in resp["results"]:
              if num_results == limit:
                  return
              num_results += 1
              yield format_result(i)
  
          # set up next query
          if resp["next"] is not None:
              query["starting"] = resp["next"]
              query["limit"] = min(query["limit"]*2, 1000)
          else:
              return