mirror of
https://codeberg.org/fediverse/fep.git
synced 2026-08-05 11:46:04 +00:00
e4683fbcda
### Preview version https://helge.codeberg.page/fep/ click there to judge ### Tasks done - [x] Add a proper index.md instead of final.md .... needs me to filter the readme.md - [x] search is broken --> will resolve itself when all feps are part of it - [x] Update https://codeberg.org/fediverse/fep/src/branch/main/fep/7d8c/fep-7d8c.md - [x] The admonition format (according to copilot I can blame this format on Microsoft https://learn.microsoft.com/en-us/contribute/content/markdown-reference#alerts-note-important-tip-warning-caution) ``` >[!NOTE] >ActivityPub [requires][ActivityPub-Collections] ordered collections to be presented in reverse chronological order. However, an [erratum][ActivityPub-Errata] was proposed to relax this requirement. ``` is not the one supported by python, see https://python-markdown.github.io/extensions/admonition/ . One can probably resolve this by adapting the code https://github.com/Python-Markdown/markdown/blob/f39cf84a24124526c1a0efbe52219fa9950774f6/markdown/extensions/admonition.py - [x] FEPs miss meta information .... - [x] Meta information for tracking issue and discussion to link should be formatted - [x] copy script has problems with contained directories - [x] add codeberg link to meta, e.g. https://helge.codeberg.page/fep/fep/1b12/ - [x] include implementation counts -> https://codeberg.org/fediverse/fep/issues/686 Co-authored-by: silverpill <silverpill@firemail.cc> Reviewed-on: https://codeberg.org/fediverse/fep/pulls/673 Reviewed-by: silverpill <silverpill@noreply.codeberg.org> Co-authored-by: Helge <helge.krueger@gmail.com> Co-committed-by: Helge <helge.krueger@gmail.com>
139 lines
3.5 KiB
Python
139 lines
3.5 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["trackingIssue"]
|
|
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["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})"
|
|
|
|
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",
|
|
"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
|