[Python-checkins] distutils2: #13166: Implement __str__ on Distribution and EggInfoDistribution, use for

eric.araujo python-checkins at python.org
Wed May 16 07:07:26 CEST 2012


http://hg.python.org/distutils2/rev/ff44594dd3c0
changeset:   1317:ff44594dd3c0
user:        Guillaume Pratte <guillaume at guillaumepratte.net>
date:        Sat Apr 21 17:43:54 2012 -0400
summary:
  #13166: Implement __str__ on Distribution and EggInfoDistribution, use for pysetup list, pysetup graph and installation log

files:
  CONTRIBUTORS.txt                  |   1 +
  distutils2/database.py            |   6 +++++
  distutils2/depgraph.py            |  10 +++-----
  distutils2/install.py             |   2 +-
  distutils2/run.py                 |   2 +-
  distutils2/tests/test_database.py |  21 ++++++++++++++++--
  6 files changed, 31 insertions(+), 11 deletions(-)


diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt
--- a/CONTRIBUTORS.txt
+++ b/CONTRIBUTORS.txt
@@ -59,6 +59,7 @@
 - Gaël Pasgrimaud
 - George Peristerakis
 - Mathieu Perreault
+- Guillaume Pratte
 - Sean Reifschneider
 - Antoine Reversat
 - Arc Riley
diff --git a/distutils2/database.py b/distutils2/database.py
--- a/distutils2/database.py
+++ b/distutils2/database.py
@@ -161,6 +161,9 @@
         return '<Distribution %r %s at %r>' % (
             self.name, self.version, self.path)
 
+    def __str__(self):
+        return "%s %s" % (self.name, self.version)
+
     def _get_records(self, local=False):
         results = []
         record = self.get_distinfo_file('RECORD')
@@ -365,6 +368,9 @@
         return '<EggInfoDistribution %r %s at %r>' % (
             self.name, self.version, self.path)
 
+    def __str__(self):
+        return "%s %s" % (self.name, self.version)
+
     def list_installed_files(self, local=False):
 
         def _md5(path):
diff --git a/distutils2/depgraph.py b/distutils2/depgraph.py
--- a/distutils2/depgraph.py
+++ b/distutils2/depgraph.py
@@ -71,18 +71,16 @@
         """
         self.missing[distribution].append(requirement)
 
-    def _repr_dist(self, dist):
-        return '%r %s' % (dist.name, dist.version)
-
     def repr_node(self, dist, level=1):
         """Prints only a subgraph"""
         output = []
-        output.append(self._repr_dist(dist))
+        output.append(str(dist))
+        # XXX: this code needs cleanup
         for other, label in self.adjacency_list[dist]:
-            dist = self._repr_dist(other)
+            dist = str(other)
             if label is not None:
                 dist = '%s [%s]' % (dist, label)
-            output.append('    ' * level + str(dist))
+            output.append('    ' * level + dist)
             suboutput = self.repr_node(other, level + 1)
             subs = suboutput.split('\n')
             output.extend(subs[1:])
diff --git a/distutils2/install.py b/distutils2/install.py
--- a/distutils2/install.py
+++ b/distutils2/install.py
@@ -183,7 +183,7 @@
 
     installed_dists = []
     for dist in dists:
-        logger.info('Installing %r %s...', dist.name, dist.version)
+        logger.info('Installing %s...', dist)
         try:
             _install_dist(dist, path)
             installed_dists.append(dist)
diff --git a/distutils2/run.py b/distutils2/run.py
--- a/distutils2/run.py
+++ b/distutils2/run.py
@@ -308,7 +308,7 @@
 
     number = 0
     for dist in results:
-        print '%r %s (from %r)' % (dist.name, dist.version, dist.path)
+        print "%s (from %r)" % (dist, dist.path)
         number += 1
 
     if number == 0:
diff --git a/distutils2/tests/test_database.py b/distutils2/tests/test_database.py
--- a/distutils2/tests/test_database.py
+++ b/distutils2/tests/test_database.py
@@ -80,12 +80,14 @@
     attributes are used in test methods.  See source code for details.
     """
 
+    def _get_dist_path(self, distdir):
+        here = os.path.abspath(os.path.dirname(__file__))
+        return os.path.join(here, 'fake_dists', distdir)
+
     def test_instantiation(self):
         # check that useful attributes are here
         name, version, distdir = self.sample_dist
-        here = os.path.abspath(os.path.dirname(__file__))
-        dist_path = os.path.join(here, 'fake_dists', distdir)
-
+        dist_path = self._get_dist_path(distdir)
         dist = self.dist = self.cls(dist_path)
         self.assertEqual(dist.path, dist_path)
         self.assertEqual(dist.name, name)
@@ -101,6 +103,17 @@
         self.assertIn(self.cls.__name__, repr(dist))
 
     @requires_zlib
+    def test_str(self):
+        name, version, distdir = self.sample_dist
+        dist = self.cls(self._get_dist_path(distdir))
+        self.assertEqual(name, dist.name)
+        # Sanity test: dist.name is unicode,
+        # but str output contains no u prefix.
+        self.assertIsInstance(dist.name, unicode)
+        self.assertEqual(version, dist.version)
+        self.assertEqual(str(dist), self.expected_str_output)
+
+    @requires_zlib
     def test_comparison(self):
         # tests for __eq__ and __hash__
         dist = self.cls(self.dirs[0])
@@ -128,6 +141,7 @@
 
     cls = Distribution
     sample_dist = 'choxie', '2.0.0.9', 'choxie-2.0.0.9.dist-info'
+    expected_str_output = 'choxie 2.0.0.9'
 
     def setUp(self):
         super(TestDistribution, self).setUp()
@@ -265,6 +279,7 @@
 
     cls = EggInfoDistribution
     sample_dist = 'bacon', '0.1', 'bacon-0.1.egg-info'
+    expected_str_output = 'bacon 0.1'
 
     def setUp(self):
         super(TestEggInfoDistribution, self).setUp()

-- 
Repository URL: http://hg.python.org/distutils2


More information about the Python-checkins mailing list