"""Build the decision lists from _dump.json + _report.json and write a decoded review file.""" import json, io, re data = json.load(io.open('_dump.json', encoding='utf-8')) rep = json.load(io.open('_report.json', encoding='utf-8')) cnt = {p['r']: p['count'] for p in rep['pages']} err = {p['r']: p['err'] for p in rep['pages']} navblank = rep['navblank'] byr = {row['r']: row for row in data} def code_of(row): mc = re.search(r'menuCd=(DOM_\d+)', row.get('K', '')) return mc.group(1) if mc else None def lbl(row): return row.get('G') or row.get('F') or row.get('E') or row.get('D') or '' fill_M = [] # real boards: set M=count reclass = [] # 게시판 -> 페이지 to_site = [] # nav target_blank & not 사이트 (task 2) for row in data: r = row['r']; L = row.get('L'); code = code_of(row) c = cnt.get(r) # task 2: nav target=_blank => site if code and navblank.get(code) and L not in ('사이트', None): to_site.append((r, L, lbl(row))) if L == '게시판': if c is not None: fill_M.append((r, row.get('M'), c, lbl(row))) else: reclass.append((r, row.get('M'), row.get('P'), row.get('Q'), err.get(r), lbl(row))) out = io.open('_decision.txt', 'w', encoding='utf-8') def w(s=''): out.write(s + '\n') w('========== TASK 2: nav target=_blank but NOT 사이트 (would reclass to 사이트) ==========') w('count=%d' % len(to_site)) for r, L, name in to_site: w(' r%-4d L=%-4s %s' % (r, L, name)) w('') w('========== TASK 1: real boards (have bbs_total) -> set M=count ==========') w('count=%d' % len(fill_M)) for r, oldM, c, name in fill_M: flag = '' if oldM in (0, None) else ' <%-7d %s%s' % (r, str(oldM), c, name, flag)) w('') w('========== TASK 3: 게시판 WITHOUT bbs_total -> 페이지 (M->1) ==========') w('count=%d' % len(reclass)) for r, oldM, P, Q, e, name in reclass: w(' r%-4d (M=%s P=%s Q=%s err=%s) %s' % (r, oldM, P, Q, e, name)) out.close() print('to_site=%d fill_M=%d reclass=%d' % (len(to_site), len(fill_M), len(reclass)))