[python-debian/master 18/36] Use six to paper over dict iteration differences between Python 2 and 3.

Colin Watson cjwatson at canonical.com
Mon Oct 8 07:41:24 UTC 2012


In some cases it makes more sense to just use .items() instead and not
worry about the extra copy, but I suspect that would have performance
problems in the case of debtags.
---
 debian/control               |    4 ++--
 examples/deb822/render-dctrl |    2 +-
 examples/debfile/dpkg-info   |    2 +-
 lib/debian/debtags.py        |   22 ++++++++++++----------
 setup.py.in                  |    1 +
 tests/test_deb822.py         |    8 +++++---
 6 files changed, 22 insertions(+), 17 deletions(-)

diff --git a/debian/control b/debian/control
index 9132d4a..072e3cc 100644
--- a/debian/control
+++ b/debian/control
@@ -8,7 +8,7 @@ Uploaders: Adeodato Simó <dato at net.com.org.es>,
  Reinhard Tartler <siretart at tauware.de>,
  Stefano Zacchiroli <zack at debian.org>,
  John Wright <jsw at debian.org>
-Build-Depends: debhelper (>= 5.0.37.2), python (>= 2.6.6-3~), python-setuptools, python-chardet
+Build-Depends: debhelper (>= 5.0.37.2), python (>= 2.6.6-3~), python-setuptools, python-chardet, python-six
 Standards-Version: 3.8.4
 Vcs-Browser: http://git.debian.org/?p=pkg-python-debian/python-debian.git
 Vcs-Git: git://git.debian.org/git/pkg-python-debian/python-debian.git
@@ -16,7 +16,7 @@ X-Python-Version: >= 2.5
 
 Package: python-debian
 Architecture: all
-Depends: ${python:Depends}, ${misc:Depends}, python-chardet
+Depends: ${python:Depends}, ${misc:Depends}, python-chardet, python-six
 Recommends: python-apt
 Suggests: gpgv
 Provides: python-deb822
diff --git a/examples/deb822/render-dctrl b/examples/deb822/render-dctrl
index 6ed4e55..face980 100755
--- a/examples/deb822/render-dctrl
+++ b/examples/deb822/render-dctrl
@@ -157,7 +157,7 @@ def render_file(f):
     for pkg in deb822.Packages.iter_paragraphs(f):
         print('<div class="package">')
         print('<dl class="fields">')
-        for (field, val) in pkg.iteritems():
+        for (field, val) in pkg.items():
             render_field(field, val)
         print('</dl>')
         print('</div>\n')
diff --git a/examples/debfile/dpkg-info b/examples/debfile/dpkg-info
index d98999a..1b6632e 100755
--- a/examples/debfile/dpkg-info
+++ b/examples/debfile/dpkg-info
@@ -44,7 +44,7 @@ if __name__ == '__main__':
             pass
         print('  %d bytes, %d lines, %s, %s' % (len(content), len(lines),
                 fname, ftype))
-    for n, v in deb.debcontrol().iteritems(): # print DEBIAN/control fields
+    for n, v in deb.debcontrol().items(): # print DEBIAN/control fields
         if n.lower() == 'description':  # increase indentation of long dsc
             lines = v.split('\n')
             short_dsc = lines[0]
diff --git a/lib/debian/debtags.py b/lib/debian/debtags.py
index cb78988..9dca3e9 100644
--- a/lib/debian/debtags.py
+++ b/lib/debian/debtags.py
@@ -23,6 +23,8 @@ try:
 except ImportError:
     import pickle
 
+import six
+
 from debian.deprecation import function_deprecated_by
 
 def parse_tags(input):
@@ -265,7 +267,7 @@ class DB:
 		"""
 		res = DB()
 		db = {}
-		for pkg in filter(package_filter, self.db.iterkeys()):
+		for pkg in filter(package_filter, six.iterkeys(self.db)):
 			db[pkg] = self.db[pkg]
 		res.db = db
 		res.rdb = reverse(db)
@@ -281,7 +283,7 @@ class DB:
 		"""
 		res = DB()
 		db = {}
