scripts/update_create.py (52 lines of code) (raw):
#!/usr/bin/env python3
# @(#) update create.html from JSON files
import os
import json
import re
# This currently reads data at load time
import committee_info
SITEDIR = os.path.join(committee_info.COMDEV_HOME, 'site')
validation = {}
with open(os.path.join(SITEDIR, "validation.json"), encoding='utf-8') as f:
validation = json.loads(f.read())
lang = validation['languages']
cats = validation['categories']
createfile = os.path.join(SITEDIR, "create.html")
createfilet = os.path.join(SITEDIR, "create.html.t")
sections = 0
with open(createfile,'r', encoding='utf-8') as r, open(createfilet,'w', encoding='utf-8') as w:
section = None
line = 0
for l in r:
# start of a section?
m = re.match(r'^\s+<select name="(cat|lang|pmc)"', l)
if m:
section = m.group(1)
line = 0
sections += 1
# end of section, dump its data
if section and '</select>' in l:
if section == 'cat':
for k, v in cats.items():
w.write(f' <option value="{k}">{v}</option>\n')
elif section == 'lang':
for k, v in lang.items():
w.write(f' <option value="{k}">{v}</option>\n')
elif section == 'pmc':
lastcap = ''
for k,v in sorted(committee_info.pmcnames().items()):
cap = k[0].upper()
if cap != lastcap:
w.write(f"\n <!-- {cap} -->\n")
lastcap = cap
w.write(f' <option value="{k}">{v}</option>\n')
else:
print(f"unrecognised section {section}")
section = None
line = 0
if section:
line = line + 1
if re.match(r'^\s*<option value="\w', l): # an existing option line
continue # drop the line
if section == 'pmc':
if re.match(" <!-- [A-Z] -->", l) or (re.match(r"\s*$", l) and line > 2):
continue
w.write(l) # write the original line
os.rename(createfilet, createfile)
assert sections == 3, f"Expected to find 3 sections, found {sections}"
print(f"All done, saw {sections} sections")