summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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)
commit76558e12ad377a0bc160935cf17ef54ff3292a4d (patch)
treea81d23dd5a3424a68a8a7f37ca7c40c3378556a7
parent1079bdfde3bdd2100f1f8ef1b217a2d00529d7a7 (diff)
downloadcpython-76558e12ad377a0bc160935cf17ef54ff3292a4d.zip
cpython-76558e12ad377a0bc160935cf17ef54ff3292a4d.tar.gz
cpython-76558e12ad377a0bc160935cf17ef54ff3292a4d.tar.bz2
Add regrtest check for caches in packaging.database (see #12167)
-rwxr-xr-xLib/test/regrtest.py24
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):