diff options
| author | Alexis Metaireau <ametaireau@gmail.com> | 2010-07-27 18:08:46 +0200 |
|---|---|---|
| committer | Alexis Metaireau <ametaireau@gmail.com> | 2010-07-27 18:08:46 +0200 |
| commit | 69dbcac171e905a2ce0109f514d75ef9699eb796 (patch) | |
| tree | 8ad6c3152070f75e54f97433d993e9cd27e257b1 /src | |
| parent | 36197b9fa46a8771b267b339c930b92c59000d27 (diff) | |
| download | disutils2-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.py | 25 | ||||
| -rw-r--r-- | src/distutils2/index/simple.py | 2 |
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 |
