On Thu, Jan 02, 2014 at 01:49:39PM +0100, Michael Schaller wrote: > On 01/01/2014 05:44 PM, Michael Vogt wrote: > >On Wed, Jan 01, 2014 at 12:30:16PM +0100, Michael Schaller wrote: > >>A few comments on the patches: > > > >Thanks for your review and the points you raised. > > > You're welcome. I really like the idea to use Travis CI. Cool, attached is a new patchset that should address your points and Julians as well. > Thanks. Could you include the detailed messages for the error codes? > (taken from --show-pep8) [..] I added them. > IMHO those should be fixed too because they increase the readability > of the source code. You can try to fix those with autopep8. Thanks! I will give autopep8 a try later. [..] > Thanks for the good explanation. ^^ > BTW: Don't you need a '-q' for 'sudo apt-get install build-essential > $(gdebi -q --apt-line ./debian/control)', too? Good catch, thanks! Updated that too. The patchset includes your pep8/pyflakes patch as well to avoid conflicts. Lets see if Julian has further feedback and if he is also ok with the changes I will commit to the python-apt git upstream branch. Cheers, Michael
>From e1baaccebb1adfe67ed031b3d293f4d036bf60cb Mon Sep 17 00:00:00 2001
From: Michael Vogt <mvo@debian.org>
Date: Tue, 31 Dec 2013 10:06:22 +0100
Subject: [PATCH 1/7] make pep8 test part of the unittests
---
tests/test_pep8.py | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
create mode 100755 tests/test_pep8.py
diff --git a/tests/test_pep8.py b/tests/test_pep8.py
new file mode 100755
index 0000000..e6a672c
--- /dev/null
+++ b/tests/test_pep8.py
@@ -0,0 +1,27 @@
+import os
+import subprocess
+import unittest
+
+
+class PackagePep8TestCase(unittest.TestCase):
+
+ def test_all_code(self):
+ res = 0
+ py_dir = os.path.join(os.path.dirname(__file__), "..")
+ res += subprocess.call(
+ ["pep8",
+ # disable for now:
+ # E125 continuation line does not distinguish itself from
+ # next logical line
+ # E126 continuation line over-indented for hanging indent
+ # E127 continuation line over-indented for visual indent
+ # E128 continuation line under-indented for visual indent
+ "--ignore=E125,E126,E127,E128",
+ "--exclude", "build,tests/old",
+ "--repeat", py_dir])
+ if res != 0:
+ self.fail("pep8 failed with: %s" % res)
+
+
+if __name__ == "__main__":
+ unittest.main()
--
1.8.3.2
>From 9704f1c0bcf85468bc2e982c3971799a3a8b6a31 Mon Sep 17 00:00:00 2001
From: Michael Vogt <mvo@debian.org>
Date: Tue, 31 Dec 2013 21:36:26 +0100
Subject: [PATCH 2/7] add pyflakes test
---
tests/test_pyflakes.py | 41 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
create mode 100644 tests/test_pyflakes.py
diff --git a/tests/test_pyflakes.py b/tests/test_pyflakes.py
new file mode 100644
index 0000000..9c17a40
--- /dev/null
+++ b/tests/test_pyflakes.py
@@ -0,0 +1,41 @@
+#!/usr/bin/python3
+# -*- Mode: Python; indent-tabs-mode: nil; tab-width: 4; coding: utf-8 -*-
+
+import os
+import subprocess
+import unittest
+
+
+class TestPyflakesClean(unittest.TestCase):
+
+ EXCLUDES = ["build", "tests/old"]
+ TOPLEVEL = os.path.normpath(
+ os.path.join(os.path.dirname(os.path.abspath(__file__)), ".."))
+
+ def is_excluded_path(self, path):
+ for exclude in self.EXCLUDES:
+ if path.startswith(os.path.join(self.TOPLEVEL, exclude)):
+ return True
+ return False
+
+ def get_py_files(self, toplevel):
+ files = []
+ for path, dirnames, filenames in os.walk(self.TOPLEVEL):
+ if self.is_excluded_path(path):
+ continue
+ for filename in filenames:
+ if os.path.splitext(filename)[1] == ".py":
+ files.append(os.path.join(path, filename))
+ return files
+
+ def test_pyflakes_clean(self):
+ cmd = ["pyflakes"] + self.get_py_files(self.TOPLEVEL)
+ res = subprocess.call(cmd)
+ if res != 0:
+ self.fail("pyflakes failed with: %s" % res)
+
+
+if __name__ == "__main__":
+ import logging
+ logging.basicConfig(level=logging.DEBUG)
+ unittest.main()
--
1.8.3.2
>From 945c2b61fe4cb45d3cab62531e09dcfd4058c905 Mon Sep 17 00:00:00 2001
From: Michael Vogt <mvo@debian.org>
Date: Tue, 31 Dec 2013 22:34:54 +0100
Subject: [PATCH 3/7] add new pep8,pyflakes dependencies
---
debian/control | 4 +++-
debian/tests/control | 2 +-
po/python-apt.pot | 4 ++--
3 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/debian/control b/debian/control
index 8c2f2ce..f4f5211 100644
--- a/debian/control
+++ b/debian/control
@@ -18,7 +18,9 @@ Build-Depends: apt (>= 0.9.6),
python-distutils-extra (>= 2.0),
python-sphinx (>= 0.5),
python-debian,
- python-unittest2
+ python-unittest2,
+ pep8,
+ pyflakes
Vcs-Git: git://anonscm.debian.org/apt/python-apt.git
Vcs-Browser: http://anonscm.debian.org/gitweb/?p=apt/python-apt.git
XS-Testsuite: autopkgtest
diff --git a/debian/tests/control b/debian/tests/control
index 2ca0a40..bdca7d6 100644
--- a/debian/tests/control
+++ b/debian/tests/control
@@ -1,2 +1,2 @@
Tests: run-tests
-Depends: @, apt-utils, python-debian, fakeroot, intltool
+Depends: @, apt-utils, python-debian, fakeroot, intltool, pep8, pyflakes
diff --git a/po/python-apt.pot b/po/python-apt.pot
index 15f78b4..2d4f825 100644
--- a/po/python-apt.pot
+++ b/po/python-apt.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-10-23 20:26+0200\n"
+"POT-Creation-Date: 2013-12-31 22:31+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -661,6 +661,6 @@ msgstr ""
msgid "Please insert a Disc in the drive and press enter"
msgstr ""
-#: ../apt/cache.py:160
+#: ../apt/cache.py:164
msgid "Building data structures"
msgstr ""
--
1.8.3.2
>From c6704b7283060fd904e17069dcc1d29977f2390a Mon Sep 17 00:00:00 2001
From: Michael Vogt <mvo@debian.org>
Date: Tue, 31 Dec 2013 21:55:40 +0100
Subject: [PATCH 4/7] add .travis.yml & update python3 dependency to 3.3
This patch adds support for the travis-ci.org CI system.
The "C" environment in .travis.yml is used to avoid having PPA
python versions installed in the travis chroot.
python3.3 is needed so that test_paths.py runs
The tests_paths.py will only work with python3.3 as it uses
the u"" prefix
---
.travis.yml | 19 +++++++++++++++++++
debian/control | 6 +++---
po/python-apt.pot | 57 ++++++++++++++++++++++++++-----------------------------
3 files changed, 49 insertions(+), 33 deletions(-)
create mode 100644 .travis.yml
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..832b69e
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,19 @@
+# This provides integration into the travis-ci.org CI system. For a overview
+# check http://about.travis-ci.org/docs/user/getting-started/
+#
+# Some notes:
+# - language is "C" because the travis chroot for python installs a non-repo
+# python3.3 from a PPA
+# - we need to add the current stable ubuntu (or even the current development
+# ubuntu because we need a recent version of apt to build the python-apt
+# - we use ubuntu instead of debian because the travis chroot is ubuntu based
+# - ./debian/rules build-arch will build the package and run the tests
+language: c
+before_install:
+ - sudo apt-get update -q
+ - sudo apt-get install distro-info
+ - echo "deb http://archive.ubuntu.com/ubuntu $(distro-info --stable) main"|sudo tee -a /etc/apt/sources.list.d/added.list
+ - sudo apt-get update -q
+ - sudo apt-get install -q --no-install-recommends gdebi-core
+ - sudo apt-get install -q build-essential $(gdebi -q --apt-line ./debian/control)
+script: ./debian/rules build-arch
diff --git a/debian/control b/debian/control
index f4f5211..8fdb394 100644
--- a/debian/control
+++ b/debian/control
@@ -5,7 +5,7 @@ Maintainer: APT Development Team <deity@lists.debian.org>
Uploaders: Michael Vogt <mvo@debian.org>, Julian Andres Klode <jak@debian.org>
Standards-Version: 3.9.4
XS-Python-Version: >= 2.6
-X-Python3-Version: >= 3.1
+X-Python3-Version: >= 3.3
Build-Depends: apt (>= 0.9.6),
apt-utils,
debhelper (>= 9),
@@ -13,8 +13,8 @@ Build-Depends: apt (>= 0.9.6),
libapt-pkg-dev (>= 0.8.11),
python-all-dev (>= 2.6.6-3~),
python-all-dbg,
- python3-all-dev (>= 3.1.2-10~),
- python3-all-dbg (>= 3.1.2-6~),
+ python3-all-dev (>= 3.3),
+ python3-all-dbg (>= 3.3),
python-distutils-extra (>= 2.0),
python-sphinx (>= 0.5),
python-debian,
diff --git a/po/python-apt.pot b/po/python-apt.pot
index 2d4f825..8d8b126 100644
--- a/po/python-apt.pot
+++ b/po/python-apt.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-12-31 22:31+0100\n"
+"POT-Creation-Date: 2014-01-01 09:20+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -465,7 +465,7 @@ msgid "Non-DFSG-compatible Software"
msgstr ""
#. TRANSLATORS: %s is a country
-#: ../aptsources/distro.py:211 ../aptsources/distro.py:441
+#: ../aptsources/distro.py:211 ../aptsources/distro.py:442
#, python-format
msgid "Server for %s"
msgstr ""
@@ -505,16 +505,16 @@ msgstr ""
msgid "Complete"
msgstr ""
-#: ../apt/package.py:337
+#: ../apt/package.py:328
#, python-format
msgid "Invalid unicode in description for '%s' (%s). Please report."
msgstr ""
-#: ../apt/package.py:910 ../apt/package.py:1016
+#: ../apt/package.py:901 ../apt/package.py:1007
msgid "The list of changes is not available"
msgstr ""
-#: ../apt/package.py:1022
+#: ../apt/package.py:1013
#, python-format
msgid ""
"The list of changes is not available yet.\n"
@@ -523,94 +523,91 @@ msgid ""
"until the changes become available or try again later."
msgstr ""
-#: ../apt/package.py:1029
+#: ../apt/package.py:1020
msgid ""
"Failed to download the list of changes. \n"
"Please check your Internet connection."
msgstr ""
-#: ../apt/debfile.py:85
+#: ../apt/debfile.py:87
#, python-format
msgid "List of files for '%s' could not be read"
msgstr ""
-#: ../apt/debfile.py:96
+#: ../apt/debfile.py:99
#, python-format
msgid "List of control files for '%s' could not be read"
msgstr ""
-#: ../apt/debfile.py:217
+#: ../apt/debfile.py:224
#, python-format
msgid "Dependency is not satisfiable: %s\n"
msgstr ""
-#: ../apt/debfile.py:238
+#: ../apt/debfile.py:247
#, python-format
msgid "Conflicts with the installed package '%s'"
msgstr ""
-#. TRANSLATORS: the first '%s' is the package that breaks, the second the dependency that makes it break, the third the relation (e.g. >=) and the latest the version for the releation
-#: ../apt/debfile.py:379
+#: ../apt/debfile.py:394
#, python-format
msgid ""
"Breaks existing package '%(pkgname)s' dependency %(depname)s "
"(%(deprelation)s %(depversion)s)"
msgstr ""
-#. TRANSLATORS: the first '%s' is the package that conflicts, the second the packagename that it conflicts with (so the name of the deb the user tries to install), the third is the relation (e.g. >=) and the last is the version for the relation
-#: ../apt/debfile.py:395
+#: ../apt/debfile.py:421
#, python-format
msgid ""
"Breaks existing package '%(pkgname)s' conflict: %(targetpkg)s (%(comptype)s "
"%(targetver)s)"
msgstr ""
-#: ../apt/debfile.py:405
+#: ../apt/debfile.py:435
#, python-format
msgid ""
"Breaks existing package '%(pkgname)s' that conflict: '%(targetpkg)s'. But "
"the '%(debfile)s' provides it via: '%(provides)s'"
msgstr ""
-#: ../apt/debfile.py:453
+#: ../apt/debfile.py:486
msgid "No Architecture field in the package"
msgstr ""
-#: ../apt/debfile.py:463
+#: ../apt/debfile.py:496
#, python-format
msgid "Wrong architecture '%s'"
msgstr ""
-#. the deb is older than the installed
-#: ../apt/debfile.py:470
+#: ../apt/debfile.py:504
msgid "A later version is already installed"
msgstr ""
-#: ../apt/debfile.py:495
+#: ../apt/debfile.py:529
msgid "Failed to satisfy all dependencies (broken cache)"
msgstr ""
-#: ../apt/debfile.py:525
+#: ../apt/debfile.py:558
#, python-format
msgid "Cannot install '%s'"
msgstr ""
-#: ../apt/debfile.py:599
+#: ../apt/debfile.py:634
msgid ""
"Automatically decompressed:\n"
"\n"
msgstr ""
-#: ../apt/debfile.py:605
+#: ../apt/debfile.py:640
msgid "Automatically converted to printable ascii:\n"
msgstr ""
-#: ../apt/debfile.py:695
+#: ../apt/debfile.py:731
#, python-format
msgid "Install Build-Dependencies for source package '%s' that builds %s\n"
msgstr ""
-#: ../apt/debfile.py:706
+#: ../apt/debfile.py:742
msgid "An essential package would be removed"
msgstr ""
@@ -635,11 +632,11 @@ msgstr ""
msgid "Get:"
msgstr ""
-#: ../apt/progress/text.py:203
+#: ../apt/progress/text.py:204
msgid " [Working]"
msgstr ""
-#: ../apt/progress/text.py:214
+#: ../apt/progress/text.py:215
#, python-format
msgid ""
"Media change: please insert the disc labeled\n"
@@ -648,16 +645,16 @@ msgid ""
msgstr ""
#. Trick for getting a translation from apt
-#: ../apt/progress/text.py:223
+#: ../apt/progress/text.py:224
#, python-format
msgid "Fetched %sB in %s (%sB/s)\n"
msgstr ""
-#: ../apt/progress/text.py:239
+#: ../apt/progress/text.py:240
msgid "Please provide a name for this Disc, such as 'Debian 2.1r1 Disk 1'"
msgstr ""
-#: ../apt/progress/text.py:255
+#: ../apt/progress/text.py:256
msgid "Please insert a Disc in the drive and press enter"
msgstr ""
--
1.8.3.2
>From 0cc7dd984510ea60b9c14f04922a169c3be54d76 Mon Sep 17 00:00:00 2001
From: Michael Schaller <michael@5challer.de>
Date: Tue, 31 Dec 2013 13:55:09 +0100
Subject: [PATCH 5/7] apt/cache.py, apt/package.py: Fixed PEP8 and pyflakes
issues
---
apt/cache.py | 53 +++++++++++++++++++++++++----------------------------
apt/package.py | 40 +++++++++++++++++++---------------------
debian/changelog | 3 +++
3 files changed, 47 insertions(+), 49 deletions(-)
diff --git a/apt/cache.py b/apt/cache.py
index 43fb55d..6b1e2bd 100644
--- a/apt/cache.py
+++ b/apt/cache.py
@@ -40,6 +40,7 @@ class FetchFailedException(IOError):
class LockFailedException(IOError):
"""Exception that is thrown when locking fails."""
+
class CacheClosedException(Exception):
"""Exception that is thrown when the cache is used after close()."""
@@ -53,7 +54,7 @@ class Cache(object):
list of available packages.
The cache can be used like a mapping from package names to Package
- objects (although only getting items is supported).
+ objects (although only getting items is supported).
Keyword arguments:
progress -- a OpProgress object
@@ -74,7 +75,7 @@ class Cache(object):
self._fullnameset = set()
self._changes_count = -1
self._sorted_set = None
-
+
self.connect("cache_post_open", self._inc_changes_count)
self.connect("cache_post_change", self._inc_changes_count)
if memonly:
@@ -86,17 +87,17 @@ class Cache(object):
apt_pkg.config.clear("APT")
apt_pkg.config.set("Dir", rootdir)
apt_pkg.init_config()
- if os.path.exists(rootdir+"/etc/apt/apt.conf"):
+ if os.path.exists(rootdir + "/etc/apt/apt.conf"):
apt_pkg.read_config_file(apt_pkg.config,
- rootdir + "/etc/apt/apt.conf")
- if os.path.isdir(rootdir+"/etc/apt/apt.conf.d"):
+ rootdir + "/etc/apt/apt.conf")
+ if os.path.isdir(rootdir + "/etc/apt/apt.conf.d"):
apt_pkg.read_config_dir(apt_pkg.config,
- rootdir + "/etc/apt/apt.conf.d")
+ rootdir + "/etc/apt/apt.conf.d")
apt_pkg.config.set("Dir::State::status",
rootdir + "/var/lib/dpkg/status")
# also set dpkg to the rootdir path so that its called for the
# --print-foreign-architectures call
- apt_pkg.config.set("Dir::bin::dpkg",
+ apt_pkg.config.set("Dir::bin::dpkg",
os.path.join(rootdir, "usr", "bin", "dpkg"))
# create required dirs/files when run with special rootdir
# automatically
@@ -105,7 +106,6 @@ class Cache(object):
# recognized (LP: #320665)
apt_pkg.init_system()
self.open(progress)
-
def _inc_changes_count(self):
"""Increase the number of changes"""
@@ -118,12 +118,12 @@ class Cache(object):
"""
files = ["/var/lib/dpkg/status",
"/etc/apt/sources.list",
- ]
+ ]
dirs = ["/var/lib/dpkg",
"/etc/apt/",
"/var/cache/apt/archives/partial",
"/var/lib/apt/lists/partial",
- ]
+ ]
for d in dirs:
if not os.path.exists(rootdir + d):
#print "creating: ", rootdir + d
@@ -165,8 +165,8 @@ class Cache(object):
i = last = 0
size = len(self._cache.packages)
for pkg in self._cache.packages:
- if progress is not None and last+100 < i:
- progress.update(i/float(size)*100)
+ if progress is not None and last + 100 < i:
+ progress.update(i / float(size) * 100)
last = i
# drop stuff with no versions (cruft)
if pkg.has_versions:
@@ -259,7 +259,8 @@ class Cache(object):
def required_download(self):
"""Get the size of the packages that are required to download."""
if self._records is None:
- raise CacheClosedException("Cache object used after close() called")
+ raise CacheClosedException(
+ "Cache object used after close() called")
pm = apt_pkg.PackageManager(self._depcache)
fetcher = apt_pkg.Acquire()
pm.get_archives(fetcher, self._list, self._records)
@@ -289,16 +290,14 @@ class Cache(object):
# now check the result (this is the code from apt-get.cc)
failed = False
- transient = False
err_msg = ""
for item in fetcher.items:
if item.status == item.STAT_DONE:
continue
if item.STAT_IDLE:
- transient = True
continue
err_msg += "Failed to fetch %s %s\n" % (item.desc_uri,
- item.error_text)
+ item.error_text)
failed = True
# we raise a exception if the download failed or it was cancelt
@@ -311,7 +310,8 @@ class Cache(object):
def _fetch_archives(self, fetcher, pm):
""" fetch the needed archives """
if self._records is None:
- raise CacheClosedException("Cache object used after close() called")
+ raise CacheClosedException(
+ "Cache object used after close() called")
# get lock
lockfile = apt_pkg.config.find_dir("Dir::Cache::Archives") + "lock"
@@ -349,7 +349,6 @@ class Cache(object):
if fetcher is None:
fetcher = apt_pkg.Acquire(progress)
-
return self._fetch_archives(fetcher,
apt_pkg.PackageManager(self._depcache))
@@ -362,12 +361,12 @@ class Cache(object):
else:
return bool(pkg.has_provides and not pkg.has_versions)
- def get_providing_packages(self, pkgname, candidate_only=True,
+ def get_providing_packages(self, pkgname, candidate_only=True,
include_nonvirtual=False):
"""Return a list of all packages providing a package.
-
+
Return a list of packages which provide the virtual package of the
- specified name.
+ specified name.
If 'candidate_only' is False, return all packages with at
least one version providing the virtual package. Otherwise,
@@ -378,7 +377,7 @@ class Cache(object):
packages providing pkgname, even if pkgname is not itself
a virtual pkg.
"""
-
+
providers = set()
get_candidate_ver = self._depcache.get_candidate_ver
try:
@@ -423,7 +422,8 @@ class Cache(object):
old_sources_list = apt_pkg.config.find("Dir::Etc::sourcelist")
old_sources_list_d = apt_pkg.config.find("Dir::Etc::sourceparts")
old_cleanup = apt_pkg.config.find("APT::List-Cleanup")
- apt_pkg.config.set("Dir::Etc::sourcelist", os.path.abspath(sources_list))
+ apt_pkg.config.set("Dir::Etc::sourcelist",
+ os.path.abspath(sources_list))
apt_pkg.config.set("Dir::Etc::sourceparts", "xxx")
apt_pkg.config.set("APT::List-Cleanup", "0")
slist = apt_pkg.SourceList()
@@ -559,9 +559,9 @@ class Cache(object):
@property
def dpkg_journal_dirty(self):
"""Return True if the dpkg was interrupted
-
+
All dpkg operations will fail until this is fixed, the action to
- fix the system if dpkg got interrupted is to run
+ fix the system if dpkg got interrupted is to run
'dpkg --configure -a' as root.
"""
dpkg_status_dir = os.path.dirname(
@@ -711,7 +711,6 @@ class FilteredCache(object):
#print "filterCachePostChange()"
self._reapply_filter()
-
# def connect(self, name, callback):
# self.cache.connect(name, callback)
@@ -750,8 +749,6 @@ def _test():
for pkg in changes:
assert pkg.name
-
-
# see if fetching works
for dirname in ["/tmp/pytest", "/tmp/pytest/partial"]:
if not os.path.exists(dirname):
diff --git a/apt/package.py b/apt/package.py
index 04d4ddd..79dac71 100644
--- a/apt/package.py
+++ b/apt/package.py
@@ -26,7 +26,6 @@ import re
import socket
import subprocess
import urllib2
-import warnings
try:
from collections import Mapping, Sequence
except ImportError:
@@ -335,7 +334,7 @@ class Version(object):
dsc = unicode(dsc, "utf-8")
except UnicodeDecodeError as err:
return _("Invalid unicode in description for '%s' (%s). "
- "Please report.") % (self.package.name, err)
+ "Please report.") % (self.package.name, err)
lines = iter(dsc.split("\n"))
# Skip the first line, since its a duplication of the summary
@@ -416,8 +415,8 @@ class Version(object):
base_deps = []
for dep_or in dep_ver_list:
base_deps.append(BaseDependency(dep_or.target_pkg.name,
- dep_or.comp_type, dep_or.target_ver,
- (type_ == "PreDepends"),
+ dep_or.comp_type, dep_or.target_ver,
+ (type_ == "PreDepends"),
rawtype=type_))
depends_list.append(Dependency(base_deps))
except KeyError:
@@ -428,7 +427,7 @@ class Version(object):
def provides(self):
""" Return a list of names that this version provides."""
return [p[0] for p in self._cand.provides_list]
-
+
@property
def enhances(self):
"""Return the list of enhances for the package version."""
@@ -601,7 +600,7 @@ class Version(object):
for item in acq.items:
if item.status != item.STAT_DONE:
raise FetchError("The item %r could not be fetched: %s" %
- (item.destfile, item.error_text))
+ (item.destfile, item.error_text))
if unpack:
outdir = src.package + '-' + apt_pkg.upstream_version(src.version)
@@ -633,8 +632,8 @@ class VersionList(Sequence):
"""
def __init__(self, package, slice_=None):
- self._package = package # apt.package.Package()
- self._versions = package._pkg.version_list # [apt_pkg.Version(), ...]
+ self._package = package # apt.package.Package()
+ self._versions = package._pkg.version_list # [apt_pkg.Version(), ...]
if slice_:
self._versions = self._versions[slice_]
@@ -659,7 +658,7 @@ class VersionList(Sequence):
return (Version(self._package, ver) for ver in self._versions)
def __contains__(self, item):
- if isinstance(item, Version): # Sequence interface
+ if isinstance(item, Version): # Sequence interface
item = item.version
# Dictionary interface.
for ver in self._versions:
@@ -702,8 +701,8 @@ class Package(object):
self._changelog = "" # Cached changelog
def __repr__(self):
- return '<Package: name:%r architecture=%r id:%r>' % (self._pkg.name,
- self._pkg.architecture, self._pkg.id)
+ return '<Package: name:%r architecture=%r id:%r>' % (
+ self._pkg.name, self._pkg.architecture, self._pkg.id)
def __lt__(self, other):
return self.name < other.name
@@ -917,10 +916,10 @@ class Package(object):
src_section = "main"
# use the section of the candidate as a starting point
section = self.candidate.section
-
+
# get the source version
src_ver = self.candidate.source_version
-
+
try:
# try to get the source version of the pkg, this differs
# for some (e.g. libnspr4 on ubuntu)
@@ -1006,7 +1005,7 @@ class Package(object):
changelog_ver = changelog_ver.split(":", 1)[1]
if (installed and apt_pkg.version_compare(
- changelog_ver, installed) <= 0):
+ changelog_ver, installed) <= 0):
break
# EOF (shouldn't really happen)
changelog += line
@@ -1020,14 +1019,14 @@ class Package(object):
except urllib2.HTTPError:
res = _("The list of changes is not available yet.\n\n"
- "Please use http://launchpad.net/ubuntu/+source/%s/"
- "%s/+changelog\n"
- "until the changes become available or try again "
- "later.") % (src_pkg, src_ver)
+ "Please use http://launchpad.net/ubuntu/+source/%s/"
+ "%s/+changelog\n"
+ "until the changes become available or try again "
+ "later.") % (src_pkg, src_ver)
return res if isinstance(res, unicode) else res.decode("utf-8")
except (IOError, httplib.BadStatusLine):
res = _("Failed to download the list of changes. \nPlease "
- "check your Internet connection.")
+ "check your Internet connection.")
return res if isinstance(res, unicode) else res.decode("utf-8")
finally:
socket.setdefaulttimeout(timeout)
@@ -1168,12 +1167,11 @@ def _test():
print "Recommends: %s" % pkg.installed.recommends
for dep in pkg.candidate.dependencies:
print ",".join("%s (%s) (%s) (%s)" % (o.name, o.version, o.relation,
- o.pre_depend) for o in dep.or_dependencies)
+ o.pre_depend) for o in dep.or_dependencies)
print "arch: %s" % pkg.candidate.architecture
print "homepage: %s" % pkg.candidate.homepage
print "rec: ", pkg.candidate.record
-
print cache["2vcard"].get_changelog()
for i in True, False:
print "Running install on random upgradable pkgs with AutoFix: %s " % i
diff --git a/debian/changelog b/debian/changelog
index 52a1000..a7b037d 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -3,6 +3,9 @@ python-apt (0.9.2) UNRELEASED; urgency=low
* apt/cache.py:
- when using apt.Cache(rootdir=/some/dir) only read the APT
configuration from this rootdir instead of /etc (closes: #728274)
+ - Fixed PEP8 and pyflakes issues
+ * apt/package.py:
+ - Fixed PEP8 and pyflakes issues
-- Michael Vogt <michael.vogt@ubuntu.com> Sat, 23 Nov 2013 08:49:51 +0100
--
1.8.3.2
>From 3b023a188e085d2cb894a0b8210c8e0ff0a55159 Mon Sep 17 00:00:00 2001
From: Michael Vogt <mvo@debian.org>
Date: Tue, 31 Dec 2013 23:18:43 +0100
Subject: [PATCH 6/7] make pyflakes clean
---
apt/__init__.py | 2 ++
apt/auth.py | 1 -
apt/debfile.py | 1 +
apt/progress/__init__.py | 1 -
doc/examples/acquire.py | 3 ++-
doc/examples/progress.py | 1 +
doc/source/conf.py | 1 +
tests/test_aptsources.py | 2 --
tests/test_aptsources_ports.py | 1 -
tests/test_cache_invocation.py | 1 +
tests/test_debfile.py | 11 ++---------
tests/test_debfile_multiarch.py | 2 --
tests/test_lp659438.py | 2 +-
tests/test_paths.py | 1 -
tests/test_progress.py | 2 +-
tests/test_utils.py | 4 ----
utils/get_ubuntu_mirrors.py | 2 --
utils/get_ubuntu_mirrors_from_lp.py | 1 -
18 files changed, 12 insertions(+), 27 deletions(-)
diff --git a/apt/__init__.py b/apt/__init__.py
index 7b04bef..c4e78ba 100644
--- a/apt/__init__.py
+++ b/apt/__init__.py
@@ -23,6 +23,8 @@ import apt_pkg
# import some fancy classes
from apt.package import Package
from apt.cache import Cache, ProblemResolver
+Cache # pyflakes
+ProblemResolver # pyflakes
from apt.cdrom import Cdrom
# init the package system, but do not re-initialize config
diff --git a/apt/auth.py b/apt/auth.py
index c1b8da2..d5a66b4 100644
--- a/apt/auth.py
+++ b/apt/auth.py
@@ -24,7 +24,6 @@
# USA
"""Handle GnuPG keys used to trust signed repositories."""
-import atexit
import os
import os.path
import shutil
diff --git a/apt/debfile.py b/apt/debfile.py
index 7f9cf9f..c845b1f 100644
--- a/apt/debfile.py
+++ b/apt/debfile.py
@@ -508,6 +508,7 @@ class DebPackage(object):
# turn off MarkAndSweep via a action group (if available)
try:
_actiongroup = apt_pkg.ActionGroup(self._cache._depcache)
+ _actiongroup # pyflakes
except AttributeError:
pass
# check depends
diff --git a/apt/progress/__init__.py b/apt/progress/__init__.py
index 00dc768..776a703 100644
--- a/apt/progress/__init__.py
+++ b/apt/progress/__init__.py
@@ -22,7 +22,6 @@ This package provides progress reporting for the python-apt package. The module
'base' provides classes with no output, the module 'gtk2' provides classes for
GTK+ applications, and the module 'text' provides classes for terminals, etc.
"""
-import apt_pkg
__all__ = []
diff --git a/doc/examples/acquire.py b/doc/examples/acquire.py
index c2db832..7381ad6 100644
--- a/doc/examples/acquire.py
+++ b/doc/examples/acquire.py
@@ -9,6 +9,7 @@ def get_file(fetcher, uri, destfile):
# get the file
af = apt_pkg.AcquireFile(fetcher, uri=uri, descr="sample descr",
destfile=destfile)
+ print "desc_uri: %s -> %s" % (af.desc_uri, af.destfile)
res = fetcher.run()
if res != fetcher.RESULT_CONTINUE:
return False
@@ -45,7 +46,7 @@ except OSError:
pass
apt_pkg.config.set("Dir::Cache::archives", "/tmp/pyapt-test")
-pkg = cache["3ddesktop"]
+pkg = cache["2vcard"]
depcache.mark_install(pkg)
progress = apt.progress.text.AcquireProgress()
diff --git a/doc/examples/progress.py b/doc/examples/progress.py
index 77985a5..d7c4fad 100644
--- a/doc/examples/progress.py
+++ b/doc/examples/progress.py
@@ -98,6 +98,7 @@ class TextCdromProgress(apt.progress.base.CdromProgress):
def change_cdrom(self):
print "Please insert cdrom and press <ENTER>"
answer = sys.stdin.readline()
+ print answer
return True
diff --git a/doc/source/conf.py b/doc/source/conf.py
index bdf0579..163f507 100644
--- a/doc/source/conf.py
+++ b/doc/source/conf.py
@@ -26,6 +26,7 @@ if os.path.exists("../../build"):
sys.path.insert(0, os.path.abspath(os.path.dirname(apt_pkg_path)))
try:
import apt_pkg
+ apt_pkg # pyflakes
except ImportError as exc:
# Not the correct version
sys.stderr.write('W: Ignoring error %s\n' % exc)
diff --git a/tests/test_aptsources.py b/tests/test_aptsources.py
index 5a174f3..0b74cb7 100644
--- a/tests/test_aptsources.py
+++ b/tests/test_aptsources.py
@@ -140,7 +140,6 @@ class TestAptSources(unittest.TestCase):
distro = aptsources.distro.get_distro(id="Ubuntu")
distro.get_sources(sources)
# test if all suits of the current distro were detected correctly
- dist_templates = set()
for s in sources:
if not s.template:
self.fail("source entry '%s' has no matcher" % s)
@@ -178,7 +177,6 @@ class TestAptSources(unittest.TestCase):
assert sources.list[9].line.strip() == str(sources.list[9])
def test_enable_component(self):
- from subprocess import Popen, PIPE
target = "./data/aptsources/sources.list.enable_comps"
line = "deb http://archive.ubuntu.com/ubuntu lucid main\n"
with open(target, "w") as target_file:
diff --git a/tests/test_aptsources_ports.py b/tests/test_aptsources_ports.py
index 67c21b9..b625b8c 100644
--- a/tests/test_aptsources_ports.py
+++ b/tests/test_aptsources_ports.py
@@ -31,7 +31,6 @@ class TestAptSourcesPorts(unittest.TestCase):
"8.04")
distro.get_sources(sources)
# test if all suits of the current distro were detected correctly
- dist_templates = set()
for s in sources:
if not s.line.strip() or s.line.startswith("#"):
continue
diff --git a/tests/test_cache_invocation.py b/tests/test_cache_invocation.py
index a89ef55..4bba081 100644
--- a/tests/test_cache_invocation.py
+++ b/tests/test_cache_invocation.py
@@ -25,6 +25,7 @@ class TestCache(unittest.TestCase):
"""cache_invocation: Test correct invocation."""
apt_cache = apt_pkg.Cache(progress=None)
apt_depcache = apt_pkg.DepCache(apt_cache)
+ self.assertNotEqual(apt_depcache, None)
if __name__ == "__main__":
unittest.main()
diff --git a/tests/test_debfile.py b/tests/test_debfile.py
index 3e93394..9379884 100644
--- a/tests/test_debfile.py
+++ b/tests/test_debfile.py
@@ -123,15 +123,8 @@ Description: testpackage for gdebi - contains usr/bin/binary for file reading
deb.missing_deps
def test_no_supported_data_tar(self):
- # ensure that a unknown data.tar.xxx raises a exception
- raised = False
- try:
- deb = apt.debfile.DebPackage("./data/test_debs/data-tar-broken.deb")
- except SystemError:
- raised = True
- # with self.assertRaises(SystemError): is more elegant above, but
- # we need to support python2.6
- self.assertTrue(raised)
+ with self.assertRaises(SystemError):
+ apt.debfile.DebPackage("./data/test_debs/data-tar-broken.deb")
def test_contains(self):
deb = apt.debfile.DebPackage("./data/test_debs/data-tar-xz.deb")
diff --git a/tests/test_debfile_multiarch.py b/tests/test_debfile_multiarch.py
index bbf6201..cf6479b 100644
--- a/tests/test_debfile_multiarch.py
+++ b/tests/test_debfile_multiarch.py
@@ -7,8 +7,6 @@
# are permitted in any medium without royalty provided the copyright
# notice and this notice are preserved.
"""Unit tests for verifying the correctness of DebPackage in apt.debfile."""
-import os
-import logging
import unittest
from test_all import get_library_dir
diff --git a/tests/test_lp659438.py b/tests/test_lp659438.py
index b9a837b..334f574 100644
--- a/tests/test_lp659438.py
+++ b/tests/test_lp659438.py
@@ -63,7 +63,7 @@ Architecture: all""")
def tearDown(self):
# this resets the rootdir apt_pkg.config to ensure it does not
# "pollute" the later tests
- cache = apt.cache.Cache(rootdir="/")
+ apt.cache.Cache(rootdir="/")
shutil.rmtree(self.chroot_path)
def test_survive_reqreinst(self):
diff --git a/tests/test_paths.py b/tests/test_paths.py
index 17f562d..48f86c5 100644
--- a/tests/test_paths.py
+++ b/tests/test_paths.py
@@ -3,7 +3,6 @@
#
import os
import shutil
-import tempfile
import unittest
import apt_inst
diff --git a/tests/test_progress.py b/tests/test_progress.py
index e4a5fa3..508da7d 100644
--- a/tests/test_progress.py
+++ b/tests/test_progress.py
@@ -44,7 +44,7 @@ class TestProgress(unittest.TestCase):
def test_acquire_progress(self):
progress = TestAcquireProgress()
cache = apt.Cache()
- res = cache.update(progress)
+ cache.update(progress)
self.assertTrue(progress.pulsed)
if __name__ == "__main__":
diff --git a/tests/test_utils.py b/tests/test_utils.py
index 2676bb9..35c0a46 100644
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -8,12 +8,8 @@
import datetime
import os
-import sys
import unittest
-import apt_pkg
-import apt.utils
-
from apt.utils import (
get_maintenance_end_date,
get_release_date_from_release_file,
diff --git a/utils/get_ubuntu_mirrors.py b/utils/get_ubuntu_mirrors.py
index ddd1e36..cf50908 100755
--- a/utils/get_ubuntu_mirrors.py
+++ b/utils/get_ubuntu_mirrors.py
@@ -26,8 +26,6 @@
import urllib2
import re
-import os
-import commands
import sys
# the list of official Ubuntu servers
diff --git a/utils/get_ubuntu_mirrors_from_lp.py b/utils/get_ubuntu_mirrors_from_lp.py
index 7c4d383..6ff2d88 100755
--- a/utils/get_ubuntu_mirrors_from_lp.py
+++ b/utils/get_ubuntu_mirrors_from_lp.py
@@ -25,7 +25,6 @@
# USA
import feedparser
-import sys
d = feedparser.parse("https://launchpad.net/ubuntu/+archivemirrors-rss")
#d = feedparser.parse(open("+archivemirrors-rss"))
--
1.8.3.2
Attachment:
0007-make-test_pep8.py-pass.patch.gz
Description: Binary data