Skip to content

Commit 4dd8e69

Browse files
committed
Make reprs more accurate
1 parent c5fa7e9 commit 4dd8e69

File tree

2 files changed

+28
-12
lines changed

2 files changed

+28
-12
lines changed

Lib/test/support/_hypothesis_stubs/_helpers.py

+17-7
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,28 @@ def __init__(self, *args, **kwargs):
44
super().__init__()
55
self.__stub_args = args
66
self.__stub_kwargs = kwargs
7+
self.__repr = None
8+
9+
def _with_repr(self, new_repr):
10+
new_obj = self.__class__(*self.__stub_args, **self.__stub_kwargs)
11+
new_obj.__repr = new_repr
12+
return new_obj
713

814
def __repr__(self):
15+
if self.__repr is not None:
16+
return self.__repr
17+
918
argstr = ", ".join(self.__stub_args)
10-
kwargstr = ", ".join(
11-
f"{kw}={val}" for kw, val in self.__stub_kwargs.items()
12-
)
19+
kwargstr = ", ".join(f"{kw}={val}" for kw, val in self.__stub_kwargs.items())
1320

1421
in_parens = argstr
1522
if kwargstr:
1623
in_parens += ", " + kwargstr
1724

18-
return f"{self.__qualname__}({in_parens})"
25+
return f"{self.__class__.__qualname__}({in_parens})"
1926

2027

21-
def stub_factory(klass, name, _seen={}):
28+
def stub_factory(klass, name, *, with_repr=None, _seen={}):
2229
if (klass, name) not in _seen:
2330

2431
class Stub(klass):
@@ -29,6 +36,9 @@ def __init__(self, *args, **kwargs):
2936

3037
Stub.__name__ = name
3138
Stub.__qualname__ = name
32-
_seen.setdefault((klass, name), Stub)
39+
if with_repr is not None:
40+
Stub._repr = None
41+
42+
_seen.setdefault((klass, name, with_repr), Stub)
3343

34-
return _seen[(klass, name)]
44+
return _seen[(klass, name, with_repr)]

Lib/test/support/_hypothesis_stubs/strategies.py

+11-5
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,22 @@
44

55

66
class StubStrategy(StubClass):
7+
def __make_trailing_repr(self, transformation_name, func):
8+
func_name = func.__name__ or repr(func)
9+
return f"{self!r}.{transformation_name}({func_name})"
10+
711
def map(self, pack):
8-
return self
12+
return self._with_repr(self.__make_trailing_repr("map", pack))
913

1014
def flatmap(self, expand):
11-
return self
15+
return self._with_repr(self.__make_trailing_repr("flatmap", expand))
1216

1317
def filter(self, condition):
14-
return self
18+
return self._with_repr(self.__make_trailing_repr("filter", condition))
1519

1620
def __or__(self, other):
17-
return self
21+
new_repr = f"one_of({self!r}, {other!r})"
22+
return self._with_repr(new_repr)
1823

1924

2025
_STRATEGIES = {
@@ -37,7 +42,8 @@ def __or__(self, other):
3742
"from_regex",
3843
"from_type",
3944
"frozensets",
40-
"functions" "integers",
45+
"functions",
46+
"integers",
4147
"iterables",
4248
"just",
4349
"lists",

0 commit comments

Comments
 (0)