Source code for mindroot.lib.json_str_block.json_str_block
import json
from partial_json_parser import loads, ensure_json
import re
[docs]
def replace_raw_blocks(jsonish):
"""
Allows embedding raw text blocks for JSON properties, e.g.:
[ {"write": { "filename": "/test.py",
"text": START_RAW
def foo():
print('hello world')
(with optional END_RAW and continuation of JSON):
[ {"write": { "filename": "/test.py",
"text": START_RAW
def foo():
print('hello world')
END_RAW }
}
]
"""
final_string = ''
in_raw = False
raw_string = ''
lines = jsonish.split('\n')
lines_ = []
for line_ in lines:
if 'START_RAW' in line_:
all = line_.split('\\n')
for a in all:
lines_.append(a)
elif 'END_RAW' in line_:
all = line_.split('\\n')
for a in all:
lines_.append(a)
else:
lines_.append(line_)
for line in lines_:
if in_raw:
if 'END_RAW' in line:
line = line.replace('\\nEND_RAW\n"', '')
line = line.replace('\nEND_RAW\n"', '')
line = line.replace('\nEND_RAW"', '')
line = line.replace('\nEND_RAW', '')
line = line.replace('END_RAW"', '')
line = line.replace('END_RAW', '')
final_string += json.dumps(raw_string) + line
in_raw = False
else:
raw_string += line + '\n'
elif 'START_RAW' in line:
in_raw = True
raw_string = ''
line = line.replace('"START_RAW\\n', '')
line = line.replace('"START_RAW\n', '')
line = line.replace('"START_RAW', '')
line = line.replace('START_RAW \n', '')
line = line.replace('START_RAW\n', '')
line = line.replace('START_RAW', '')
final_string += line
else:
final_string += line + '\n'
if in_raw:
final_string += json.dumps(raw_string)
final_string = re.sub('(?<!")""(?!")', '"', final_string)
if 'START_RAW' in final_string:
final_string = final_string.replace('START_RAW', '"')
try:
ensure_json(final_string)
except Exception as e:
escaped_nl_in_fenced = re.sub('```[\\s\\S]*?```', lambda m: m.group(0).replace('\n', '\\n'), final_string)
try:
ensure_json(escaped_nl_in_fenced)
return escaped_nl_in_fenced
except Exception as e:
try:
final_string = final_string.strip().replace('\n', '\\n')
ensure_json(final_string)
return final_string
except Exception as e:
return final_string
return final_string
if __name__ == '__main__':
with open('ex9.txt') as f:
jsonish = f.read()
new_json = replace_raw_blocks(jsonish)
data = loads(new_json)