Skip to content

Commit 4d1334d

Browse files
committed
refactor: split web exporter for offline testing
Extract prepare/publish/build_compilation and dumpall_web so offline tests can assert web output without writing pages alone. Signed-off-by: Alan Peixinho <alan.peixinho@profusion.mobi>
1 parent b07cdb9 commit 4d1334d

1 file changed

Lines changed: 54 additions & 17 deletions

File tree

regzbot/export_web.py

Lines changed: 54 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
logger = regzbot.logger
1818

1919

20-
2120
def _web_now():
2221
mail_now = regzbot._TESTING.get("mail_now")
2322
if mail_now is not None:
@@ -799,7 +798,7 @@ def create_individual_page(cls, htmlpages, unhandled_count, regression):
799798
)
800799

801800
@classmethod
802-
def createpage_compilation(cls, htmlpages, unhandled_count, categories, pagename):
801+
def build_compilation(cls, htmlpages, unhandled_count, categories, pagename):
803802
tablecolumns = 3
804803
yattagdoc = yattag.Doc()
805804
cls.outpage_head(yattagdoc)
@@ -830,8 +829,12 @@ def createpage_compilation(cls, htmlpages, unhandled_count, categories, pagename
830829
with yattagdoc.tag("td", style="width: 100px;"):
831830
yattagdoc.text(regressionweb.treename)
832831
cls.outpage_footer(yattagdoc, unhandled_count)
832+
return yattagdoc
833833

834-
cls.outpage_write(pagename, yattagdoc)
834+
@classmethod
835+
def createpage_compilation(cls, htmlpages, unhandled_count, categories, pagename):
836+
yattagdoc = cls.build_compilation(htmlpages, unhandled_count, categories, pagename)
837+
cls.outpage_write(pagename, yattagdoc)
835838

836839
@classmethod
837840
def create_events(cls, directory, unhandled_count, htmlpages, eventslist):
@@ -1109,24 +1112,22 @@ def regression_to_json(cls, regression):
11091112
}
11101113

11111114
@classmethod
1112-
def compile(cls):
1113-
logger.debug("[webpages] generating")
1115+
def _events_gmtime_offset(cls):
1116+
events_gmtime_offset = int(_web_now().timestamp()) - 604800
1117+
if regzbot.is_running_citesting("offline"):
1118+
events_gmtime_offset = int(_web_now().timestamp()) - 604800 * 52 * 10
1119+
return events_gmtime_offset
11141120

1121+
@classmethod
1122+
def prepare(cls):
11151123
# these are the pages we are going to create
11161124
htmlpages = ("next", "mainline", "stable", "new", "all", "resolved", "inconclusive")
1117-
1118-
# handle this page first, as we need something from it anyway
1119-
unhandled_count = cls.create_unhandled(regzbot.WEBPAGEDIR, htmlpages)
1125+
unhandled_count = len(list(UnhandledEventWeb.get_all()))
1126+
events_gmtime_offset = cls._events_gmtime_offset()
11201127

11211128
# gather everything we need
11221129
regressionslist = list()
11231130
eventslist = list()
1124-
events_gmtime_offset = (
1125-
int(_web_now().timestamp()) - 604800
1126-
)
1127-
if regzbot.is_running_citesting("offline"):
1128-
events_gmtime_offset = 604800 * 52 * 10
1129-
11301131
json_data = list()
11311132
for regression in RegressionWeb.get_all():
11321133
json_data.append(cls.regression_to_json(regression))
@@ -1164,12 +1165,28 @@ def compile(cls):
11641165
)
11651166
)
11661167

1167-
cls.create_scriptfile_reldate()
1168-
11691168
eventslist.sort(key=lambda x: x["gmtime"], reverse=True)
1169+
return {
1170+
"htmlpages": htmlpages,
1171+
"unhandled_count": unhandled_count,
1172+
"regressionslist": regressionslist,
1173+
"json_data": json_data,
1174+
"eventslist": eventslist,
1175+
}
1176+
1177+
@classmethod
1178+
def publish(cls, prepared):
1179+
htmlpages = prepared["htmlpages"]
1180+
unhandled_count = prepared["unhandled_count"]
1181+
regressionslist = prepared["regressionslist"]
1182+
json_data = prepared["json_data"]
1183+
eventslist = prepared["eventslist"]
1184+
1185+
# handle this page first, as we need something from it anyway
1186+
cls.create_unhandled(regzbot.WEBPAGEDIR, htmlpages)
1187+
cls.create_scriptfile_reldate()
11701188
cls.create_events(regzbot.WEBPAGEDIR, unhandled_count, htmlpages, eventslist)
11711189
# we don't need this anymore now that we iterated over all regressions
1172-
eventslist = events_gmtime_offset = None
11731190

11741191
# create the page listing all regressions, sorted by date
11751192
regressionslist.sort(key=lambda x: x.gmtime_report, reverse=True)
@@ -1230,4 +1247,24 @@ def compile(cls):
12301247
with open(os.path.join(regzbot.WEBPAGEDIR, "regressions.json"), "w") as jsonfile:
12311248
jsonfile.write(json.dumps(json_data))
12321249

1250+
@classmethod
1251+
def compile(cls):
1252+
logger.debug("[webpages] generating")
1253+
cls.publish(cls.prepare())
12331254
logger.debug("[webpages] generated")
1255+
1256+
1257+
def dumpall_web():
1258+
prepared = RegExportWeb.prepare()
1259+
regressionslist = prepared["regressionslist"]
1260+
regressionslist.sort(key=lambda x: x.gmtime_activity, reverse=True)
1261+
categories = RegExportWeb.categorize(regressionslist)
1262+
mainline = categories.get("mainline", {})
1263+
if not any(section["entries"] for section in mainline.values()):
1264+
return
1265+
1266+
doc = RegExportWeb.build_compilation(
1267+
prepared["htmlpages"], prepared["unhandled_count"], mainline, "mainline"
1268+
)
1269+
yield yattag.indent(doc.getvalue())
1270+
yield "\n"

0 commit comments

Comments
 (0)