mirror of https://github.com/python/cpython
92 lines
1.8 KiB
Python
92 lines
1.8 KiB
Python
import functools
|
|
|
|
from ._helpers import StubClass, stub_factory
|
|
|
|
|
|
class StubStrategy(StubClass):
|
|
def __make_trailing_repr(self, transformation_name, func):
|
|
func_name = func.__name__ or repr(func)
|
|
return f"{self!r}.{transformation_name}({func_name})"
|
|
|
|
def map(self, pack):
|
|
return self._with_repr(self.__make_trailing_repr("map", pack))
|
|
|
|
def flatmap(self, expand):
|
|
return self._with_repr(self.__make_trailing_repr("flatmap", expand))
|
|
|
|
def filter(self, condition):
|
|
return self._with_repr(self.__make_trailing_repr("filter", condition))
|
|
|
|
def __or__(self, other):
|
|
new_repr = f"one_of({self!r}, {other!r})"
|
|
return self._with_repr(new_repr)
|
|
|
|
|
|
_STRATEGIES = {
|
|
"binary",
|
|
"booleans",
|
|
"builds",
|
|
"characters",
|
|
"complex_numbers",
|
|
"composite",
|
|
"data",
|
|
"dates",
|
|
"datetimes",
|
|
"decimals",
|
|
"deferred",
|
|
"dictionaries",
|
|
"emails",
|
|
"fixed_dictionaries",
|
|
"floats",
|
|
"fractions",
|
|
"from_regex",
|
|
"from_type",
|
|
"frozensets",
|
|
"functions",
|
|
"integers",
|
|
"iterables",
|
|
"just",
|
|
"lists",
|
|
"none",
|
|
"nothing",
|
|
"one_of",
|
|
"permutations",
|
|
"random_module",
|
|
"randoms",
|
|
"recursive",
|
|
"register_type_strategy",
|
|
"runner",
|
|
"sampled_from",
|
|
"sets",
|
|
"shared",
|
|
"slices",
|
|
"timedeltas",
|
|
"times",
|
|
"text",
|
|
"tuples",
|
|
"uuids",
|
|
}
|
|
|
|
__all__ = sorted(_STRATEGIES)
|
|
|
|
|
|
def composite(f):
|
|
strategy = stub_factory(StubStrategy, f.__name__)
|
|
|
|
@functools.wraps(f)
|
|
def inner(*args, **kwargs):
|
|
return strategy(*args, **kwargs)
|
|
|
|
return inner
|
|
|
|
|
|
def __getattr__(name):
|
|
if name not in _STRATEGIES:
|
|
raise AttributeError(f"Unknown attribute {name}")
|
|
|
|
return stub_factory(StubStrategy, f"hypothesis.strategies.{name}")
|
|
|
|
|
|
def __dir__():
|
|
return __all__
|