You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					29 lines
				
				1.0 KiB
			
		
		
			
		
	
	
					29 lines
				
				1.0 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								import urllib.parse
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class PackageIndex:
							 | 
						||
| 
								 | 
							
								    """Represents a Package Index and provides easier access to endpoints"""
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    __slots__ = ["url", "netloc", "simple_url", "pypi_url", "file_storage_domain"]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def __init__(self, url: str, file_storage_domain: str) -> None:
							 | 
						||
| 
								 | 
							
								        super().__init__()
							 | 
						||
| 
								 | 
							
								        self.url = url
							 | 
						||
| 
								 | 
							
								        self.netloc = urllib.parse.urlsplit(url).netloc
							 | 
						||
| 
								 | 
							
								        self.simple_url = self._url_for_path("simple")
							 | 
						||
| 
								 | 
							
								        self.pypi_url = self._url_for_path("pypi")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        # This is part of a temporary hack used to block installs of PyPI
							 | 
						||
| 
								 | 
							
								        # packages which depend on external urls only necessary until PyPI can
							 | 
						||
| 
								 | 
							
								        # block such packages themselves
							 | 
						||
| 
								 | 
							
								        self.file_storage_domain = file_storage_domain
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def _url_for_path(self, path: str) -> str:
							 | 
						||
| 
								 | 
							
								        return urllib.parse.urljoin(self.url, path)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								PyPI = PackageIndex("https://pypi.org/", file_storage_domain="files.pythonhosted.org")
							 | 
						||
| 
								 | 
							
								TestPyPI = PackageIndex(
							 | 
						||
| 
								 | 
							
								    "https://test.pypi.org/", file_storage_domain="test-files.pythonhosted.org"
							 | 
						||
| 
								 | 
							
								)
							 |