diff --git a/gramps/plugins/importer/importxml.py b/gramps/plugins/importer/importxml.py index 71f6dc14b..3860485c6 100644 --- a/gramps/plugins/importer/importxml.py +++ b/gramps/plugins/importer/importxml.py @@ -375,7 +375,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") @@ -383,11 +392,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