summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexis Metaireau <ametaireau@gmail.com>2010-07-27 18:08:46 +0200
committerAlexis Metaireau <ametaireau@gmail.com>2010-07-27 18:08:46 +0200
commit69dbcac171e905a2ce0109f514d75ef9699eb796 (patch)
tree8ad6c3152070f75e54f97433d993e9cd27e257b1 /src
parent36197b9fa46a8771b267b339c930b92c59000d27 (diff)
downloaddisutils2-69dbcac171e905a2ce0109f514d75ef9699eb796.tar.gz
Add a way to get the metadatas by downloading and opening archives.
Hope this can be avoided in a near future, as it implies to download the full archive, extract it to get the PKG-INFO file into it.
Diffstat (limited to 'src')
-rw-r--r--src/distutils2/index/dist.py25
-rw-r--r--src/distutils2/index/simple.py2
2 files changed, 21 insertions, 6 deletions
diff --git a/src/distutils2/index/dist.py b/src/distutils2/index/dist.py
index 9d1a194..70e6dbd 100644
--- a/src/distutils2/index/dist.py
+++ b/src/distutils2/index/dist.py
@@ -17,6 +17,7 @@ import tempfile
import urllib
import urlparse
import zipfile
+import os
try:
import hashlib
@@ -39,7 +40,7 @@ DIST_TYPES = ['bdist', 'sdist']
class ReleaseInfo(object):
"""Represent a release of a project (a project with a specific version).
- The release contain the metadata informations related to this specific
+ The release contain the _metadata informations related to this specific
version, and is also a container for distribution related informations.
See the DistInfo class for more information about distributions.
@@ -56,7 +57,10 @@ class ReleaseInfo(object):
self.name = name
self._version = None
self.version = version
- self.metadata = DistributionMetadata(mapping=metadata)
+ if metadata:
+ self._metadata = DistributionMetadata(mapping=metadata)
+ else:
+ self._metadata = None
self.dists = {}
self.hidden = hidden
@@ -79,6 +83,18 @@ class ReleaseInfo(object):
version = property(get_version, set_version)
+ def _set_metadata(self, unpack=True):
+ """Set the metadatas, using the archive if needed"""
+ location = self.get_distribution().unpack()
+ pkg_info = os.path.join(location, 'PKG-INFO')
+ self._metadata = DistributionMetadata(pkg_info)
+
+ @property
+ def metadata(self):
+ if not self._metadata:
+ self._set_metadata()
+ return self._metadata
+
@property
def is_final(self):
"""proxy to version.is_final"""
@@ -137,7 +153,7 @@ class ReleaseInfo(object):
.download(path=temp_path)
def set_metadata(self, metadata):
- self.metadata.update(metadata)
+ self._metadata.update(metadata)
def __getitem__(self, item):
"""distributions are available using release["sdist"]"""
@@ -326,8 +342,7 @@ class ReleasesList(list):
"""Filter and return a subset of releases matching the given predicate.
"""
return ReleasesList(self.name, [release for release in self
- if release.name == predicate.name
- and predicate.match(release.version)])
+ if predicate.match(release.version)])
def get_last(self, predicate, prefer_final=None):
"""Return the "last" release, that satisfy the given predicates.
diff --git a/src/distutils2/index/simple.py b/src/distutils2/index/simple.py
index 03f455a..307236e 100644
--- a/src/distutils2/index/simple.py
+++ b/src/distutils2/index/simple.py
@@ -160,7 +160,7 @@ class Crawler(BaseClient):
if not self._projects.has_key(predicate.name.lower()):
raise ProjectNotFound()
-
+
releases = self._projects.get(predicate.name.lower())
releases.sort_releases(prefer_final=prefer_final)
return releases