docs: def get_distributions(catalog, filter_in=None, filter_out=None,
                        meta_field=None, exclude_meta_fields=None,
                        only_time_series=False):
      """Devuelve lista de distribuciones del catálogo o de uno de sus metadatos.
  
      Args:
          catalog (dict, str or DataJson): Representación externa/interna de un
              catálogo. Una representación _externa_ es un path local o una
              URL remota a un archivo con la metadata de un catálogo, en
              formato JSON o XLSX. La representación _interna_ de un catálogo
              es un diccionario. Ejemplos: http://datos.gob.ar/data.json,
              http://www.ign.gob.ar/descargas/geodatos/catalog.xlsx,
              "/energia/catalog.xlsx".
          filter_in (dict): Devuelve los distribuciones cuyos atributos
              coinciden con los pasados en este diccionario. Ejemplo::
                  {
                      "dataset": {
                          "publisher": {"name": "Ministerio de Ambiente"}
                      }
                  }
              Sólo se devolverán los distribuciones que pertenezcan a un dataset
              de ese publisher_name.
          filter_out (dict): Devuelve los distribuciones cuyos atributos no
              coinciden con los pasados en este diccionario. Ejemplo::
                  {
                      "dataset": {
                          "publisher": {"name": "Ministerio de Ambiente"}
                      }
                  }
              Sólo se devolverán los distribuciones que no pertenezcan a un
              dataset de ese publisher_name.
          meta_field (str): Nombre de un metadato de Distribution. En lugar de
              devolver los objetos completos Distribution, devuelve una lista de
              valores para ese metadato presentes en el catálogo.
          exclude_meta_fields (list): Metadatos de Distribution que se quieren
              excluir de los objetos Distribution devueltos.
          only_time_series (bool): Si es verdadero, sólo devuelve distribuciones
              que sean distribuciones de series de tiempo.
      """
  
      filter_in = filter_in or {}
      filter_out = filter_out or {}
      catalog = read_catalog_obj(catalog)
  
      distributions = []
      for dataset in get_datasets(catalog, filter_in, filter_out):
          for distribution in dataset.get("distribution", []):
              # agrega el id del dataset
              distribution["dataset_identifier"] = dataset["identifier"]
              distributions.append(distribution)
  
      filtered_distributions = [
          distribution for distribution in distributions if
          _filter_dictionary(distribution, filter_in.get("distribution"),
                             filter_out.get("distribution"))
      ]
  
      # realiza filtros especiales
      if only_time_series:
          filtered_distributions = [distribution for distribution in
                                    filtered_distributions if
                                    distribution_has_time_index(distribution)]
  
      if meta_field:
          return [distribution[meta_field]
                  for distribution in filtered_distributions
                  if meta_field in distribution]
  
      if exclude_meta_fields:
          meta_filtered_distributions = []
          for distribution in filtered_distributions:
              distribution_meta_filtered = distribution.copy()
              for excluded_meta_field in exclude_meta_fields:
                  distribution_meta_filtered.pop(excluded_meta_field, None)
              meta_filtered_distributions.append(distribution_meta_filtered)
  
          return meta_filtered_distributions
  
      else:
          return filtered_distributions