code: def filename_to_url(
      filename: str, cache_dir: Optional[str] = None
  ) -> Tuple[str, str]:
      """
      Return the url and etag (which may be ``None``) stored for `filename`.
      Raise ``FileNotFoundError`` if `filename` or its stored metadata do not exist.
      """
      if cache_dir is None:
          cache_dir = DATASET_CACHE
  
      cache_path = os.path.join(cache_dir, filename)
      if not os.path.exists(cache_path):
          raise FileNotFoundError(
              "file {} not found".format(cache_path)
          )
  
      meta_path = cache_path + ".json"
      if not os.path.exists(meta_path):
          raise FileNotFoundError("file {} not found".format(meta_path))
  
      with open(meta_path) as meta_file:
          metadata = json.load(meta_file)
      url = metadata["url"]
      etag = metadata["etag"]
  
      return url, etag
  
file_path: scispacy/scispacy/file_cache.py
imports: import os
  import shutil
  import tempfile
  import json
  from urllib.parse import urlparse
  from pathlib import Path
  from typing import Optional, Tuple, Union, IO
  from hashlib import sha256
  import requests
  from tqdm import tqdm
label_desc: Use image node_id 3 for calling a global function with example usage: filename_to_url(filename, cache_dir) and returns: url,  etag