diff options
author | Chris Jerdonek <chris.jerdonek@gmail.com> | 2012-04-01 21:06:26 -0700 |
---|---|---|
committer | Chris Jerdonek <chris.jerdonek@gmail.com> | 2012-04-01 21:06:26 -0700 |
commit | ad3707a030293dec100b92d7e7b1242d18e4cf7c (patch) | |
tree | caf943ec23a4796c018ac2aa7008818cadb2b499 | |
parent | a984321161ab760ac60514b50596d8147714e454 (diff) | |
download | pystache-ad3707a030293dec100b92d7e7b1242d18e4cf7c.tar.gz |
Moved the SpecLoader class into its own spec_loader module.
-rw-r--r-- | pystache/renderer.py | 2 | ||||
-rw-r--r-- | pystache/spec_loader.py | 84 | ||||
-rw-r--r-- | pystache/template_spec.py | 81 | ||||
-rw-r--r-- | tests/test_template_spec.py | 3 |
4 files changed, 87 insertions, 83 deletions
diff --git a/pystache/renderer.py b/pystache/renderer.py index a02693c..9a0a1b3 100644 --- a/pystache/renderer.py +++ b/pystache/renderer.py @@ -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 diff --git a/pystache/spec_loader.py b/pystache/spec_loader.py new file mode 100644 index 0000000..e18140b --- /dev/null +++ b/pystache/spec_loader.py @@ -0,0 +1,84 @@ +# 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) diff --git a/pystache/template_spec.py b/pystache/template_spec.py index 4d042fa..c33f30b 100644 --- a/pystache/template_spec.py +++ b/pystache/template_spec.py @@ -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) diff --git a/tests/test_template_spec.py b/tests/test_template_spec.py index 6f9b9eb..35861d2 100644 --- a/tests/test_template_spec.py +++ b/tests/test_template_spec.py @@ -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 |