utils.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import bleach
  2. from markdown import Markdown
  3. from unidecode import unidecode
  4. from django.core.urlresolvers import reverse
  5. from django.template.defaultfilters import slugify as django_slugify
  6. def slugify(string):
  7. string = unicode(string)
  8. string = unidecode(string)
  9. return django_slugify(string.replace('_', ' '))
  10. """
  11. Utils for resolving requests destination
  12. """
  13. def _is_request_path_under_misago(request):
  14. # We are assuming that forum_index link is root of all Misago links
  15. forum_index = reverse('misago:index')
  16. path_info = request.path_info
  17. if len(forum_index) > len(path_info):
  18. return False
  19. return path_info[:len(forum_index)] == forum_index
  20. def is_request_to_misago(request):
  21. try:
  22. return request._request_to_misago
  23. except AttributeError:
  24. request._request_to_misago = _is_request_path_under_misago(request)
  25. return request._request_to_misago
  26. """
  27. MD subset for use for enchancing items descriptions
  28. """
  29. MD_SUBSET_FORBID_SYNTAX = (
  30. # References are evil
  31. 'reference', 'reference', 'image_reference', 'short_reference',
  32. # Blocks are evil too
  33. 'hashheader', 'setextheader', 'code', 'quote', 'hr', 'olist', 'ulist',
  34. )
  35. def subset_markdown(text):
  36. if not text:
  37. return ''
  38. md = Markdown(safe_mode='escape', extensions=['nl2br'])
  39. for key in md.preprocessors.keys():
  40. if key in MD_SUBSET_FORBID_SYNTAX:
  41. del md.preprocessors[key]
  42. for key in md.inlinePatterns.keys():
  43. if key in MD_SUBSET_FORBID_SYNTAX:
  44. del md.inlinePatterns[key]
  45. for key in md.parser.blockprocessors.keys():
  46. if key in MD_SUBSET_FORBID_SYNTAX:
  47. del md.parser.blockprocessors[key]
  48. for key in md.treeprocessors.keys():
  49. if key in MD_SUBSET_FORBID_SYNTAX:
  50. del md.treeprocessors[key]
  51. for key in md.postprocessors.keys():
  52. if key in MD_SUBSET_FORBID_SYNTAX:
  53. del md.postprocessors[key]
  54. return bleach.linkify(md.convert(text))