mirror of
https://codeberg.org/fediverse/fep.git
synced 2026-08-05 11:46:04 +00:00
f68a69fc79
This PR addresses https://codeberg.org/fediverse/fep/issues/686 and https://codeberg.org/fediverse/fep/issues/194 The "Type" column is added to all FEP lists, the value is either "informational" or "implementation (N)". Reviewed-on: https://codeberg.org/fediverse/fep/pulls/747 Reviewed-by: helge <helge@noreply.codeberg.org> Co-authored-by: silverpill <silverpill@firemail.cc> Co-committed-by: silverpill <silverpill@firemail.cc>
154 lines
3.9 KiB
Python
154 lines
3.9 KiB
Python
from dataclasses import dataclass
|
|
|
|
from .fep_file import FepFile
|
|
|
|
|
|
repo_base = "https://codeberg.org/fediverse/fep/src/branch/main/"
|
|
|
|
|
|
@dataclass
|
|
class TableLineBuilder:
|
|
fep: FepFile
|
|
columns: list[str]
|
|
format: str = "readme"
|
|
|
|
@property
|
|
def parsed(self):
|
|
return self.fep.parsed_frontmatter
|
|
|
|
@property
|
|
def title(self):
|
|
if self.format == "readme":
|
|
return f"[FEP-{self.fep.fep}: {self.fep.title}](./{self.fep.filename})"
|
|
|
|
return f"[FEP-{self.fep.fep}: {self.fep.title}](fep/{self.fep.fep}/index.md)"
|
|
|
|
@property
|
|
def repo_link_image(self):
|
|
return f"[<img src='../assets/codeberg.png' width=20 height=20 alt='codeberg'>]({repo_base}{self.fep.filename})"
|
|
|
|
@property
|
|
def tracking_issue(self):
|
|
url = self.parsed.get("trackingIssue")
|
|
if url is None:
|
|
return "-"
|
|
url_number = url.split("/")[-1]
|
|
return f"[#{url_number}]({url})"
|
|
|
|
@property
|
|
def status(self):
|
|
status = self.parsed["status"]
|
|
return f"`{status}`"
|
|
|
|
@property
|
|
def date_received(self):
|
|
return self.parsed.get("dateReceived", "-")
|
|
|
|
@property
|
|
def date_finalized(self):
|
|
return self.parsed.get("dateFinalized", "-")
|
|
|
|
@property
|
|
def date_withdrawn(self):
|
|
return self.parsed.get("dateWithdrawn", "-")
|
|
|
|
@property
|
|
def date_final(self):
|
|
if "dateFinalized" in self.parsed:
|
|
return self.parsed["dateFinalized"]
|
|
if "dateWithdrawn" in self.parsed:
|
|
return self.parsed["dateWithdrawn"]
|
|
return "-"
|
|
|
|
@property
|
|
def discussions(self):
|
|
discussions = self.parsed["discussionsTo"]
|
|
|
|
if discussions == self.parsed.get("trackingIssue"):
|
|
return "-"
|
|
|
|
return f"[Discussions]({discussions})"
|
|
|
|
@property
|
|
def repository(self) -> str:
|
|
url = f"{repo_base}fep/{self.fep.fep}/fep-{self.fep.fep}.md"
|
|
return f"[codeberg]({url})"
|
|
|
|
@property
|
|
def fep_type(self) -> str:
|
|
fep_type = self.parsed.get("type") or "informational"
|
|
return fep_type.capitalize()
|
|
|
|
@property
|
|
def implementation_count(self) -> str:
|
|
if self.parsed.get("type") == "implementation" and self.fep.implementation_count > 0:
|
|
return str(self.fep.implementation_count)
|
|
else:
|
|
return ""
|
|
|
|
def get_attribute(self, column: str):
|
|
try:
|
|
return self.__getattribute__(column)
|
|
except AttributeError:
|
|
return self.parsed.get(column, "-")
|
|
|
|
@property
|
|
def line(self) -> str:
|
|
values = [self.get_attribute(column) for column in self.columns]
|
|
middle = " | ".join(values)
|
|
return f"| {middle} |\n"
|
|
|
|
|
|
@dataclass
|
|
class TableTitle:
|
|
columns: list[str]
|
|
|
|
column_to_title = {
|
|
"title": "Title",
|
|
"fep_type": "Type",
|
|
"status": "Status",
|
|
"tracking_issue": "Tracking issue",
|
|
"discussions": "Discussions",
|
|
"date_received": "Received",
|
|
"date_final": "Finalized / Withdrawn",
|
|
"date_finalized": "Finalized",
|
|
"date_withdrawn": "Withdrawn",
|
|
}
|
|
|
|
@property
|
|
def title_line(self):
|
|
center = " | ".join(
|
|
[self.column_to_title.get(column, "") for column in self.columns]
|
|
)
|
|
|
|
return f"| {center} |\n"
|
|
|
|
@property
|
|
def second_line(self):
|
|
center = " | ".join(["---"] * len(self.columns))
|
|
return f"| {center} |\n"
|
|
|
|
@property
|
|
def result(self) -> list[str]:
|
|
return [self.title_line, self.second_line]
|
|
|
|
|
|
def table_for_feps(
|
|
feps: list[FepFile],
|
|
columns: list[str] = [
|
|
"title",
|
|
"status",
|
|
"tracking_issue",
|
|
"date_received",
|
|
# Finalized / Withdrawn
|
|
"date_final",
|
|
],
|
|
generate_title: bool = False,
|
|
format: str = "readme",
|
|
):
|
|
lines = [TableLineBuilder(fep, columns, format=format).line for fep in feps]
|
|
if generate_title:
|
|
return TableTitle(columns).result + lines
|
|
|
|
return lines
|