Source code for pyplanet.core.ui.loader

import os

from jinja2 import PrefixLoader, FileSystemLoader, PackageLoader


class _PyPlanetLoader(PrefixLoader):

	def __init__(self, mapping=None, delimiter='/'):
		super().__init__(mapping=mapping or self.get_mapping(), delimiter=delimiter)

	@classmethod
	def get_mapping(cls):
		from pyplanet.core import Controller

		mapping = dict()

		# Static core components.
		mapping['core.views'] = PackageLoader('pyplanet.views', 'templates')

		# Add app prefixes.
		for app_label, app in Controller.instance.apps.apps.items():
			template_path = os.path.join(app.path, 'templates')
			if os.path.exists(template_path):
				mapping[app_label] = FileSystemLoader(template_path)

		return mapping


[docs]class PyPlanetLoader: """ Lazy loader for the pyplanet jinja2 loader. """ _INSTANCE = None @classmethod def get_loader(cls): if not cls._INSTANCE: cls._INSTANCE = _PyPlanetLoader() return cls._INSTANCE