Our docs build is failing with the following error on PRs and locally, example https://github.com/apache/airflow/pull/14983/checks?check_run_id=2185523525#step:4:282:

```
Fetched inventory: https://googleapis.dev/python/videointelligence/latest/objects.inv
Traceback (most recent call last):
  File "/opt/airflow/docs/build_docs.py", line 278, in <module>
    main()
  File "/opt/airflow/docs/build_docs.py", line 218, in main
    priority_packages = fetch_inventories()
  File "/opt/airflow/docs/exts/docs_build/fetch_inventories.py", line 126, in fetch_inventories
    failed, success = list(failed), list(failed)
  File "/usr/local/lib/python3.6/concurrent/futures/_base.py", line 586, in result_iterator
    yield fs.pop().result()
  File "/usr/local/lib/python3.6/concurrent/futures/_base.py", line 425, in result
    return self.__get_result()
  File "/usr/local/lib/python3.6/concurrent/futures/_base.py", line 384, in __get_result
    raise self._exception
  File "/usr/local/lib/python3.6/concurrent/futures/thread.py", line 56, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/opt/airflow/docs/exts/docs_build/fetch_inventories.py", line 53, in _fetch_file
    response = session.get(url, allow_redirects=True, stream=True)
  File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", line 555, in get
    return self.request('GET', url, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", line 542, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", line 677, in send
    history = [resp for resp in gen]
  File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", line 677, in <listcomp>
    history = [resp for resp in gen]
  File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", line 166, in resolve_redirects
    raise TooManyRedirects('Exceeded {} redirects.'.format(self.max_redirects), response=resp)
requests.exceptions.TooManyRedirects: Exceeded 30 redirects.
###########################################################################################
```

To reproduce locally run:

```
./breeze build-docs -- --package-filter apache-airflow
```
docs/exts/docs_build/fetch_inventories.py
to_download.extend(
        (
            pkg_name,
            f"{doc_url}/objects.inv",
            f'{CACHE_DIR}/{pkg_name}/objects.inv',
        )
        for pkg_name, doc_url in THIRD_PARTY_INDEXES.items()
    )
    to_download = [(pkg_name, url, path) for pkg_name, url, path in to_download if _is_outdated(path)]
    if not to_download:
        print("Nothing to do")
        return []
    print(f"To download {len(to_download)} inventorie(s)")
    with requests.Session() as session, concurrent.futures.ThreadPoolExecutor(DEFAULT_POOLSIZE) as pool:
        download_results: Iterator[Tuple[str, bool]] = pool.map(
            _fetch_file,
            repeat(session, len(to_download)),
            (pkg_name for pkg_name, _, _ in to_download),
            (url for _, url, _ in to_download),
            (path for _, _, path in to_download),
        )
    failed, success = partition(lambda d: d[1], download_results)
    failed, success = list(failed), list(failed)
    print(f"Result: {len(success)}, success {len(failed)} failed")
    if failed:
        print("Failed packages:")
        for pkg_no, (pkg_name, _) in enumerate(failed, start=1):
            print(f"{pkg_no}. {pkg_name}")
    return [pkg_name for pkg_name, status in failed]