pipeline.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from importlib import import_module
  2. from bs4 import BeautifulSoup
  3. from .. import hooks
  4. from ..conf import settings
  5. class MarkupPipeline:
  6. """small framework for extending parser"""
  7. def extend_markdown(self, md):
  8. for extension in settings.MISAGO_MARKUP_EXTENSIONS:
  9. module = import_module(extension)
  10. if hasattr(module, "extend_markdown"):
  11. hook = getattr(module, "extend_markdown")
  12. hook.extend_markdown(md)
  13. for extension in hooks.markdown_extensions:
  14. extension(md)
  15. return md
  16. def process_result(self, result):
  17. soup = BeautifulSoup(result["parsed_text"], "html5lib")
  18. for extension in settings.MISAGO_MARKUP_EXTENSIONS:
  19. module = import_module(extension)
  20. if hasattr(module, "clean_parsed"):
  21. hook = getattr(module, "clean_parsed")
  22. hook.process_result(result, soup)
  23. for extension in hooks.parsing_result_processors:
  24. extension(result, soup)
  25. souped_text = str(soup.body).strip()[6:-7]
  26. result["parsed_text"] = souped_text.strip()
  27. return result
  28. pipeline = MarkupPipeline()