dev-python/re-assert: Improve the re fallback patch

Improve the `re` fallback patch to use it on PyPy even if `regex`
is available.  Fix returning some failure message when match fails.
Update the dependency in `setup.cfg` as well.  Deselect tests that
rely on `regex`-specific output.

Signed-off-by: Michał Górny <mgorny@gentoo.org>
This commit is contained in:
Michał Górny
2024-02-10 13:14:51 +01:00
parent 4db41fd88a
commit 0a20229a63
2 changed files with 53 additions and 4 deletions

View File

@@ -1,16 +1,42 @@
diff --git a/re_assert.py b/re_assert.py
index f6ea6b9..66479c3 100644
index 840401e..8818da1 100644
--- a/re_assert.py
+++ b/re_assert.py
@@ -3,7 +3,10 @@ from __future__ import annotations
@@ -1,8 +1,13 @@
+import sys
+
from typing import Any
from typing import Optional
from typing import Pattern
-import regex
+try:
+if sys.implementation.name == "cpython":
+ import regex
+except ImportError:
+else:
+ import re as regex
class Matches: # TODO: Generic[AnyStr] (binary pattern support)
@@ -12,6 +17,9 @@ class Matches: # TODO: Generic[AnyStr] (binary pattern support)
self._type = type(pattern)
def _fail_message(self, fail: str) -> str:
+ if sys.implementation.name != "cpython":
+ return "regex failed to match"
+
# binary search to find the longest substring match
pos, bound = 0, len(fail)
while pos < bound:
diff --git a/setup.cfg b/setup.cfg
index 46303ca..74cf999 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -20,7 +20,7 @@ classifiers =
[options]
py_modules = re_assert
install_requires =
- regex
+ regex; python_implementation=="CPython"
python_requires = >=3.6.1
[bdist_wheel]

View File

@@ -34,3 +34,26 @@ PATCHES=(
# use `re` as fallback since `regex` doesn't support PyPy
"${FILESDIR}/${P}-re-fallback.patch"
)
python_test() {
local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
local EPYTEST_DESELECT=()
case ${EPYTHON} in
pypy3)
EPYTEST_DESELECT+=(
# message/repr mismatches due to using `re` module
tests/re_assert_test.py::test_fail_at_beginning
tests/re_assert_test.py::test_fail_at_end_of_line
tests/re_assert_test.py::test_fail_at_end_of_line_mismatching_newline
tests/re_assert_test.py::test_fail_end_of_line_with_newline
tests/re_assert_test.py::test_fail_multiple_lines
tests/re_assert_test.py::test_match_with_tabs
tests/re_assert_test.py::test_matches_repr_with_flags
tests/re_assert_test.py::test_repr_with_failure
)
;;
esac
epytest
}