64 lines
2.4 KiB
Python
64 lines
2.4 KiB
Python
#!/usr/bin/env python3
|
|
"""Build dist/ollama_answers.py by inlining assets as Python string constants."""
|
|
import os
|
|
import re
|
|
|
|
ROOT = os.path.dirname(os.path.abspath(__file__))
|
|
ASSETS = os.path.join(ROOT, 'assets')
|
|
SRC = os.path.join(ROOT, 'ollama_answers.py')
|
|
DIST_DIR = os.path.join(ROOT, 'dist')
|
|
DIST = os.path.join(DIST_DIR, 'ollama_answers.py')
|
|
|
|
|
|
def read(path):
|
|
with open(path, encoding='utf-8') as f:
|
|
return f.read()
|
|
|
|
|
|
def main():
|
|
css = read(os.path.join(ASSETS, 'ui.css'))
|
|
html = read(os.path.join(ASSETS, 'ui.html'))
|
|
js_raw = read(os.path.join(ASSETS, 'ui.js'))
|
|
|
|
frontend_js = js_raw.split('// === CITATION_HELPER_JS ===')[0].replace('// === FRONTEND_JS_TEMPLATE ===', '').strip()
|
|
citation_js = js_raw.split('// === CITATION_HELPER_JS ===')[1].split('// === INTERACTIVE_JS ===')[0].strip()
|
|
interactive_js = js_raw.split('// === INTERACTIVE_JS ===')[1].strip()
|
|
|
|
src = read(SRC)
|
|
|
|
asset_block = '''\
|
|
# UI assets
|
|
_ASSETS = os.path.join(os.path.dirname(__file__), 'assets')
|
|
INTERACTIVE_CSS = open(os.path.join(_ASSETS, 'ui.css')).read()
|
|
INTERACTIVE_HTML = open(os.path.join(_ASSETS, 'ui.html')).read()
|
|
_js_raw = open(os.path.join(_ASSETS, 'ui.js')).read()
|
|
FRONTEND_JS_TEMPLATE = _js_raw.split('// === CITATION_HELPER_JS ===')[0].replace('// === FRONTEND_JS_TEMPLATE ===', '').strip()
|
|
CITATION_HELPER_JS = _js_raw.split('// === CITATION_HELPER_JS ===')[1].split('// === INTERACTIVE_JS ===')[0].strip()
|
|
INTERACTIVE_JS = _js_raw.split('// === INTERACTIVE_JS ===')[1].strip()'''
|
|
|
|
inline_block = (
|
|
'# UI assets\n'
|
|
'INTERACTIVE_CSS = """\\\n' + css.replace('\\', '\\\\') + '\n"""\n'
|
|
'INTERACTIVE_HTML = """\\\n' + html.replace('\\', '\\\\') + '\n"""\n'
|
|
'FRONTEND_JS_TEMPLATE = r"""\\\n' + frontend_js + '\n"""\n'
|
|
'CITATION_HELPER_JS = r"""\\\n' + citation_js + '\n"""\n'
|
|
'INTERACTIVE_JS = r"""\\\n' + interactive_js + '\n"""\n'
|
|
)
|
|
|
|
if asset_block not in src:
|
|
print('ERROR: Could not locate the asset-loading block in ollama_answers.py')
|
|
raise SystemExit(1)
|
|
|
|
dist_src = src.replace(asset_block, inline_block)
|
|
dist_src = '# AUTO-GENERATED by build.py — do not edit directly\n' + dist_src
|
|
|
|
os.makedirs(DIST_DIR, exist_ok=True)
|
|
with open(DIST, 'w', encoding='utf-8') as f:
|
|
f.write(dist_src)
|
|
|
|
print('Built dist/ollama_answers.py successfully')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|