/hyde/ext/plugins/auto_extend.py

http://github.com/hyde/hyde · Python · 55 lines · 34 code · 9 blank · 12 comment · 9 complexity · 0007bc234a02f601141ded750e0a9753 MD5 · raw file

  1. # -*- coding: utf-8 -*-
  2. """
  3. Autoextend plugin
  4. """
  5. from hyde.plugin import Plugin
  6. import re
  7. class AutoExtendPlugin(Plugin):
  8. """
  9. The plugin class for extending templates using metadata.
  10. """
  11. def __init__(self, site):
  12. super(AutoExtendPlugin, self).__init__(site)
  13. def begin_text_resource(self, resource, text):
  14. """
  15. If the meta data for the resource contains a layout attribute,
  16. and there is no extends statement, this plugin automatically adds
  17. an extends statement to the top of the file.
  18. """
  19. if not resource.uses_template:
  20. return text
  21. layout = None
  22. block = None
  23. try:
  24. layout = resource.meta.extends
  25. except AttributeError:
  26. pass
  27. try:
  28. block = resource.meta.default_block
  29. except AttributeError:
  30. pass
  31. if layout:
  32. self.logger.debug("Autoextending %s with %s" % (
  33. resource.relative_path, layout))
  34. extends_pattern = self.template.patterns['extends']
  35. if not re.search(extends_pattern, text):
  36. extended_text = self.template.get_extends_statement(layout)
  37. extended_text += '\n'
  38. if block:
  39. extended_text += ('%s\n%s\n%s' %
  40. (self.t_block_open_tag(block),
  41. text,
  42. self.t_block_close_tag(block)))
  43. else:
  44. extended_text += text
  45. return extended_text
  46. return text