From cd8ec60ae9be79fc30a2823ef6321c1240f759c1 Mon Sep 17 00:00:00 2001 From: Sergey Kosukhin Date: Thu, 17 Nov 2022 04:06:28 +0100 Subject: serialbox: update patch to handle UTF-8 conversion errors (#33317) --- .../repos/builtin/packages/serialbox/package.py | 2 +- .../builtin/packages/serialbox/ppser_py3.patch | 37 ++++++++++++++++++---- 2 files changed, 32 insertions(+), 7 deletions(-) (limited to 'var') diff --git a/var/spack/repos/builtin/packages/serialbox/package.py b/var/spack/repos/builtin/packages/serialbox/package.py index 8d7f24144d..2161dd064a 100644 --- a/var/spack/repos/builtin/packages/serialbox/package.py +++ b/var/spack/repos/builtin/packages/serialbox/package.py @@ -56,7 +56,7 @@ class Serialbox(CMakePackage): # pp_ser fails to process source files containing Unicode character with # Python 3 (https://github.com/GridTools/serialbox/pull/249): - patch("ppser_py3.patch", when="@2.2.1:") + patch("ppser_py3.patch", when="@2.2.0:") # NAG patches: patch("nag/interface.patch", when="@2.0.1:%nag+fortran") diff --git a/var/spack/repos/builtin/packages/serialbox/ppser_py3.patch b/var/spack/repos/builtin/packages/serialbox/ppser_py3.patch index 1a15de7274..6997c634f6 100644 --- a/var/spack/repos/builtin/packages/serialbox/ppser_py3.patch +++ b/var/spack/repos/builtin/packages/serialbox/ppser_py3.patch @@ -1,23 +1,48 @@ -# This patch is applicable starting version 2.2.1 +# This patch is applicable starting version 2.2.0 --- a/src/serialbox-python/pp_ser/pp_ser.py +++ b/src/serialbox-python/pp_ser/pp_ser.py @@ -51 +51 @@ __email__ = 'oliver.fuhrer@meteoswiss.ch' -def to_ascii(text): +def open23(name, mode='r'): -@@ -53 +53,9 @@ def to_ascii(text): +@@ -53 +53,10 @@ def to_ascii(text): - return bytes(text, 'ascii') + return open(name, mode, -+ encoding=(None if 'b' in mode else 'UTF-8')) ++ encoding=(None if 'b' in mode else 'UTF-8'), ++ errors=(None if 'b' in mode else 'surrogateescape')) + else: + return open(name, mode) + + +def bytes23(text): + if sys.version_info[0] == 3: -+ return bytes(text, 'UTF-8') -@@ -815 +823 @@ class PpSer: ++ return bytes(text, 'UTF-8', 'surrogateescape') +@@ -57,0 +67,11 @@ def to_ascii(text): ++def getline(filename, lineno): ++ try: ++ return linecache.getline(filename, lineno) ++ except: ++ with open23(filename, 'r') as f: ++ for i, line in enumerate(f, start=1): ++ if i == lineno: ++ return line ++ return '' ++ ++ +@@ -608 +628 @@ class PpSer: +- nextline = linecache.getline(os.path.join(self.infile), lookahead_index) ++ nextline = getline(os.path.join(self.infile), lookahead_index) +@@ -613 +633 @@ class PpSer: +- nextline = linecache.getline(os.path.join(self.infile), lookahead_index) ++ nextline = getline(os.path.join(self.infile), lookahead_index) +@@ -711 +731 @@ class PpSer: +- nextline = linecache.getline(os.path.join(self.infile), lookahead_index) ++ nextline = getline(os.path.join(self.infile), lookahead_index) +@@ -716 +736 @@ class PpSer: +- nextline = linecache.getline(os.path.join(self.infile), lookahead_index) ++ nextline = getline(os.path.join(self.infile), lookahead_index) +@@ -803 +823 @@ class PpSer: - input_file = open(os.path.join(self.infile), 'r') + input_file = open23(os.path.join(self.infile), 'r') -@@ -860 +868 @@ class PpSer: +@@ -843 +863 @@ class PpSer: - output_file.write(to_ascii(self.__outputBuffer)) + output_file.write(bytes23(self.__outputBuffer)) -- cgit v1.2.3-70-g09d2