[Python-checkins] distutils2: Remove property lazy loading for indexes.
tarek.ziade
python-checkins at python.org
Sun Aug 8 11:50:47 CEST 2010
tarek.ziade pushed e270dcf660b2 to distutils2:
http://hg.python.org/distutils2/rev/e270dcf660b2
changeset: 500:e270dcf660b2
user: Alexis Metaireau <ametaireau at gmail.com>
date: Fri Aug 06 17:10:25 2010 +0200
summary: Remove property lazy loading for indexes.
files: docs/source/projects-index.dist.rst, docs/source/projects-index.xmlrpc.rst, src/distutils2/index/dist.py
diff --git a/docs/source/projects-index.dist.rst b/docs/source/projects-index.dist.rst
--- a/docs/source/projects-index.dist.rst
+++ b/docs/source/projects-index.dist.rst
@@ -84,26 +84,27 @@
{'url': 'http://example.org/foobar-1.0.tar.gz', 'hashname': None, 'hashval':
None, 'is_external': True}
-Attributes Lazy loading
------------------------
+Getting attributes from the dist objects
+-----------------------------------------
To abstract a maximum the way of querying informations to the indexes,
-attributes and releases informations can be retrieved "on demand", in a "lazy"
-way.
+attributes and releases informations can be retrieved directly from the objects
+returned by the indexes.
For instance, if you have a release instance that does not contain the metadata
-attribute, it can be build directly when accedded::
+attribute, it can be fetched by using the "fetch_metadata" method::
>>> r = Release("FooBar", "1.1")
- >>> print r._metadata
+ >>> print r.metadata
None # metadata field is actually set to "None"
- >>> r.metadata
+ >>> r.fetch_metadata()
<Metadata for FooBar 1.1>
-Like this, it's possible to retrieve project's releases, releases metadata and
-releases distributions informations.
+Like this, it's possible to retrieve project's releases (`fetch_releases`),
+releases metadata (`fetch_metadata` and releases distributions
+(`fetch_distributions` informations).
Internally, this is possible because while retrieving for the first time
informations about projects, releases or distributions, a reference to the
-client used is stored in the objects. Then, while trying to access undefined
-fields, it will be used if necessary.
+client used is stored in the objects (can be accessed using the object
+`_index` attribute.
diff --git a/docs/source/projects-index.xmlrpc.rst b/docs/source/projects-index.xmlrpc.rst
--- a/docs/source/projects-index.xmlrpc.rst
+++ b/docs/source/projects-index.xmlrpc.rst
@@ -126,24 +126,3 @@
As you see, this does not return a list of distributions, but a release,
because a release can be used like a list of distributions.
-
-Lazy load information from project, releases and distributions.
-----------------------------------------------------------------
-
-.. note:: The lazy loading feature is not currently available !
-
-As :mod:`distutils2.index.dist` classes support "lazy" loading of
-informations, you can use it while retrieving informations from XML-RPC.
-
-For instance, it's possible to get all the releases for a project, and to access
-directly the metadata of each release, without making
-:class:`distutils2.index.xmlrpc.Client` directly (they will be made, but they're
-invisible to the you)::
-
- >>> client = xmlrpc.Client()
- >>> releases = client.get_releases("FooBar")
- >>> releases.get_release("1.1").metadata
- <Metadata for FooBar 1.1>
-
-Refer to the :mod:`distutils2.index.dist` documentation for more information
-about attributes lazy loading.
diff --git a/src/distutils2/index/dist.py b/src/distutils2/index/dist.py
--- a/src/distutils2/index/dist.py
+++ b/src/distutils2/index/dist.py
@@ -65,10 +65,10 @@
self._version = None
self.version = version
if metadata:
- self._metadata = DistributionMetadata(mapping=metadata)
+ self.metadata = DistributionMetadata(mapping=metadata)
else:
- self._metadata = None
- self._dists = {}
+ self.metadata = None
+ self.dists = {}
self.hidden = hidden
if 'dist_type' in kwargs:
@@ -90,25 +90,23 @@
version = property(get_version, set_version)
- @property
- def metadata(self):
+ def fetch_metadata(self):
"""If the metadata is not set, use the indexes to get it"""
- if not self._metadata:
+ if not self.metadata:
self._index.get_metadata(self.name, '%s' % self.version)
- return self._metadata
+ return self.metadata
@property
def is_final(self):
"""proxy to version.is_final"""
return self.version.is_final
- @property
- def dists(self):
- if self._dists is None:
+ def fetch_distributions(self):
+ if self.dists is None:
self._index.get_distributions(self.name, '%s' % self.version)
- if self._dists is None:
- self._dists = {}
- return self._dists
+ if self.dists is None:
+ self.dists = {}
+ return self.dists
def add_distribution(self, dist_type='sdist', python_version=None, **params):
"""Add distribution informations to this release.
@@ -123,12 +121,12 @@
if dist_type not in DIST_TYPES:
raise ValueError(dist_type)
if dist_type in self.dists:
- self._dists[dist_type].add_url(**params)
+ self.dists[dist_type].add_url(**params)
else:
- self._dists[dist_type] = DistInfo(self, dist_type,
+ self.dists[dist_type] = DistInfo(self, dist_type,
index=self._index, **params)
if python_version:
- self._dists[dist_type].python_version = python_version
+ self.dists[dist_type].python_version = python_version
def get_distribution(self, dist_type=None, prefer_source=True):
"""Return a distribution.
@@ -164,9 +162,9 @@
.download(path=temp_path)
def set_metadata(self, metadata):
- if not self._metadata:
- self._metadata = DistributionMetadata()
- self._metadata.update(metadata)
+ if not self.metadata:
+ self.metadata = DistributionMetadata()
+ self.metadata.update(metadata)
def __getitem__(self, item):
"""distributions are available using release["sdist"]"""
@@ -352,18 +350,12 @@
"""
def __init__(self, name, releases=None, contains_hidden=False, index=None):
self.set_index(index)
- self._releases = []
+ self.releases = []
self.name = name
self.contains_hidden = contains_hidden
if releases:
self.add_releases(releases)
- @property
- def releases(self):
- if not self._releases:
- self.fetch_releases()
- return self._releases
-
def fetch_releases(self):
self._index.get_releases(self.name)
return self.releases
@@ -414,16 +406,16 @@
if not version in self.get_versions():
# append only if not already exists
- self._releases.append(release)
+ self.releases.append(release)
for dist in release.dists.values():
for url in dist.urls:
self.add_release(version, dist.dist_type, **url)
else:
- matches = [r for r in self._releases if '%s' % r.version == version
+ matches = [r for r in self.releases if '%s' % r.version == version
and r.name == self.name]
if not matches:
release = ReleaseInfo(self.name, version, index=self._index)
- self._releases.append(release)
+ self.releases.append(release)
else:
release = matches[0]
@@ -461,7 +453,7 @@
def get_versions(self):
"""Return a list of releases versions contained"""
- return ["%s" % r.version for r in self._releases]
+ return ["%s" % r.version for r in self.releases]
def __getitem__(self, key):
return self.releases[key]
--
Repository URL: http://hg.python.org/distutils2
More information about the Python-checkins
mailing list