""" Wrapper for loading plaintextformat templates from the filesystem, e.g.
with stripping unnecessary newlines and spaces from it. """
import re
import sys # Debug
from django.template import TemplateDoesNotExist
from django.template.loader import (BaseLoader, get_template_from_string,
find_template_loader, make_origin)
## Start templates with this to actually ptf them:
PTFTAG = u'{#ptfable#}'
PTFTAGLEN = len(PTFTAG)
# Another way:
#tagspacere = re.compile('}\s\s+{')
SPACERE = re.compile('\s\s+')
NEWLINERE = re.compile('\n')
class Loader(BaseLoader):
is_usable = True
## Stuff grabbed from django cache loader.
def __init__(self, loaders):
self._loaders = loaders
self._cached_loaders = []
# loaders = django.template.loaders.cached.Loader.loaders
@property
def loaders(self):
# Resolve loaders on demand to avoid circular imports
if not self._cached_loaders:
for loader in self._loaders:
self._cached_loaders.append(find_template_loader(loader))
return self._cached_loaders
# find_template = django.template.loaders.cached.Loader.find_template
def find_template(self, name, dirs=None):
for loader in self.loaders:
try:
template, display_name = loader.load_template_source(name, dirs)
return (template, make_origin(display_name, loader, name, dirs))
except TemplateDoesNotExist:
pass
raise TemplateDoesNotExist(name)
def load_template_source(self, template_name, template_dirs=None):
template, origin = self.find_template(template_name, template_dirs)
## Hack it up only if tagged.
if template.startswith(PTFTAG):
template = SPACERE.sub(u'',
NEWLINERE.sub(u'', template[PTFTAGLEN:]))
# Removing tag is optional if it's valid template, though.
return (template, origin)
load_template_source.is_usable = True
Comments