Commit ad3707a0 by Chris Jerdonek

Moved the SpecLoader class into its own spec_loader module.

parent a9843211
......@@ -9,7 +9,7 @@ from . import defaults
from .context import Context
from .loader import Loader
from .renderengine import RenderEngine
from .template_spec import SpecLoader
from .spec_loader import SpecLoader
from .template_spec import TemplateSpec
......
# coding: utf-8
"""
This module supports customized (aka special or specified) template loading.
"""
import os.path
from .loader import Loader
# TODO: add test cases for this class.
class SpecLoader(object):
"""
Supports loading custom-specified templates (from TemplateSpec instances).
"""
def __init__(self, loader=None):
if loader is None:
loader = Loader()
self.loader = loader
def _find_relative(self, spec):
"""
Return the path to the template as a relative (dir, file_name) pair.
The directory returned is relative to the directory containing the
class definition of the given object. The method returns None for
this directory if the directory is unknown without first searching
the search directories.
"""
if spec.template_rel_path is not None:
return os.path.split(spec.template_rel_path)
# Otherwise, determine the file name separately.
locator = self.loader._make_locator()
template_name = (spec.template_name if spec.template_name is not None else
locator.make_template_name(spec))
file_name = locator.make_file_name(template_name, spec.template_extension)
return (spec.template_rel_directory, file_name)
def _find(self, spec):
"""
Find and return the path to the template associated to the instance.
"""
dir_path, file_name = self._find_relative(spec)
locator = self.loader._make_locator()
if dir_path is None:
# Then we need to search for the path.
path = locator.find_object(spec, self.loader.search_dirs, file_name=file_name)
else:
obj_dir = locator.get_object_directory(spec)
path = os.path.join(obj_dir, dir_path, file_name)
return path
def load(self, spec):
"""
Find and return the template associated to a TemplateSpec instance.
Returns the template as a unicode string.
Arguments:
spec: a TemplateSpec instance.
"""
if spec.template is not None:
return self.loader.unicode(spec.template, spec.template_encoding)
path = self._find(spec)
return self.loader.read(path, spec.template_encoding)
......@@ -5,13 +5,6 @@ This module supports customized (aka special or specified) template loading.
"""
import os.path
from .loader import Loader
# TODO: consider putting TemplateSpec and SpecLoader in separate modules.
# TODO: finish the class docstring.
class TemplateSpec(object):
......@@ -48,77 +41,3 @@ class TemplateSpec(object):
template_name = None
template_extension = None
template_encoding = None
# TODO: add test cases for this class.
class SpecLoader(object):
"""
Supports loading a custom-specified template.
"""
def __init__(self, loader=None):
if loader is None:
loader = Loader()
self.loader = loader
def _find_relative(self, spec):
"""
Return the path to the template as a relative (dir, file_name) pair.
The directory returned is relative to the directory containing the
class definition of the given object. The method returns None for
this directory if the directory is unknown without first searching
the search directories.
"""
if spec.template_rel_path is not None:
return os.path.split(spec.template_rel_path)
# Otherwise, determine the file name separately.
locator = self.loader._make_locator()
template_name = (spec.template_name if spec.template_name is not None else
locator.make_template_name(spec))
file_name = locator.make_file_name(template_name, spec.template_extension)
return (spec.template_rel_directory, file_name)
def _find(self, spec):
"""
Find and return the path to the template associated to the instance.
"""
dir_path, file_name = self._find_relative(spec)
locator = self.loader._make_locator()
if dir_path is None:
# Then we need to search for the path.
path = locator.find_object(spec, self.loader.search_dirs, file_name=file_name)
else:
obj_dir = locator.get_object_directory(spec)
path = os.path.join(obj_dir, dir_path, file_name)
return path
def load(self, spec):
"""
Find and return the template associated to a TemplateSpec instance.
Returns the template as a unicode string.
Arguments:
spec: a TemplateSpec instance.
"""
if spec.template is not None:
return self.loader.unicode(spec.template, spec.template_encoding)
path = self._find(spec)
return self.loader.read(path, spec.template_encoding)
......@@ -16,9 +16,10 @@ from examples.lambdas import Lambdas
from examples.inverted import Inverted, InvertedLists
from pystache import TemplateSpec
from pystache import Renderer
from pystache.template_spec import SpecLoader
from pystache.spec_loader import SpecLoader
from pystache.locator import Locator
from pystache.loader import Loader
from pystache.spec_loader import SpecLoader
from .common import DATA_DIR
from .common import EXAMPLES_DIR
from .common import AssertIsMixin
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment