+from typing import Callable, Tuple
+
+
+__all__ = ("no_less_than",)
+
+
+def no_less_than(base: str) -> Callable[[str], bool]:
+ def _no_less_than(base: str, what: str) -> bool:
+ bl, wl = (
+ tuple((int(el) for el in s.split("."))) for s in (base, what)
+ )
+
+ def __no_less_than(bl: Tuple[int, ...], wl: Tuple[int, ...]) -> bool:
+ if len(bl) == 0 and len(wl) == 0:
+ return True
+ if (len(bl) == 0) != (len(wl) == 0):
+ return len(bl) < len(wl)
+ # At this point both lists are non-empty
+ if bl[0] == wl[0]:
+ return __no_less_than(bl[1:], wl[1:])
+ return bl[0] < wl[0]
+
+ return __no_less_than(bl, wl)
+
+ return lambda arg: _no_less_than(base, arg)
from shutil import which
from unittest import main, TestCase, skipUnless
-black_version = 0.0
+from . import no_less_than
+
+is_acceptable_verison = no_less_than("21.1")
+
+black_version = "0.0"
try:
vermatch = match("[\.\d]*", get_distribution("black").version)
if vermatch is not None:
- black_version = float(vermatch.group())
+ black_version = vermatch.group()
except DistributionNotFound:
pass
class BlackFormatter(TestCase):
- @skipUnless(black_version >= 21.1, "Do not trust earlier black versions")
+ @skipUnless(
+ is_acceptable_verison(black_version),
+ "Do not trust earlier black versions",
+ )
def test_black(self) -> None:
if not which("black"):
self.fail(f"black not installed.")