diff --git a/britney.py b/britney.py index 8945e0c..2bc0d4b 100755 --- a/britney.py +++ b/britney.py @@ -363,7 +363,7 @@ class Britney(object): # are handled as an ad-hoc case self.MINDAYS = {} self.HINTS = {'command-line': self.HINTS_ALL} - with open(self.options.config) as config: + with open(self.options.config, encoding='utf-8') as config: for line in config: if '=' in line and not line.strip().startswith('#'): k, v = line.split('=', 1) @@ -675,7 +675,7 @@ class Britney(object): bugs = defaultdict(list) filename = os.path.join(basedir, "BugsV") self.__log("Loading RC bugs data from %s" % filename) - for line in open(filename): + for line in open(filename, encoding='ascii'): l = line.split() if len(l) != 2: self.__log("Malformed line found in line %s" % (line), type='W') @@ -745,7 +745,7 @@ class Britney(object): dates = {} filename = os.path.join(basedir, "Dates") self.__log("Loading upload data from %s" % filename) - for line in open(filename): + for line in open(filename, encoding='ascii'): l = line.split() if len(l) != 3: continue try: @@ -762,10 +762,9 @@ class Britney(object): """ filename = os.path.join(basedir, "Dates") self.__log("Writing upload data to %s" % filename) - f = open(filename, 'w') - for pkg in sorted(dates): - f.write("%s %s %d\n" % ((pkg,) + dates[pkg])) - f.close() + with open(filename, 'w', encoding='utf-8'): + for pkg in sorted(dates): + f.write("%s %s %d\n" % ((pkg,) + dates[pkg])) def read_urgencies(self, basedir): @@ -785,7 +784,7 @@ class Britney(object): urgencies = {} filename = os.path.join(basedir, "Urgency") self.__log("Loading upload urgencies from %s" % filename) - for line in open(filename, errors='surrogateescape'): + for line in open(filename, errors='surrogateescape', encoding='ascii'): l = line.split() if len(l) != 3: continue @@ -839,7 +838,8 @@ class Britney(object): self.__log("Cannot read hints list from %s, no such file!" % filename, type="E") continue self.__log("Loading hints list from %s" % filename) - lines = open(filename) + with open(filename, encoding='utf-8') as f: + lines = f.readlines() for line in lines: line = line.strip() if line == "": continue @@ -2858,16 +2858,15 @@ class Britney(object): else: self.upgrade_me = self.options.actions.split() - self.__output = open(self.options.upgrade_output, 'w') + with open(self.options.upgrade_output, 'w', encoding='utf-8') as f: + self.__output = f - # run the hint tester - if self.options.hint_tester: - self.hint_tester() - # run the upgrade test - else: - self.upgrade_testing() - - self.__output.close() + # run the hint tester + if self.options.hint_tester: + self.hint_tester() + # run the upgrade test + else: + self.upgrade_testing() def _installability_test(self, pkg_name, pkg_version, pkg_arch, broken, to_check, nuninst_arch): """Test for installability of a package on an architecture diff --git a/britney_util.py b/britney_util.py index 16d5298..3766170 100644 --- a/britney_util.py +++ b/britney_util.py @@ -306,7 +306,7 @@ def write_nuninst(filename, nuninst): Write the non-installable report derived from "nuninst" to the file denoted by "filename". """ - with open(filename, 'w') as f: + with open(filename, 'w', encoding='utf-8') as f: # Having two fields with (almost) identical dates seems a bit # redundant. f.write("Built on: " + time.strftime("%Y.%m.%d %H:%M:%S %z", time.gmtime(time.time())) + "\n") @@ -323,7 +323,7 @@ def read_nuninst(filename, architectures): will be included in the report. """ nuninst = {} - with open(filename) as f: + with open(filename, encoding='ascii') as f: for r in f: if ":" not in r: continue arch, packages = r.strip().split(":", 1) @@ -381,7 +381,7 @@ def write_heidi(filename, sources_t, packages_t, The "X=X" parameters are optimizations to avoid "load global" in the loops. """ - with open(filename, 'w') as f: + with open(filename, 'w', encoding='ascii') as f: # write binary packages for arch in sorted(packages_t): @@ -420,7 +420,7 @@ def write_heidi_delta(filename, all_selected): The order corresponds to that shown in update_output. """ - with open(filename, "w") as fd: + with open(filename, "w", encoding='ascii') as fd: fd.write("#HeidiDelta\n") @@ -456,7 +456,7 @@ def write_excuses(excuses, dest_file, output_format="yaml"): or "legacy-html". """ if output_format == "yaml": - with open(dest_file, 'w') as f: + with open(dest_file, 'w', encoding='utf-8') as f: excuselist = [] for e in excuses: excuselist.append(e.excusedata()) @@ -465,7 +465,7 @@ def write_excuses(excuses, dest_file, output_format="yaml"): excusesdata["generated-date"] = datetime.utcnow() f.write(yaml.dump(excusesdata, default_flow_style=False, allow_unicode=True)) elif output_format == "legacy-html": - with open(dest_file, 'w') as f: + with open(dest_file, 'w', encoding='utf-8') as f: f.write("\n") f.write("excuses...") f.write("\n") @@ -488,7 +488,7 @@ def write_sources(sources_s, filename): key_pairs = ((VERSION, 'Version'), (SECTION, 'Section'), (MAINTAINER, 'Maintainer')) - with open(filename, 'w') as f: + with open(filename, 'w', encoding='utf-8') as f: for src in sources_s: src_data = sources_s[src] output = "Package: %s\n" % src @@ -518,7 +518,7 @@ def write_controlfiles(sources, packages, suite, basedir): for arch in packages_s: filename = os.path.join(basedir, 'Packages_%s' % arch) binaries = packages_s[arch][0] - with open(filename, 'w') as f: + with open(filename, 'w', encoding='utf-8') as f: for pkg in binaries: output = "Package: %s\n" % pkg bin_data = binaries[pkg]