Skip to content

Commit 3a0ad9a

Browse files
committed
Break method into component parts to check timing
1 parent 78efd05 commit 3a0ad9a

2 files changed

Lines changed: 23 additions & 2 deletions

File tree

django/parse_m2/m2_parser.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
class M2FileParser:
2323
# Parser version is saved on each file record.
2424
# Increment this version for all updates to parser functionality.
25-
parser_version = "3.1"
25+
parser_version = "3.1.3"
2626

2727
chunk_size = 2000 # TODO: determine a good number for this
2828
any_non_whitespace = r'\S'

django/parse_m2/parse_utils.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,28 @@ def get_next_line(f) -> str:
110110
expects strings, use this method to ensure a string is returned.
111111
"""
112112
line = f.readline()
113-
return decode_if_needed(line)
113+
if decode_needed(line):
114+
decoded = m2_decode(line)
115+
return m2_replace_nulls(decoded)
116+
else:
117+
return line
118+
119+
def decode_needed(input) -> bool:
120+
if isinstance(input, str):
121+
return False
122+
elif isinstance(input, bytes):
123+
return True
124+
else:
125+
# We don't know what this is
126+
raise UnreadableLineException(
127+
f"Input type: {type(input)} is neither string nor bytes"
128+
)
129+
130+
def m2_decode(input: bytes) -> str:
131+
return input.decode('utf-8', errors='replace')
132+
133+
def m2_replace_nulls(input: str) -> str:
134+
return input.replace('\x00', '\uFFFD')
114135

115136
def decode_if_needed(input: any) -> str:
116137
if isinstance(input, str):

0 commit comments

Comments
 (0)