serialbox: update patch to handle UTF-8 conversion errors (#33317)

This commit is contained in:
Sergey Kosukhin 2022-11-17 04:06:28 +01:00 committed by GitHub
parent fe597dfb0c
commit cd8ec60ae9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 7 deletions

View File

@ -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")

View File

@ -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))