def METHOD_NAME():
    all_obs = get_observatory_groups()
    url = '/'.join([
        _CDAS_BASEURL,
        'dataviews', _DATAVIEW,
        'datasets'
    ])
    # Mapping from dataset ID to description
    all_datasets = {}
    # Number of parallel threads we spawn
    N = 3
    def _fetch_cdaweb_dataset(group, url=url):
        print(f'🛰 Getting datasets for {group}')
        u = url + f'?observatoryGroup={group}'
        res = requests.get(u, headers=_CDAS_HEADERS)
        datasets = res.json()['DatasetDescription']
        dataset_ids = {ds['Id']: ds['Label'] for ds in datasets}
        all_datasets.update(dataset_ids)
    with ThreadPoolExecutor(max_workers=N) as executor:
        # Submit each URL to the thread pool
        futures = [executor.submit(_fetch_cdaweb_dataset, group) for group in all_obs['Group']]
        # Wait for all tasks to complete
        for future in futures:
            future.result()
    attr_file = pathlib.Path(__file__).parent / 'data' / 'attrs.json'
    with open(attr_file, 'w') as attrs_file:
        json.dump(dict(sorted(all_datasets.items())), attrs_file, indent=2)