pipeline.py 1.0 KB

12345678910111213141516171819202122232425262728293031323334
  1. from importlib import import_module
  2. from bs4 import BeautifulSoup
  3. from django.utils import six
  4. from misago.conf import settings
  5. class MarkupPipeline(object):
  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. return md
  14. def process_result(self, result):
  15. soup = BeautifulSoup(result['parsed_text'], 'html5lib')
  16. for extension in settings.MISAGO_MARKUP_EXTENSIONS:
  17. module = import_module(extension)
  18. if hasattr(module, 'clean_parsed'):
  19. hook = getattr(module, 'clean_parsed')
  20. hook.process_result(result, soup)
  21. souped_text = six.text_type(soup.body).strip()[6:-7]
  22. result['parsed_text'] = souped_text.strip()
  23. return result
  24. pipeline = MarkupPipeline()