mirror of
https://github.com/python/cpython.git
synced 2024-11-24 00:38:00 +01:00
gh-122549: Add platform.invalidate_caches() (#122547)
Allow to invalidate platform's cached results.
This commit is contained in:
parent
08f98f4576
commit
612ac283b8
@ -359,3 +359,15 @@ Android Platform
|
|||||||
<https://storage.googleapis.com/play_public/supported_devices.html>`__.
|
<https://storage.googleapis.com/play_public/supported_devices.html>`__.
|
||||||
|
|
||||||
.. versionadded:: 3.13
|
.. versionadded:: 3.13
|
||||||
|
|
||||||
|
|
||||||
|
Miscellaneous
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. function:: invalidate_caches()
|
||||||
|
|
||||||
|
Clear out the internal cache of information, such as the :func:`uname`.
|
||||||
|
This is typically useful when the platform's :func:`node` is changed
|
||||||
|
by an external process and one needs to retrieve the updated value.
|
||||||
|
|
||||||
|
.. versionadded:: 3.14
|
||||||
|
@ -454,6 +454,14 @@ pathlib
|
|||||||
(Contributed by Barney Gale in :gh:`125413`.)
|
(Contributed by Barney Gale in :gh:`125413`.)
|
||||||
|
|
||||||
|
|
||||||
|
platform
|
||||||
|
--------
|
||||||
|
|
||||||
|
* Add :func:`platform.invalidate_caches` to invalidate the cached results.
|
||||||
|
|
||||||
|
(Contributed by Bénédikt Tran in :gh:`122549`.)
|
||||||
|
|
||||||
|
|
||||||
pdb
|
pdb
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
#
|
#
|
||||||
# <see CVS and SVN checkin messages for history>
|
# <see CVS and SVN checkin messages for history>
|
||||||
#
|
#
|
||||||
|
# 1.0.9 - added invalidate_caches() function to invalidate cached values
|
||||||
# 1.0.8 - changed Windows support to read version from kernel32.dll
|
# 1.0.8 - changed Windows support to read version from kernel32.dll
|
||||||
# 1.0.7 - added DEV_NULL
|
# 1.0.7 - added DEV_NULL
|
||||||
# 1.0.6 - added linux_distribution()
|
# 1.0.6 - added linux_distribution()
|
||||||
@ -109,7 +110,7 @@ __copyright__ = """
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__version__ = '1.0.8'
|
__version__ = '1.0.9'
|
||||||
|
|
||||||
import collections
|
import collections
|
||||||
import os
|
import os
|
||||||
@ -1441,6 +1442,18 @@ def freedesktop_os_release():
|
|||||||
return _os_release_cache.copy()
|
return _os_release_cache.copy()
|
||||||
|
|
||||||
|
|
||||||
|
def invalidate_caches():
|
||||||
|
"""Invalidate the cached results."""
|
||||||
|
global _uname_cache
|
||||||
|
_uname_cache = None
|
||||||
|
|
||||||
|
global _os_release_cache
|
||||||
|
_os_release_cache = None
|
||||||
|
|
||||||
|
_sys_version_cache.clear()
|
||||||
|
_platform_cache.clear()
|
||||||
|
|
||||||
|
|
||||||
### Command line interface
|
### Command line interface
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
@ -83,6 +83,38 @@ class PlatformTest(unittest.TestCase):
|
|||||||
platform._uname_cache = None
|
platform._uname_cache = None
|
||||||
platform._os_release_cache = None
|
platform._os_release_cache = None
|
||||||
|
|
||||||
|
def test_invalidate_caches(self):
|
||||||
|
self.clear_caches()
|
||||||
|
|
||||||
|
self.assertDictEqual(platform._platform_cache, {})
|
||||||
|
self.assertDictEqual(platform._sys_version_cache, {})
|
||||||
|
self.assertIsNone(platform._uname_cache)
|
||||||
|
self.assertIsNone(platform._os_release_cache)
|
||||||
|
|
||||||
|
# fill the cached entries (some have side effects on others)
|
||||||
|
platform.platform() # for platform._platform_cache
|
||||||
|
platform.python_implementation() # for platform._sys_version_cache
|
||||||
|
platform.uname() # for platform._uname_cache
|
||||||
|
|
||||||
|
# check that the cache are filled
|
||||||
|
self.assertNotEqual(platform._platform_cache, {})
|
||||||
|
self.assertNotEqual(platform._sys_version_cache, {})
|
||||||
|
self.assertIsNotNone(platform._uname_cache)
|
||||||
|
|
||||||
|
try:
|
||||||
|
platform.freedesktop_os_release()
|
||||||
|
except OSError:
|
||||||
|
self.assertIsNone(platform._os_release_cache)
|
||||||
|
else:
|
||||||
|
self.assertIsNotNone(platform._os_release_cache)
|
||||||
|
|
||||||
|
with self.subTest('clear platform caches'):
|
||||||
|
platform.invalidate_caches()
|
||||||
|
self.assertDictEqual(platform._platform_cache, {})
|
||||||
|
self.assertDictEqual(platform._sys_version_cache, {})
|
||||||
|
self.assertIsNone(platform._uname_cache)
|
||||||
|
self.assertIsNone(platform._os_release_cache)
|
||||||
|
|
||||||
def test_architecture(self):
|
def test_architecture(self):
|
||||||
res = platform.architecture()
|
res = platform.architecture()
|
||||||
|
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
Add :func:`platform.invalidate_caches` to invalidate cached results.
|
Loading…
Reference in New Issue
Block a user