-		for pkg in filter(filter, self.db.iterkeys()):
+		for pkg in filter(filter, six.iterkeys(self.db)):
 			db[pkg] = self.db[pkg].copy()
 		res.db = db
 		res.rdb = reverse(db)
@@ -297,7 +299,7 @@ class DB:
 		"""
 		res = DB()
 		db = {}
-		for pkg, tags in filter(package_tag_filter, self.db.iteritems()):
+		for pkg, tags in filter(package_tag_filter, six.iteritems(self.db)):
 			db[pkg] = self.db[pkg]
 		res.db = db
 		res.rdb = reverse(db)
@@ -313,7 +315,7 @@ class DB:
 		"""
 		res = DB()
 		db = {}
-		for pkg, tags in filter(package_tag_filter, self.db.iteritems()):
+		for pkg, tags in filter(package_tag_filter, six.iteritems(self.db)):
 			db[pkg] = self.db[pkg].copy()
 		res.db = db
 		res.rdb = reverse(db)
@@ -329,7 +331,7 @@ class DB:
 		"""
 		res = DB()
 		rdb = {}
-		for tag in filter(tag_filter, self.rdb.iterkeys()):
+		for tag in filter(tag_filter, six.iterkeys(self.rdb)):
 			rdb[tag] = self.rdb[tag]
 		res.rdb = rdb
 		res.db = reverse(rdb)
@@ -345,7 +347,7 @@ class DB:
 		"""
 		res = DB()
 		rdb = {}
-		for tag in filter(tag_filter, self.rdb.iterkeys()):
+		for tag in filter(tag_filter, six.iterkeys(self.rdb)):
 			rdb[tag] = self.rdb[tag].copy()
 		res.rdb = rdb
 		res.db = reverse(rdb)
@@ -422,25 +424,25 @@ class DB:
 
 	def iter_packages(self):
 		"""Iterate over the packages"""
-		return self.db.iterkeys()
+		return six.iterkeys(self.db)
 
 	iterPackages = function_deprecated_by(iter_packages)
 
 	def iter_tags(self):
 		"""Iterate over the tags"""
-		return self.rdb.iterkeys()
+		return six.iterkeys(self.rdb)
 
 	iterTags = function_deprecated_by(iter_tags)
 
 	def iter_packages_tags(self):
 		"""Iterate over 2-tuples of (pkg, tags)"""
-		return self.db.iteritems()
+		return six.iteritems(self.db)
 
 	iterPackagesTags = function_deprecated_by(iter_packages_tags)
 
 	def iter_tags_packages(self):
 		"""Iterate over 2-tuples of (tag, pkgs)"""
-		return self.rdb.iteritems()
+		return six.iteritems(self.rdb)
 
 	iterTagsPackages = function_deprecated_by(iter_tags_packages)
 
diff --git a/setup.py.in b/setup.py.in
index 0bf6475..67423a3 100644
--- a/setup.py.in
+++ b/setup.py.in
@@ -27,4 +27,5 @@ setup(name='python-debian',
       py_modules=['deb822'],
       maintainer='Debian python-debian Maintainers',
       maintainer_email='pkg-python-debian-maint at lists.alioth.debian.org',
+      install_requires=['six'],
      )
diff --git a/tests/test_deb822.py b/tests/test_deb822.py
index 60ca13f..ed030e7 100755
--- a/tests/test_deb822.py
+++ b/tests/test_deb822.py
@@ -30,6 +30,8 @@ try:
 except ImportError:
     from io import StringIO
 
+import six
+
 sys.path.insert(0, '../lib/')
 
 from debian import deb822
@@ -310,9 +312,9 @@ class TestDeb822Dict(unittest.TestCase):
 
         keys = ['TestKey', 'another_key', 'Third_key']
 
-        self.assertEqual(keys, d.keys())
-        self.assertEqual(keys, list(d.iterkeys()))
-        self.assertEqual(zip(keys, d.values()), d.items())
+        self.assertEqual(keys, list(d.keys()))
+        self.assertEqual(keys, list(six.iterkeys(d)))
+        self.assertEqual(list(zip(keys, d.values())), list(d.items()))
 
         keys2 = []
         for key in d:
-- 
1.7.2.5





More information about the pkg-python-debian-commits mailing list