from abc import ABCMeta
from .version import VersionInfo
from ...system import python_version, package_version, is_windows, is_linux, is_darwin, is_cpython, is_pypy, \
is_ironpython, is_jython
__all__ = [
'vpython', 'vpip',
'OS', 'Impl',
]
vpython = VersionInfo(lambda: python_version())
vpython.__doc__ = """
Overview:
Python version expression.
Examples::
>>> import platform
>>> import unittest
>>> from hbutils.testing import vpython
>>>
>>> class TestMyCase(unittest.TestCase): # on python 3.6
... def test_anytime(self):
... assert 2 + 1 == 3
...
... @unittest.skipUnless('3.6' <= vpython < '3.7', 'py36 only') # will run
... def test_on_python36(self):
... assert platform.python_version_tuple()[:2] == ('3', '6')
...
... @unittest.skipUnless('3.7' <= vpython < '3.8', 'py37 only') # will skip
... def test_on_python37(self):
... assert platform.python_version_tuple()[:2] == ('3', '7')
...
>>> unittest.main()
..s
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK (skipped=1)
"""
class PipVersionInfo(VersionInfo):
def __call__(self, name: str) -> VersionInfo:
return VersionInfo(lambda: package_version(name))
vpip = PipVersionInfo(lambda: package_version('pip'))
vpip.__doc__ = """
Overview:
Pip version expression
Examples::
>>> import unittest
>>> from hbutils.testing import vpip
>>>
>>> class TestMyCase(unittest.TestCase):
... def test_1_anytime(self):
... assert 2 + 1 == 3
...
... @unittest.skipUnless(vpip >= '21', 'pip21+ only') # pip>=21
... def test_2_on_pip21plus(self):
... assert True
...
... @unittest.skipUnless(vpip('pip') >= '21', 'pip21+ only') # the same as above
... def test_3_on_pip21plus2(self):
... assert True
...
... @unittest.skipUnless(vpip('setuptools') >= '45' or vpip('build') >= '0.8', '') # setuptools>=45 or build>=0.8
... def test_4_on_setuptools_or_build(self):
... assert True
...
... @unittest.skipUnless(not vpip and vpip('build') >= '0.8', '') # pip not installed, and build>=0.8
... def test_5_on_nopip_and_build(self):
... assert True
...
>>> unittest.main()
....s
----------------------------------------------------------------------
Ran 5 tests in 0.000s
OK (skipped=1)
"""
[docs]class OS(metaclass=ABCMeta):
"""
Overview:
Expressions for operating system.
Examples::
>>> import unittest
>>> from hbutils.testing import OS
>>>
>>> class TestMyCase(unittest.TestCase): # on Linux
... def test_1_anytime(self):
... assert 2 + 1 == 3
...
... @unittest.skipUnless(OS.linux, 'linux only') # only run on Linux
... def test_2_linux(self):
... assert True
...
... @unittest.skipUnless(OS.windows, 'windows only') # only run on Windows
... def test_2_windows(self):
... assert True
...
... @unittest.skipUnless(OS.macos, 'macos only') # only run on macOS
... def test_4_macos(self):
... assert True
...
>>> unittest.main()
..ss
----------------------------------------------------------------------
Ran 4 tests in 0.001s
OK (skipped=2)
"""
windows = is_windows()
"""
Is windows system or not, related to your local OS.
"""
linux = is_linux()
"""
Is linux system or not, related to your local OS.
"""
darwin = is_darwin()
"""
Is darwin (macos) system or not, related to your local OS.
"""
macos = darwin
"""
Alias for ``OS.darwin``.
"""
[docs]class Impl:
"""
Overview:
Expression for python implementation.
See `platform.python_implementation() \
<https://docs.python.org/3/library/platform.html#platform.python_implementation>`_ .
Examples::
>>> import unittest
from hbutils.testing import Impl
>>>
>>> class TestMyCase(unittest.TestCase): # on CPython
... def test_1_anytime(self):
... assert 2 + 1 == 3
...
... @unittest.skipUnless(Impl.cpython, 'cpython only') # only run on CPython
... def test_2_cpython(self):
... assert True
...
... @unittest.skipUnless(Impl.pypy, 'pypy only') # only run on PyPy
... def test_3_pypy(self):
... assert True
...
... @unittest.skipUnless(Impl.iron_python, 'ironpython only') # only run on IronPython
... def test_4_ironpython(self):
... assert True
...
... @unittest.skipUnless(Impl.jython, 'jython only') # only run on Jython
... def test_5_jython(self):
... assert True
...
>>> unittest.main()
..sss
----------------------------------------------------------------------
Ran 5 tests in 0.000s
OK (skipped=3)
"""
cpython = is_cpython()
"""
Is CPython (most-frequently-used python) or not, related to your local python.
"""
iron_python = is_ironpython()
"""
Is IronPython or not, related to your local python.
"""
jython = is_jython()
"""
Is Jython (java-based python) or not, related to your local python.
"""
pypy = is_pypy()
"""
Is PyPy or not, related to your local python.
"""