mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	
		
			
	
	
		
			115 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
		
		
			
		
	
	
			115 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| 
								 | 
							
								:mod:`packaging.pypi.dist` --- Classes representing query results
							 | 
						||
| 
								 | 
							
								=================================================================
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.. module:: packaging.pypi.dist
							 | 
						||
| 
								 | 
							
								   :synopsis: Classes representing the results of queries to indexes.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Information coming from the indexes is held in instances of the classes defined
							 | 
						||
| 
								 | 
							
								in this module.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Keep in mind that each project (eg. FooBar) can have several releases
							 | 
						||
| 
								 | 
							
								(eg. 1.1, 1.2, 1.3), and each of these releases can be provided in multiple
							 | 
						||
| 
								 | 
							
								distributions (eg. a source distribution, a binary one, etc).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ReleaseInfo
							 | 
						||
| 
								 | 
							
								-----------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Each release has a project name, version, metadata, and related distributions.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This information is stored in :class:`ReleaseInfo`
							 | 
						||
| 
								 | 
							
								objects.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.. class:: ReleaseInfo
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								DistInfo
							 | 
						||
| 
								 | 
							
								---------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:class:`DistInfo` is a simple class that contains
							 | 
						||
| 
								 | 
							
								information related to distributions; mainly the URLs where distributions
							 | 
						||
| 
								 | 
							
								can be found.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.. class:: DistInfo
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ReleasesList
							 | 
						||
| 
								 | 
							
								------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The :mod:`~packaging.pypi.dist` module provides a class which works
							 | 
						||
| 
								 | 
							
								with lists of :class:`ReleaseInfo` classes;
							 | 
						||
| 
								 | 
							
								used to filter and order results.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.. class:: ReleasesList
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Example usage
							 | 
						||
| 
								 | 
							
								-------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Build a list of releases and order them
							 | 
						||
| 
								 | 
							
								^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Assuming we have a list of releases::
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   >>> from packaging.pypi.dist import ReleasesList, ReleaseInfo
							 | 
						||
| 
								 | 
							
								   >>> fb10 = ReleaseInfo("FooBar", "1.0")
							 | 
						||
| 
								 | 
							
								   >>> fb11 = ReleaseInfo("FooBar", "1.1")
							 | 
						||
| 
								 | 
							
								   >>> fb11a = ReleaseInfo("FooBar", "1.1a1")
							 | 
						||
| 
								 | 
							
								   >>> ReleasesList("FooBar", [fb11, fb11a, fb10])
							 | 
						||
| 
								 | 
							
								   >>> releases.sort_releases()
							 | 
						||
| 
								 | 
							
								   >>> releases.get_versions()
							 | 
						||
| 
								 | 
							
								   ['1.1', '1.1a1', '1.0']
							 | 
						||
| 
								 | 
							
								   >>> releases.add_release("1.2a1")
							 | 
						||
| 
								 | 
							
								   >>> releases.get_versions()
							 | 
						||
| 
								 | 
							
								   ['1.1', '1.1a1', '1.0', '1.2a1']
							 | 
						||
| 
								 | 
							
								   >>> releases.sort_releases()
							 | 
						||
| 
								 | 
							
								   ['1.2a1', '1.1', '1.1a1', '1.0']
							 | 
						||
| 
								 | 
							
								   >>> releases.sort_releases(prefer_final=True)
							 | 
						||
| 
								 | 
							
								   >>> releases.get_versions()
							 | 
						||
| 
								 | 
							
								   ['1.1', '1.0', '1.2a1', '1.1a1']
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Add distribution related information to releases
							 | 
						||
| 
								 | 
							
								^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								It's easy to add distribution information to releases::
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   >>> from packaging.pypi.dist import ReleasesList, ReleaseInfo
							 | 
						||
| 
								 | 
							
								   >>> r = ReleaseInfo("FooBar", "1.0")
							 | 
						||
| 
								 | 
							
								   >>> r.add_distribution("sdist", url="http://example.org/foobar-1.0.tar.gz")
							 | 
						||
| 
								 | 
							
								   >>> r.dists
							 | 
						||
| 
								 | 
							
								   {'sdist': FooBar 1.0 sdist}
							 | 
						||
| 
								 | 
							
								   >>> r['sdist'].url
							 | 
						||
| 
								 | 
							
								   {'url': 'http://example.org/foobar-1.0.tar.gz', 'hashname': None, 'hashval':
							 | 
						||
| 
								 | 
							
								   None, 'is_external': True}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Getting attributes from the dist objects
							 | 
						||
| 
								 | 
							
								^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								To abstract querying information returned from the indexes, attributes and
							 | 
						||
| 
								 | 
							
								release information can be retrieved directly from dist objects.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								For instance, if you have a release instance that does not contain the metadata
							 | 
						||
| 
								 | 
							
								attribute, it can be fetched by using the "fetch_metadata" method::
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   >>> r = Release("FooBar", "1.1")
							 | 
						||
| 
								 | 
							
								   >>> print r.metadata
							 | 
						||
| 
								 | 
							
								   None # metadata field is actually set to "None"
							 | 
						||
| 
								 | 
							
								   >>> r.fetch_metadata()
							 | 
						||
| 
								 | 
							
								   <Metadata for FooBar 1.1>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.. XXX add proper roles to these constructs
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								It's possible to retrieve a project's releases (`fetch_releases`),
							 | 
						||
| 
								 | 
							
								metadata (`fetch_metadata`) and distributions (`fetch_distributions`) using
							 | 
						||
| 
								 | 
							
								a similar work flow.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.. XXX what is possible?
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Internally, this is possible because while retrieving information about
							 | 
						||
| 
								 | 
							
								projects, releases or distributions, a reference to the client used is
							 | 
						||
| 
								 | 
							
								stored which can be accessed using the objects `_index` attribute.
							 |