From 201e92372b046ebb1062b98e527b47cb8e0816c8 Mon Sep 17 00:00:00 2001 From: Jarrod Millman Date: Mon, 9 Oct 2023 12:53:51 -0700 Subject: [PATCH] Don't print empty newline at end of schedule.md --- spec-0000/SPEC0_versions.py | 84 +++++++++++++++++++++++-------------- spec-0000/schedule.md | 1 - 2 files changed, 52 insertions(+), 33 deletions(-) diff --git a/spec-0000/SPEC0_versions.py b/spec-0000/SPEC0_versions.py index 68f519e0..0d796803 100644 --- a/spec-0000/SPEC0_versions.py +++ b/spec-0000/SPEC0_versions.py @@ -148,40 +148,60 @@ def get_release_dates(package, support_time=plus24): print("Saving drop schedule to schedule.md") +def pad_table(table): + rows = [[el.strip() for el in row.split("|")] for row in table] + col_widths = [max(map(len, column)) for column in zip(*rows)] + rows[1] = [ + el if el != "----" else "-" * col_widths[i] for i, el in enumerate(rows[1]) + ] + padded_table = [] + for row in rows: + line = "" + for entry, width in zip(row, col_widths): + if not width: + continue + line += f"| {str.ljust(entry, width)} " + line += f"|" + padded_table.append(line) + + return padded_table + + +def make_table(sub): + table = [] + table.append("| | | |") + table.append("|----|----|----|") + for package in sorted(set(sub.index.get_level_values(0))): + vers = sub.loc[[package]]["version"] + minv, maxv = min(vers), max(vers) + rels = sub.loc[[package]]["release"] + rel_min, rel_max = min(rels), max(rels) + version_range = str(minv) if minv == maxv else f"{minv} to {maxv}" + rel_range = ( + str(rel_min.strftime("%b %Y")) + if rel_min == rel_max + else f"{rel_min.strftime('%b %Y')} and {rel_max.strftime('%b %Y')}" + ) + table.append(f"|{package:<15}|{version_range:<19}|released {rel_range}|") + + return pad_table(table) + + +def make_quarter(quarter, dq): + table = ["#### " + str(quarter).replace("Q", " - Quarter ") + ":\n"] + table.append("###### Recommend drop support for:\n") + sub = dq.loc[quarter] + table.extend(make_table(sub)) + return "\n".join(table) + + with open("schedule.md", "w") as fh: # we collect package 6 month in the past, and drop the first quarter # as we might have filtered some of the packages out depending on # when we ran the script. + tb = [] for quarter in list(sorted(set(dq.index.get_level_values(0))))[1:]: - fh.write("#### " + str(quarter).replace("Q", " - Quarter ") + ":\n\n") - fh.write("###### Recommend drop support for:\n\n") - - table = "| | | |\n" - table += "|----|----|----|\n" - - sub = dq.loc[quarter] - for package in sorted(set(sub.index.get_level_values(0))): - vers = sub.loc[[package]]["version"] - minv, maxv = min(vers), max(vers) - rels = sub.loc[[package]]["release"] - rel_min, rel_max = min(rels), max(rels) - version_range = str(minv) if minv == maxv else f"{minv} to {maxv}" - rel_range = ( - str(rel_min.strftime("%b %Y")) - if rel_min == rel_max - else f"{rel_min.strftime('%b %Y')} and {rel_max.strftime('%b %Y')}" - ) - table += f"|{package:<15}|{version_range:<19}|released {rel_range}|\n" - - rows = [[el.strip() for el in row.split("|")] for row in table.splitlines()] - col_widths = [max(map(len, column)) for column in zip(*rows)] - rows[1] = [ - el if el != "----" else "-" * col_widths[i] for i, el in enumerate(rows[1]) - ] - for row in rows: - for entry, width in zip(row, col_widths): - if not width: - continue - fh.write(f"| {str.ljust(entry, width)} ") - fh.write("|\n") - fh.write("\n") + tb.append(make_quarter(quarter, dq)) + + fh.write("\n\n".join(tb)) + fh.write("\n") diff --git a/spec-0000/schedule.md b/spec-0000/schedule.md index cc84a194..f585820a 100644 --- a/spec-0000/schedule.md +++ b/spec-0000/schedule.md @@ -126,4 +126,3 @@ | | | | | ------ | ---- | ----------------- | | python | 3.12 | released Oct 2023 | -