mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	
		
			
	
	
		
			44 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			44 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | # Stub out only the subset of the interface that we actually use in our tests. | ||
|  | class StubClass: | ||
|  |     def __init__(self, *args, **kwargs): | ||
|  |         self.__stub_args = args | ||
|  |         self.__stub_kwargs = kwargs | ||
|  |         self.__repr = None | ||
|  | 
 | ||
|  |     def _with_repr(self, new_repr): | ||
|  |         new_obj = self.__class__(*self.__stub_args, **self.__stub_kwargs) | ||
|  |         new_obj.__repr = new_repr | ||
|  |         return new_obj | ||
|  | 
 | ||
|  |     def __repr__(self): | ||
|  |         if self.__repr is not None: | ||
|  |             return self.__repr | ||
|  | 
 | ||
|  |         argstr = ", ".join(self.__stub_args) | ||
|  |         kwargstr = ", ".join(f"{kw}={val}" for kw, val in self.__stub_kwargs.items()) | ||
|  | 
 | ||
|  |         in_parens = argstr | ||
|  |         if kwargstr: | ||
|  |             in_parens += ", " + kwargstr | ||
|  | 
 | ||
|  |         return f"{self.__class__.__qualname__}({in_parens})" | ||
|  | 
 | ||
|  | 
 | ||
|  | def stub_factory(klass, name, *, with_repr=None, _seen={}): | ||
|  |     if (klass, name) not in _seen: | ||
|  | 
 | ||
|  |         class Stub(klass): | ||
|  |             def __init__(self, *args, **kwargs): | ||
|  |                 super().__init__() | ||
|  |                 self.__stub_args = args | ||
|  |                 self.__stub_kwargs = kwargs | ||
|  | 
 | ||
|  |         Stub.__name__ = name | ||
|  |         Stub.__qualname__ = name | ||
|  |         if with_repr is not None: | ||
|  |             Stub._repr = None | ||
|  | 
 | ||
|  |         _seen.setdefault((klass, name, with_repr), Stub) | ||
|  | 
 | ||
|  |     return _seen[(klass, name, with_repr)] |