WikiProcessor.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import os
  2. from jinja2 import Template, Environment, FileSystemLoader
  3. # from flask import render_template
  4. import FileReader
  5. import Link
  6. import RSTRenderer
  7. class WikiProcessor():
  8. """The WikiProcessor generates wiki contents from available files."""
  9. def __init__(self):
  10. super().__init__()
  11. self.file_reader = FileReader.FileReader()
  12. self.rst_renderer = RSTRenderer.RSTRenderer()
  13. self.pages_dir = os.path.join("static", "rst", "")
  14. self.template_env = Environment(loader=FileSystemLoader("templates"))
  15. self.template_env.globals["STATIC_PREFIX"] = os.path.join("/static", "")
  16. def get_index_page(self, filter_string=None):
  17. file_names = self.file_reader.get_files_list(self.pages_dir)
  18. file_names.sort()
  19. labels = [self.file_name_to_link_label(file_name)
  20. for file_name in file_names]
  21. targets = [self.file_name_to_link_target(file_name)
  22. for file_name in file_names]
  23. links = [Link.Link(labels[ind], targets[ind])
  24. for ind in range(len(file_names))]
  25. template = self.template_env.get_template("index.j2")
  26. return template.render(links=links)
  27. # return render_template("index.j2", links=links) # only with flask
  28. def get_page_by_name(self, page):
  29. page_rst_content = self.file_reader.file_as_string(
  30. os.path.join(self.pages_dir, page + ".rst"))
  31. page_html = self.rst_renderer.render_string(page_rst_content)
  32. template = self.template_env.get_template("page.j2")
  33. return template.render(page_content=page_html)
  34. # return render_template("page.j2", page_content=page_html) # only with flask
  35. def file_name_to_link_label(self, file_name):
  36. return file_name.replace("_", " / ")[:-4]
  37. def file_name_to_link_target(self, file_name):
  38. return "/page/" + file_name[:-4]