docs: def harvest_catalog_to_ckan(catalog, portal_url, apikey, catalog_id,
                              dataset_list=None, owner_org=None,
                              download_strategy=None):
      """Federa los datasets de un catálogo al portal pasado por parámetro.
  
          Args:
              catalog (DataJson): El catálogo de origen que se federa.
              portal_url (str): La URL del portal CKAN de destino.
              apikey (str): La apikey de un usuario con los permisos que le
                  permitan crear o actualizar el dataset.
              catalog_id (str): El prefijo con el que va a preceder el id del
                  dataset en catálogo destino.
              dataset_list(list(str)): Los ids de los datasets a federar. Si no
                  se pasa una lista, todos los datasests se federan.
              owner_org (str): La organización a la cual pertencen los datasets.
                  Si no se pasa, se utiliza el catalog_id.
              download_strategy(callable): Una función (catálogo, distribución)->
                  bool. Sobre las distribuciones que evalúa True, descarga el
                  recurso en el downloadURL y lo sube al portal de destino.
                  Por default no sube ninguna distribución.
          Returns:
              str: El id del dataset en el catálogo de destino.
      """
      # Evitar entrar con valor falsy
      harvested = []
      if dataset_list is None:
          try:
              dataset_list = [ds['identifier'] for ds in catalog.datasets]
          except KeyError:
              logger.exception('Hay datasets sin identificadores')
              return harvested
      owner_org = owner_org or catalog_id
      errors = {}
      for dataset_id in dataset_list:
          try:
              harvested_id = harvest_dataset_to_ckan(catalog, owner_org,
                                                     dataset_id, portal_url,
                                                     apikey, catalog_id,
                                                     download_strategy)
              harvested.append(harvested_id)
          except Exception as e:
              msg = "Error federando catalogo: %s, dataset: %s al portal: %s\n"\
                    % (catalog_id, dataset_id, portal_url)
              msg += str(e)
              logger.error(msg)
              errors[dataset_id] = str(e)
  
      return harvested, errors