#!/usr/bin/env python3 import glob import os import re import sys import time sys.path.append(os.path.join(os.path.dirname(__file__), "..")) from . import html_output def write_addon_overview(folder, addon): out = open(os.path.join(folder, "index.html"), "w") def w(x): out.write(x + "\n") name = addon["name"] title = html_output.cleantext("Build Report for " + name) generation_note = "Last updated on " + time.ctime() + "." w(html_output.website_header(path="../", title=title, classes=["wmlunits-report"])) w('
') eras = addon.get("eras", []) w('

' + html_output.cleantext(name) + '

') if eras: w('

Eras

') campaigns = addon.get("campaigns", []) if campaigns: w('

Campaigns

') w('
') if os.path.exists(os.path.join(folder, "error.log")): w('

Warnings or errors were found: log

') w('

Back to the full report

') w('
') w('
') w(html_output.build_timestamp()) w(html_output.website_footer()) def main(folder): out = open(os.path.join(folder, "overview.html"), "w") def w(x): out.write(x + "\n") w(html_output.website_header(path="", title="Database Build Report", classes=["wmlunits-report"])) w('

Database Build Report

') w('
') w('') w('') w('') count = 0 total_n = 0 total_error_logs = 0 total_lines = 0 for f in sorted(glob.glob(os.path.join(folder, "*"))): if not os.path.isdir(f): continue if f.endswith("/pics"): continue error_log = os.path.abspath(os.path.join(f, "error.log")) error_html = os.path.abspath(os.path.join(f, "error.html")) try: n = len(os.listdir(os.path.join(f, "en_US"))) except OSError: n = 0 total_n += n name = f[len(folder):].lstrip("/") error_name = os.path.join(name, "error.html") w('') count += 1 w('') w('') w('' % count) w('') w('') w('') w('
AddonOutput FilesError Log
') w('' + html_output.cleantext(name, quote=False) + '') w('') w(str(n)) w('') if os.path.exists(error_log): text = open(error_log).read() error_kind = "warnings" if "" in text: error_kind = "internal error" elif "" in text: error_kind = "wml error" elif "" in text: error_kind = "parse error" elif "" in text: error_kind = "timeout" source = [] def postprocess(line): if line in ("WMLError:", "?", "Preprocessor error:", "'SKIP_CORE' defined.") or \ line.startswith("Automatically found a possible data directory") or \ line.startswith("Overriding data directory with") or \ line.startswith("skipped 'data/core'") or \ line.startswith("preprocessing specified resource:") or \ re.match("added .* defines.", line): return "" mo = re.match(r"\d+ /tmp(?:/wmlparser_.*?/|/)(.*\.cfg).*", line) if mo: source.append("/tmp/" + mo.group(1)) return "" mo = re.match(".*--preprocess-defines(.*)", line) if mo: return "Defines: " + mo.group(1) + '
' for s in source: line = line.replace(s, "WML") line = line.replace("included from WML:1", "") rows = line.replace("included from", "\n included from").splitlines() out = "" for row in rows: row = row.strip() out += row + '
' return out htmlerr = open(error_html, "w") htmlerr.write('') lines_count = 0 for line in text.splitlines(): line = line.strip() if line in ["", "", "", ""]: htmlerr.write('

' % line[1:-1].replace(" ", "-").lower()) elif line in ["", "", "", ""]: htmlerr.write('

') else: err_html = postprocess(line) lines_count += err_html.count('') total_lines += lines_count total_error_logs += 1 w('%s (%d lines)' % (html_output.cleanurl(error_name), error_kind, lines_count)) w('
Total (for %d addons):' + str(total_n) + '' + str(total_error_logs) + ' (' + str(total_lines) + ' lines)
') w('
') w(html_output.build_timestamp()) w(html_output.website_footer()) if __name__ == "__main__": main(sys.argv[1])