diff options
author | Éric Araujo <merwok@netwok.org> | 2011-10-06 00:44:19 (GMT) |
---|---|---|
committer | Éric Araujo <merwok@netwok.org> | 2011-10-06 00:44:19 (GMT) |
commit | 76558e12ad377a0bc160935cf17ef54ff3292a4d (patch) | |
tree | a81d23dd5a3424a68a8a7f37ca7c40c3378556a7 | |
parent | 1079bdfde3bdd2100f1f8ef1b217a2d00529d7a7 (diff) | |
download | cpython-76558e12ad377a0bc160935cf17ef54ff3292a4d.zip cpython-76558e12ad377a0bc160935cf17ef54ff3292a4d.tar.gz cpython-76558e12ad377a0bc160935cf17ef54ff3292a4d.tar.bz2 |
Add regrtest check for caches in packaging.database (see #12167)
-rwxr-xr-x | Lib/test/regrtest.py | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py index e46f935..59bdb01 100755 --- a/Lib/test/regrtest.py +++ b/Lib/test/regrtest.py @@ -173,6 +173,7 @@ import io import json import logging import os +import packaging.database import platform import random import re @@ -967,6 +968,7 @@ class saved_test_environment: 'sys.warnoptions', 'threading._dangling', 'multiprocessing.process._dangling', 'sysconfig._CONFIG_VARS', 'sysconfig._SCHEMES', + 'packaging.database_caches', ) def get_sys_argv(self): @@ -1054,6 +1056,28 @@ class saved_test_environment: # Can't easily revert the logging state pass + def get_packaging_database_caches(self): + # caching system used by the PEP 376 implementation + # we have one boolean and four dictionaries, initially empty + switch = packaging.database._cache_enabled + saved = [] + for name in ('_cache_name', '_cache_name_egg', + '_cache_path', '_cache_path_egg'): + cache = getattr(packaging.database, name) + saved.append((id(cache), cache, cache.copy())) + return switch, saved + def restore_packaging_database_caches(self, saved): + switch, saved_caches = saved + packaging.database._cache_enabled = switch + for offset, name in enumerate(('_cache_name', '_cache_name_egg', + '_cache_path', '_cache_path_egg')): + _, cache, items = saved_caches[offset] + # put back the same object in place + setattr(packaging.database, name, cache) + # now restore its items + cache.clear() + cache.update(items) + def get_sys_warnoptions(self): return id(sys.warnoptions), sys.warnoptions, sys.warnoptions[:] def restore_sys_warnoptions(self, saved_options): |