class_docstr: Cache to maintain extracted archives
  
  Parameters
  ----------
  toppath : str
    Top directory under .git/ of which temp directory would be created.
    If not provided -- random tempdir is used
  persistent : bool, optional
    Passed over into generated ExtractedArchives
class_docstr_tok: ["Cache","to","maintain","extracted","archives","Parameters","--","--","--","--","--","toppath",":","str","Top","directory","under",".git\/","of","which","temp","directory","would","be","created",".","If","not","provided","--","random","tempdir","is","used","persistent",":","bool",",","optional","Passed","over","into","generated","ExtractedArchives"]
docstr: Return full path to archive
  
  So we have consistent operation from different subdirs,
  while referencing archives from the topdir
  
  TODO: why do we need it???
code: def _get_normalized_archive_path(self, archive):
      """Return full path to archive
  
      So we have consistent operation from different subdirs,
      while referencing archives from the topdir
  
      TODO: why do we need it???
      """
      if not isabs(archive) and self._toppath:
          out = normpath(opj(self._toppath, archive))
          if relpath(out, self._toppath).startswith(pardir):
              raise RuntimeError(
                  "%s points outside of the topdir %s"
                  % (archive, self._toppath)
              )
          if isdir(out):
              raise RuntimeError("got a directory here... bleh")
          return out
      return archive
  
imports: import hashlib
  import logging
  import os
  import random
  import string
  import tempfile
  from datalad import cfg
  from datalad.config import anything2bool
  from datalad.consts import ARCHIVES_TEMP_DIR
  from datalad.support.external_versions import external_versions
  from datalad.support.locking import lock_if_check_fails
  from datalad.support.path import abspath, exists, isabs, isdir
  from datalad.support.path import join
  from datalad.support.path import normpath, pardir, relpath
  from datalad.support.path import sep
  from datalad.utils import Path, any_re_search, ensure_bytes, ensure_unicode, get_tempfile_kwargs, on_windows, rmtemp, rmtree, unlink
label_desc: Use image node_id 4 for calling the ArchivesCache obj's underlying member method code with example usage: obj._get_normalized_archive_path(archive) and returns: archive, out