bpo-41009: fix requires_OS_version() class decorator (GH-20942)

Signed-off-by: Christian Heimes <christian@python.org>

Automerge-Triggered-By: @tiran
This commit is contained in:
Christian Heimes 2020-06-17 19:09:10 +02:00 committed by GitHub
parent 8362893e3f
commit bb6ec14479
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 20 deletions

View file

@ -299,26 +299,25 @@ def _requires_unix_version(sysname, min_version):
For example, @_requires_unix_version('FreeBSD', (7, 2)) raises SkipTest if For example, @_requires_unix_version('FreeBSD', (7, 2)) raises SkipTest if
the FreeBSD version is less than 7.2. the FreeBSD version is less than 7.2.
""" """
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kw):
import platform import platform
if platform.system() == sysname: min_version_txt = '.'.join(map(str, min_version))
version_txt = platform.release().split('-', 1)[0] version_txt = platform.release().split('-', 1)[0]
if platform.system() == sysname:
try: try:
version = tuple(map(int, version_txt.split('.'))) version = tuple(map(int, version_txt.split('.')))
except ValueError: except ValueError:
pass skip = False
else: else:
if version < min_version: skip = version < min_version
min_version_txt = '.'.join(map(str, min_version)) else:
raise unittest.SkipTest( skip = False
"%s version %s or higher required, not %s"
% (sysname, min_version_txt, version_txt)) return unittest.skipIf(
return func(*args, **kw) skip,
wrapper.min_version = min_version f"{sysname} version {min_version_txt} or higher required, not "
return wrapper f"{version_txt}"
return decorator )
def requires_freebsd_version(*min_version): def requires_freebsd_version(*min_version):
"""Decorator raising SkipTest if the OS is FreeBSD and the FreeBSD version is """Decorator raising SkipTest if the OS is FreeBSD and the FreeBSD version is

View file

@ -0,0 +1,2 @@
Fix use of ``support.require_{linux|mac|freebsd}_version()`` decorators as
class decorator.