40 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import abc
 | |
| 
 | |
| from pip._internal.index.package_finder import PackageFinder
 | |
| from pip._internal.metadata.base import BaseDistribution
 | |
| from pip._internal.req import InstallRequirement
 | |
| 
 | |
| 
 | |
| class AbstractDistribution(metaclass=abc.ABCMeta):
 | |
|     """A base class for handling installable artifacts.
 | |
| 
 | |
|     The requirements for anything installable are as follows:
 | |
| 
 | |
|      - we must be able to determine the requirement name
 | |
|        (or we can't correctly handle the non-upgrade case).
 | |
| 
 | |
|      - for packages with setup requirements, we must also be able
 | |
|        to determine their requirements without installing additional
 | |
|        packages (for the same reason as run-time dependencies)
 | |
| 
 | |
|      - we must be able to create a Distribution object exposing the
 | |
|        above metadata.
 | |
|     """
 | |
| 
 | |
|     def __init__(self, req: InstallRequirement) -> None:
 | |
|         super().__init__()
 | |
|         self.req = req
 | |
| 
 | |
|     @abc.abstractmethod
 | |
|     def get_metadata_distribution(self) -> BaseDistribution:
 | |
|         raise NotImplementedError()
 | |
| 
 | |
|     @abc.abstractmethod
 | |
|     def prepare_distribution_metadata(
 | |
|         self,
 | |
|         finder: PackageFinder,
 | |
|         build_isolation: bool,
 | |
|         check_build_deps: bool,
 | |
|     ) -> None:
 | |
|         raise NotImplementedError()
 | 
