mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
	
	
		
			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__ |