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,