diff --git a/britney.py b/britney.py index fe29615..c76f16e 100755 --- a/britney.py +++ b/britney.py @@ -193,7 +193,7 @@ from functools import reduce, partial from itertools import chain, product from operator import attrgetter -from six.moves import filter as ifilter, intern, urllib_parse as urllib +from urllib.parse import quote from installability.builder import InstallabilityTesterBuilder from excuse import Excuse @@ -388,7 +388,7 @@ class Britney(object): arches += [x for x in allarches if x not in arches and x not in self.options.break_arches.split()] arches += [x for x in allarches if x not in arches and x not in self.options.new_arches.split()] arches += [x for x in allarches if x not in arches] - self.options.architectures = [intern(arch) for arch in arches] + self.options.architectures = [sys.intern(arch) for arch in arches] self.options.smooth_updates = self.options.smooth_updates.split() def __log(self, msg, type="I"): @@ -447,7 +447,7 @@ class Britney(object): # the package name extracted from the field and is therefore # not interned. pdata = binaries[dep_dist][arch][0][p] - pt = (intern(p), pdata[VERSION], arch) + pt = (sys.intern(p), pdata[VERSION], arch) if dep: sat.add(pt) elif t != pt: @@ -494,7 +494,7 @@ class Britney(object): # Data reading/writing methods # ---------------------------- - def read_sources(self, basedir, intern=intern): + def read_sources(self, basedir, intern=sys.intern): """Read the list of source packages from the specified directory The source packages are read from the `Sources' file within the @@ -533,7 +533,7 @@ class Britney(object): ] return sources - def read_binaries(self, basedir, distribution, arch, intern=intern): + def read_binaries(self, basedir, distribution, arch, intern=sys.intern): """Read the list of binary packages from the specified directory The binary packages are read from the `Packages_${arch}' files @@ -1081,7 +1081,7 @@ class Britney(object): anyworthdoing = False # for every binary package produced by this source in unstable for this architecture - for pkg in sorted(ifilter(lambda x: x.endswith("/" + arch), source_u[BINARIES]), key=lambda x: x.split("/")[0]): + for pkg in sorted(filter(lambda x: x.endswith("/" + arch), source_u[BINARIES]), key=lambda x: x.split("/")[0]): pkg_name = pkg.split("/")[0] # retrieve the testing (if present) and unstable corresponding binary packages @@ -1343,7 +1343,7 @@ class Britney(object): base = 'testing' else: base = 'stable' - text = "Not yet built on %s (relative to testing)" % (urllib.quote(arch), urllib.quote(src), urllib.quote(source_u[VERSION]), base, arch) + text = "Not yet built on %s (relative to testing)" % (quote(arch), quote(src), quote(source_u[VERSION]), base, arch) if arch in self.options.fucked_arches.split(): text = text + " (but %s isn't keeping up, so never mind)" % (arch) @@ -1396,15 +1396,15 @@ class Britney(object): if oodtxt: oodtxt = oodtxt + "; " oodtxt = oodtxt + "%s (from %s)" % \ - (", ".join(sorted(oodbins[v])), urllib.quote(arch), urllib.quote(src), urllib.quote(v), v) + (", ".join(sorted(oodbins[v])), quote(arch), quote(src), quote(v), v) if uptodatebins: text = "old binaries left on %s: %s" % \ - (urllib.quote(arch), urllib.quote(src), urllib.quote(source_u[VERSION]), arch, oodtxt) + (quote(arch), quote(src), quote(source_u[VERSION]), arch, oodtxt) else: text = "missing build on %s: %s" % \ - (urllib.quote(arch), urllib.quote(src), urllib.quote(source_u[VERSION]), arch, oodtxt) + (quote(arch), quote(src), quote(source_u[VERSION]), arch, oodtxt) if arch in self.options.fucked_arches.split(): text = text + " (but %s isn't keeping up, so nevermind)" % (arch) @@ -1454,15 +1454,15 @@ class Britney(object): if len(new_bugs) > 0: excuse.addhtml("%s (%s) has new bugs!" % (pkg, ", ".join(pkgs[pkg]), urllib.quote(pkg))) + "target=\"_blank\">has new bugs!" % (pkg, ", ".join(pkgs[pkg]), quote(pkg))) excuse.addhtml("Updating %s introduces new bugs: %s" % (pkg, ", ".join( - ["#%s" % (urllib.quote(a), a) for a in new_bugs]))) + ["#%s" % (quote(a), a) for a in new_bugs]))) update_candidate = False excuse.addreason("buggy") if len(old_bugs) > 0: excuse.addhtml("Updating %s fixes old bugs: %s" % (pkg, ", ".join( - ["#%s" % (urllib.quote(a), a) for a in old_bugs]))) + ["#%s" % (quote(a), a) for a in old_bugs]))) if len(old_bugs) > len(new_bugs) and len(new_bugs) > 0: excuse.addhtml("%s introduces new bugs, so still ignored (even " "though it fixes more than it introduces, whine at debian-release)" % pkg) diff --git a/britney_util.py b/britney_util.py index e32bb32..16d5298 100644 --- a/britney_util.py +++ b/britney_util.py @@ -24,16 +24,12 @@ import apt_pkg from functools import partial from datetime import datetime -from itertools import chain, repeat +from itertools import chain, repeat, filterfalse import os import re import time import yaml -from six.moves import (filter as ifilter, - filterfalse as ifilterfalse, - zip as izip) - from migrationitem import MigrationItem, UnversionnedMigrationItem from consts import (VERSION, BINARIES, PROVIDES, DEPENDS, CONFLICTS, @@ -75,8 +71,8 @@ def ifilter_except(container, iterable=None): iterators that are not known on beforehand. """ if iterable is not None: - return ifilterfalse(container.__contains__, iterable) - return partial(ifilterfalse, container.__contains__) + return filterfalse(container.__contains__, iterable) + return partial(filterfalse, container.__contains__) def ifilter_only(container, iterable=None): @@ -88,8 +84,8 @@ def ifilter_only(container, iterable=None): iterators that are not known on beforehand. """ if iterable is not None: - return ifilter(container.__contains__, iterable) - return partial(ifilter, container.__contains__) + return filter(container.__contains__, iterable) + return partial(filter, container.__contains__) # iter_except is from the "itertools" recipe @@ -301,7 +297,7 @@ def compute_reverse_tree(packages_s, pkg, arch, # generate the next iteration, which is the reverse-dependencies of # the current iteration rev_deps = set(revfilt(flatten( binaries[x][RDEPENDS] for x in binfilt(rev_deps) ))) - return izip(seen, repeat(arch)) + return zip(seen, repeat(arch)) def write_nuninst(filename, nuninst): diff --git a/excuse.py b/excuse.py index e0e1a3f..66192fb 100644 --- a/excuse.py +++ b/excuse.py @@ -15,7 +15,6 @@ # GNU General Public License for more details. import re -import six class Excuse(object): """Excuse class @@ -181,13 +180,6 @@ class Excuse(object): (self.name, self.ver[0], self.ver[1])) if self.maint: maint = self.maint - # ugly hack to work around strange encoding in pyyaml - # should go away with pyyaml in python 3 - if isinstance(maint, six.binary_type): - try: - maint.decode('ascii') - except UnicodeDecodeError: - maint = six.string_type(self.maint,'utf-8') res.append("Maintainer: %s" % maint) if self.section and self.section.find("/") > -1: res.append("Section: %s" % (self.section)) diff --git a/installability/tester.py b/installability/tester.py index ca0372e..3dd5118 100644 --- a/installability/tester.py +++ b/installability/tester.py @@ -13,8 +13,7 @@ # GNU General Public License for more details. from functools import partial - -from six.moves import filter as ifilter, filterfalse as ifilterfalse +from itertools import filterfalse from britney_util import iter_except @@ -85,7 +84,7 @@ class InstallabilityTester(object): eqv_table = self._eqv_table testing = self._testing tcopy = [x for x in testing] - for t in ifilterfalse(cache_inst.__contains__, tcopy): + for t in filterfalse(cache_inst.__contains__, tcopy): if t in cbroken: continue res = check_inst(t) @@ -300,7 +299,7 @@ class InstallabilityTester(object): # We already satisfied/chosen at least one of the litterals # in the choice, so the choice is gone - for choice in ifilter(musts.isdisjoint, choices): + for choice in filter(musts.isdisjoint, choices): # cbroken is needed here because (in theory) it could # have changed since the choice was discovered and it # is smaller than testing (so presumably faster) @@ -308,7 +307,7 @@ class InstallabilityTester(object): if len(remain) > 1 and not remain.isdisjoint(safe_set): first = None - for r in ifilter(safe_set.__contains__, remain): + for r in filter(safe_set.__contains__, remain): # don't bother giving extra arguments to _check_inst. "safe" packages are # usually trivial to satisfy on their own and will not involve conflicts # (so never will not help) @@ -432,7 +431,7 @@ class InstallabilityTester(object): returns True, then t is installable. """ # Local variables for faster access... - not_satisfied = partial(ifilter, musts.isdisjoint) + not_satisfied = partial(filter, musts.isdisjoint) # While we have guaranteed dependencies (in check), examine all # of them. @@ -520,7 +519,7 @@ class InstallabilityTester(object): start = set(ess_base) ess_never = set() ess_choices = set() - not_satisified = partial(ifilter, start.isdisjoint) + not_satisified = partial(filter, start.isdisjoint) while ess_base: self._check_loop(universe, testing, eqv_table,