pipeline.py 1.0 KB

123456789101112131415161718192021222324252627282930313233
  1. from importlib import import_module
  2. from bs4 import BeautifulSoup
  3. from django.conf import settings
  4. from django.utils import six
  5. class MarkupPipeline(object):
  6. """
  7. Small framework for extending parser
  8. """
  9. def extend_markdown(self, md):
  10. for extension in settings.MISAGO_MARKUP_EXTENSIONS:
  11. module = import_module(extension)
  12. if hasattr(module, 'extend_markdown'):
  13. hook = getattr(module, 'extend_markdown')
  14. hook.extend_markdown(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. souped_text = six.text_type(soup.body).strip()[6:-7]
  24. result['parsed_text'] = souped_text.strip()
  25. return result
  26. pipeline = MarkupPipeline()