markupmirror.markup.base: 39 total statements, 100.0% covered

Generated: Wed 2012-04-11 05:19 CDT

Source file: /home/buechler/Sites/django-markupmirror/markupmirror/markup/base.py

Stats: 37 executed, 0 missed, 2 excluded, 59 ignored

  1. from django.utils.encoding import force_unicode
  2. from markupmirror.exceptions import *
  3. class BaseMarkup(object):
  4. """Basic interface for markup converter classes.
  5. """
  6. codemirror_mode = ''
  7. title = ""
  8. @classmethod
  9. def get_name(cls):
  10. """Returns lowercase markup name, without the "Markup" part."""
  11. return cls.__name__.replace("Markup", "", 1).lower()
  12. def before_convert(self, markup):
  13. """Called before ``convert``."""
  14. return markup
  15. def after_convert(self, markup):
  16. """``Called after ``convert``."""
  17. return markup
  18. def convert(self, markup):
  19. """Main conversion method. Use third-pary libraries here."""
  20. return markup
  21. def __call__(self, markup):
  22. """Main entry point. Calls ``before_convert``, ``convert`` and
  23. ``after_convert`` in that order.
  24. """
  25. return force_unicode(
  26. self.after_convert(self.convert(self.before_convert(markup))))
  27. class MarkupPool(object):
  28. """Pool for markup converters.
  29. Each markup class, subclassing
  30. ``markupmirror.markup.base.BaseMarkup``, must register to this
  31. pool using ``register_markup`` defined below.
  32. """
  33. def __init__(self):
  34. self.markups = {}
  35. def register_markup(self, markup):
  36. """Registers a markup converter class.
  37. ``markup`` must be a subclass of ``BaseMarkup`` and may not be
  38. registered already.
  39. """
  40. # check for correct subclassing
  41. if not issubclass(markup, BaseMarkup):
  42. raise InvalidMarkup(
  43. "Markups must be subclasses of "
  44. "markupmirror.markup.base.BaseMarkup. %r is not."
  45. % markup)
  46. markup_name = markup.get_name()
  47. self.markups[markup_name] = markup()
  48. def unregister_markup(self, markup_name):
  49. """Unregisters a markup converter with the name ``markup_name``.
  50. Fails silently if no converter was registered by that name.
  51. """
  52. if markup_name in self.markups:
  53. del self.markups[markup_name]
  54. def has_markup(self, name):
  55. return name in self.markups
  56. def get_markup(self, name):
  57. """Returns one markup converter by name.
  58. Raises ``KeyError`` if no converter was registered by ``name``.
  59. """
  60. return self.markups[name]
  61. def __contains__(self, key):
  62. return self.has_markup(key)
  63. def __getitem__(self, key):
  64. return self.get_markup(key)
  65. def __delitem__(self, key):
  66. self.unregister_markup(key)
  67. markup_pool = MarkupPool()
  68. register_markup = markup_pool.register_markup
  69. __all__ = ('markup_pool', 'register_markup', 'BaseMarkup')