class_docstr: This class downloads markdown readme files for various
  ecosystem libraries, saves them in specified locations and preprocesses
  them before sphinx build starts.
  
  If you have ecosystem libraries that live in a separate repo from Ray,
  adding them here will allow for their docs to be present in Ray docs
  without the need for duplicate files. For more details, see ``doc/README.md``.
class_docstr_tok: ["This","class","downloads","markdown","readme","files","for","various","ecosystem","libraries",",","saves","them","in","specified","locations","and","preprocesses","them","before","sphinx","build","starts",".","If","you","have","ecosystem","libraries","that","live","in","a","separate","repo","from","Ray",",","adding","them","here","will","allow","for","their","docs","to","be","present","in","Ray","docs","without","the","need","for","duplicate","files",".","For","more","details",",","see","``","doc\/README.md","``","."]
code: def save_original_doc(self, path: str):
      with open(path, "r") as f:
          self.original_docs[path] = f.read()
  
imports: import re
  import sphinx
  from typing import List, Dict, Union, Callable, Any
  import copy
  import yaml
  import bs4
  import logging
  import logging.handlers
  import pathlib
  import urllib
  import urllib.request
  from queue import Queue
  import requests
  from preprocess_github_markdown import preprocess_github_markdown_file
  from sphinx.util import logging
  from sphinx.util.console import red
  from sphinx.util.nodes import make_refnode
  from docutils import nodes
  from functools import lru_cache
  from pydata_sphinx_theme.toctree import add_collapse_checkboxes
  from pygments import highlight
  from pygments.lexers import PythonLexer
  from pygments.formatters import HtmlFormatter
label_desc: Use image node_id 4 for calling the DownloadAndPreprocessEcosystemDocs obj's underlying member method code with example usage: obj.save_original_doc(path) without return types