1
0
mirror of https://codeberg.org/fediverse/fep.git synced 2026-08-05 11:46:04 +00:00
Files
fep/scripts/fep_tools/table.py
T
Helge e4683fbcda Create a FEP static site (#673)
### 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>
2025-11-01 08:40:20 +01:00

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