From 57357990575a8659231fc3705b684abb62d8584c Mon Sep 17 00:00:00 2001 From: Gary Burton Date: Sun, 20 Jan 2013 17:15:35 +0000 Subject: [PATCH] Bug #6255. Wrap gzip files with TextIOWrapper to allow them to be read as text. svn: r21176 --- gramps/plugins/importer/importxml.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/gramps/plugins/importer/importxml.py b/gramps/plugins/importer/importxml.py index fdaeaff36..b87ee8732 100644 --- a/gramps/plugins/importer/importxml.py +++ b/gramps/plugins/importer/importxml.py @@ -371,7 +371,16 @@ class LineParser(object): try: if use_gzip: - ofile = gzip.open(filename, "rb") + import io + # Bug 6255. TextIOWrapper is required for python3 to present + # file contents as text, otherwise they are read + # as binary. However due to a missing method (read1) + # in early python3 versions this try block will fail + # It should work correctly from version 3.3 + # Gramps will still import XML files using python + # versions < 3.3.0 but the file progress meter will + # not work properly, going immediately to 100%. + ofile = io.TextIOWrapper(gzip.open(filename, "rb")) else: ofile = open(filename, "r") @@ -379,11 +388,12 @@ class LineParser(object): self.count += 1 if PERSON_RE.match(line): self.person_count += 1 - - ofile.close() except: self.count = 0 self.person_count = 0 + finally: + # Ensure the file handle is always closed + ofile.close() def get_count(self): return self.count