Visitar URL original
Generate the release cycle chart directly as SVG by encukou · Pull Request #1034 · python/devguide · GitHub
Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Re-format with Black
  • Loading branch information
hugovk committed Jan 22, 2023
commit 3fc6c6907957e916e19daea3a6e2a038e19e8df3
24 changes: 11 additions & 13 deletions _tools/generate_release_cycle.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,14 @@ def csv_date(date_str: str, now_str: str) -> str:
return f"*{date_str}*"
return date_str


def parse_date(date_str: str) -> dt.date:
if len(date_str) == len("yyyy-mm"):
# We need a full yyyy-mm-dd, so let's approximate
return dt.date.fromisoformat(date_str + '-01')
return dt.date.fromisoformat(date_str + "-01")
return dt.date.fromisoformat(date_str)


class Versions:
"""For converting JSON to CSV and SVG."""

Expand All @@ -30,12 +32,12 @@ def __init__(self) -> None:

# Generate a few additional fields
for key, version in self.versions.items():
version['key'] = key
version['first_release_date'] = parse_date(version['first_release'])
version['end_of_life_date'] = parse_date(version['end_of_life'])
version["key"] = key
version["first_release_date"] = parse_date(version["first_release"])
version["end_of_life_date"] = parse_date(version["end_of_life"])
self.sorted_versions = sorted(
self.versions.values(),
key=lambda v: [int(i) for i in v['key'].split(".")],
key=lambda v: [int(i) for i in v["key"].split(".")],
reverse=True,
)

Expand All @@ -56,7 +58,7 @@ def write_csv(self) -> None:
}
headers = row.keys()
cat = "end-of-life" if details["status"] == "end-of-life" else "branches"
versions_by_category[cat][details['key']] = row
versions_by_category[cat][details["key"]] = row

for cat, versions in versions_by_category.items():
with open(f"include/{cat}.csv", "w", encoding="UTF-8", newline="") as file:
Expand All @@ -67,7 +69,7 @@ def write_csv(self) -> None:
def write_svg(self) -> None:
"""Output SVG file."""
env = jinja2.Environment(
loader=jinja2.FileSystemLoader('_tools/'),
loader=jinja2.FileSystemLoader("_tools/"),
autoescape=True,
Comment thread
hugovk marked this conversation as resolved.
lstrip_blocks=True,
trim_blocks=True,
Expand All @@ -92,12 +94,8 @@ def write_svg(self) -> None:
# some positioning numbers in the template as well.
LINE_HEIGHT = 1.5

first_date = min(
ver['first_release_date'] for ver in self.sorted_versions
)
last_date = max(
ver['end_of_life_date'] for ver in self.sorted_versions
)
first_date = min(ver["first_release_date"] for ver in self.sorted_versions)
last_date = max(ver["end_of_life_date"] for ver in self.sorted_versions)

def date_to_x(date: dt.date) -> float:
"""Convert datetime.date to an SVG X coordinate"""
Expand Down