repo-autoindex/repo_autoindex/template.py
Rohan McGovern 5c4e5354b2 Initial implementation
Basically working for yum repos.
2022-06-17 10:31:31 +10:00

50 lines
1.5 KiB
Python

from collections.abc import Iterable
from dataclasses import replace
import os
import jinja2
from .base import IndexEntry
TEMPLATE_DIR = os.path.join(os.path.dirname(__file__), "templates")
class TemplateContext:
def __init__(self):
self.env = jinja2.Environment(
autoescape=True, loader=jinja2.FileSystemLoader(TEMPLATE_DIR)
)
# low number is for testing - increase it later
self.max_text_length = 200
def render_index(
self,
title: str = "repository index",
header: str = "",
footer: str = "",
index_entries: Iterable[IndexEntry] = (),
) -> str:
return self.env.get_template("index.html.j2").render(
title=title,
header=header,
footer=footer,
index_entries=self.__with_padded_text(index_entries),
)
def __with_padded_text(self, entries: Iterable[IndexEntry]) -> Iterable[IndexEntry]:
max_len = 0
for entry in entries:
entry_len = min(len(entry.text), self.max_text_length)
max_len = max(entry_len, max_len)
out = []
for entry in entries:
if len(entry.text) >= (self.max_text_length - 3):
entry = replace(entry, text=entry.text[:-3] + "...")
# pad right so they all have the same length
padcount = max_len - len(entry.text)
entry = replace(entry, padding=" " * padcount)
out.append(entry)
return out