docs: def generate_datasets_report(
              self, catalogs, harvest='valid', report=None,
              export_path=None, catalog_ids=None, catalog_homepages=None,
              catalog_orgs=None
      ):
          """Genera un reporte sobre las condiciones de la metadata de los
          datasets contenidos en uno o varios catálogos.
  
          Args:
              catalogs (str, dict o list): Uno (str o dict) o varios (list de
                  strs y/o dicts) catálogos.
              harvest (str): Criterio a utilizar para determinar el valor del
                  campo "harvest" en el reporte generado ('all', 'none',
                  'valid', 'report' o 'good').
              report (str): Path a un reporte/config especificando qué
                  datasets marcar con harvest=1 (sólo si harvest=='report').
              export_path (str): Path donde exportar el reporte generado (en
                  formato XLSX o CSV). Si se especifica, el método no devolverá
                  nada.
              catalog_id (str): Nombre identificador del catálogo para federación
              catalog_homepage (str): URL del portal de datos donde está
                  implementado el catálogo. Sólo se pasa si el portal es un CKAN
                  o respeta la estructura:
                      https://datos.{organismo}.gob.ar/dataset/{dataset_identifier}
  
          Returns:
              list: Contiene tantos dicts como datasets estén presentes en
                  `catalogs`, con la data del reporte generado.
          """
          assert isinstance(catalogs, string_types + (dict, list))
          if isinstance(catalogs, list):
              assert not catalog_ids or len(catalogs) == len(catalog_ids)
              assert not catalog_orgs or len(catalogs) == len(catalog_orgs)
              assert not catalog_homepages or len(
                  catalogs) == len(catalog_homepages)
  
          # Si se pasa un único catálogo, genero una lista que lo contenga
          if isinstance(catalogs, string_types + (dict,)):
              catalogs = [catalogs]
  
          # convierto los catalogos a objetos DataJson
          catalogs = list(map(readers.read_catalog_obj, catalogs))
  
          if not catalog_ids:
              catalog_ids = []
              for catalog in catalogs:
                  catalog_ids.append(catalog.get("identifier", ""))
          if isinstance(catalog_ids, string_types + (dict,)):
              catalog_ids = [catalog_ids] * len(catalogs)
          if not catalog_orgs or\
                  isinstance(catalog_orgs, string_types + (dict,)):
              catalog_orgs = [catalog_orgs] * len(catalogs)
          if not catalog_homepages or isinstance(catalog_homepages,
                                                 string_types + (dict,)):
              catalog_homepages = [catalog_homepages] * len(catalogs)
  
          catalogs_reports = [
              self.catalog_report(
                  catalog, harvest, report, catalog_id=catalog_id,
                  catalog_homepage=catalog_homepage, catalog_org=catalog_org
              )
              for catalog, catalog_id, catalog_org, catalog_homepage in
              zip(catalogs, catalog_ids, catalog_orgs, catalog_homepages)
          ]
  
          full_report = []
          for report in catalogs_reports:
              full_report.extend(report)
  
          if export_path:
              # config styles para reportes en excel
              alignment = Alignment(
                  wrap_text=True,
                  shrink_to_fit=True,
                  vertical="center"
              )
              column_styles = {
                  "dataset_title": {"width": 35},
                  "dataset_description": {"width": 35},
                  "dataset_publisher_name": {"width": 35},
                  "dataset_issued": {"width": 20},
                  "dataset_modified": {"width": 20},
                  "distributions_formats": {"width": 15},
                  "distributions_list": {"width": 90},
                  "notas": {"width": 50},
              }
              cell_styles = [
                  {"alignment": Alignment(vertical="center")},
                  {"row": 1, "font": Font(bold=True)},
                  {"col": "dataset_title", "alignment": alignment},
                  {"col": "dataset_description", "alignment": alignment},
                  {"col": "dataset_publisher_name", "alignment": alignment},
                  {"col": "distributions_formats", "alignment": alignment},
                  {"col": "distributions_list", "alignment": alignment},
                  {"col": "notas", "alignment": alignment},
              ]
  
              # crea tabla
              writers.write_table(table=full_report, path=export_path,
                                  column_styles=column_styles,
                                  cell_styles=cell_styles)
          else:
              return full_report