code: def filename_to_url(
      filename: str, cache_dir: 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 = MODEL_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: nlp-architect/nlp_architect/utils/file_cache.py
imports: import os
  import logging
  import shutil
  import tempfile
  import json
  from urllib.parse import urlparse
  from pathlib import Path
  from typing import Tuple, Union, IO
  from hashlib import sha256
  from nlp_architect import LIBRARY_OUT
  from nlp_architect.utils.io import load_json_file
  import requests
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