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