docs: def push_dataset_to_ckan(catalog, owner_org, dataset_origin_identifier,
                           portal_url, apikey, catalog_id=None,
                           demote_superThemes=True, demote_themes=True,
                           download_strategy=None, generate_new_access_url=None):
      """Escribe la metadata de un dataset en el portal pasado por parámetro.
  
          Args:
              catalog (DataJson): El catálogo de origen que contiene el dataset.
              owner_org (str): La organización a la cual pertence el dataset.
              dataset_origin_identifier (str): El id del dataset que se va a
                  federar.
              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.
              demote_superThemes(bool): Si está en true, los ids de los super
                  themes del dataset, se propagan como grupo.
              demote_themes(bool): Si está en true, los labels de los themes
                  del dataset, pasan a ser tags. Sino, se pasan como grupo.
              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.
              generate_new_access_url(list): Se pasan los ids de las
                  distribuciones cuyo accessURL se regenerar en el portal de
                  destino. Para el resto, el portal debe mantiene el valor pasado
                  en el DataJson.
          Returns:
              str: El id del dataset en el catálogo de destino.
      """
      dataset = catalog.get_dataset(dataset_origin_identifier)
      ckan_portal = RemoteCKAN(portal_url, apikey=apikey)
  
      package = map_dataset_to_package(catalog, dataset, owner_org, catalog_id,
                                       demote_superThemes, demote_themes)
  
      # Get license id
      if dataset.get('license'):
          license_list = ckan_portal.call_action('license_list')
          try:
              ckan_license = next(
                  license_item for license_item in license_list if
                  license_item['title'] == dataset['license'] or
                  license_item['url'] == dataset['license']
              )
              package['license_id'] = ckan_license['id']
          except StopIteration:
              package['license_id'] = 'notspecified'
      else:
          package['license_id'] = 'notspecified'
  
      try:
          pushed_package = ckan_portal.call_action(
              'package_update', data_dict=package)
      except NotFound:
          pushed_package = ckan_portal.call_action(
              'package_create', data_dict=package)
  
      with resource_files_download(catalog, dataset.get('distribution', []),
                                   download_strategy) as resource_files:
          resources_update(portal_url, apikey, dataset.get('distribution', []),
                           resource_files, generate_new_access_url, catalog_id)
  
      ckan_portal.close()
      return pushed_package['id']