[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