""" This module handles loading xmodule templates These templates are used by the CMS to provide content that overrides xmodule defaults for samples. ``Template``s are defined in x_module. They contain 2 attributes: :metadata: A dictionary with the template metadata :data: A JSON value that defines the template content """ # should this move to cms since it's really only for module crud? import logging from collections import defaultdict from xblock.core import XBlock log = logging.getLogger(__name__) def all_templates(): """ Returns all templates for enabled modules, grouped by descriptor type """ # TODO use memcache to memoize w/ expiration templates = defaultdict(list) for category, descriptor in XBlock.load_classes(): if not hasattr(descriptor, 'templates'): continue templates[category] = descriptor.templates() return templates