github.com/grumpyhome/grumpy@v0.3.1-0.20201208125205-7b775405bdf1/grumpy-runtime-src/third_party/stdlib/dircache.py (about)

     1  """Read and cache directory listings.
     2  
     3  The listdir() routine returns a sorted list of the files in a directory,
     4  using a cache to avoid reading the directory more often than necessary.
     5  The annotate() routine appends slashes to directories."""
     6  from warnings import warnpy3k
     7  warnpy3k("the dircache module has been removed in Python 3.0", stacklevel=2)
     8  del warnpy3k
     9  
    10  import os
    11  
    12  __all__ = ["listdir", "opendir", "annotate", "reset"]
    13  
    14  cache = {}
    15  
    16  def reset():
    17      """Reset the cache completely."""
    18      global cache
    19      cache = {}
    20  
    21  def listdir(path):
    22      """List directory contents, using cache."""
    23      try:
    24          cached_mtime, list = cache[path]
    25          del cache[path]
    26      except KeyError:
    27          cached_mtime, list = -1, []
    28      mtime = os.stat(path).st_mtime
    29      if mtime != cached_mtime:
    30          list = os.listdir(path)
    31          list.sort()
    32      cache[path] = mtime, list
    33      return list
    34  
    35  opendir = listdir # XXX backward compatibility
    36  
    37  def annotate(head, list):
    38      """Add '/' suffixes to directories."""
    39      for i in range(len(list)):
    40          if os.path.isdir(os.path.join(head, list[i])):
    41              list[i] = list[i] + '/'