diff options
author | Desmond Cheong <desmondcheongzx@gmail.com> | 2021-03-08 20:06:02 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-08 20:06:02 (GMT) |
commit | 3abf6f010243a91bf57cbf357dac33193f7b8407 (patch) | |
tree | 10955a6bfecc49ee2bd5ca93efe33c887fd10ded /Lib/zipimport.py | |
parent | bbba28212ce0f58096a4043f32442c6e727b74fc (diff) | |
download | cpython-3abf6f010243a91bf57cbf357dac33193f7b8407.zip cpython-3abf6f010243a91bf57cbf357dac33193f7b8407.tar.gz cpython-3abf6f010243a91bf57cbf357dac33193f7b8407.tar.bz2 |
bpo-14678: Update zipimport to support importlib.invalidate_caches() (GH-24159)
Added an invalidate_caches() method to the zipimport.zipimporter class based on the implementation of importlib.FileFinder.invalidate_caches(). This was done by adding a get_files() method and an _archive_mtime attribute to zipimport.zipimporter to check for updates or cache invalidation whenever the cache of files and toc entry information in the zipimporter is accessed.
Diffstat (limited to 'Lib/zipimport.py')
-rw-r--r-- | Lib/zipimport.py | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/Lib/zipimport.py b/Lib/zipimport.py index ce3e00e..e88d7a2 100644 --- a/Lib/zipimport.py +++ b/Lib/zipimport.py @@ -321,6 +321,16 @@ class zipimporter(_bootstrap_external._LoaderBasics): return ZipReader(self, fullname) + def invalidate_caches(self): + """Reload the file data of the archive path.""" + try: + self._files = _read_directory(self.archive) + _zip_directory_cache[self.archive] = self._files + except ZipImportError: + _zip_directory_cache.pop(self.archive, None) + self._files = None + + def __repr__(self): return f'<zipimporter object "{self.archive}{path_sep}{self.prefix}">' |