summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Jerdonek <chris.jerdonek@gmail.com>2012-04-01 21:06:26 -0700
committerChris Jerdonek <chris.jerdonek@gmail.com>2012-04-01 21:06:26 -0700
commitad3707a030293dec100b92d7e7b1242d18e4cf7c (patch)
treecaf943ec23a4796c018ac2aa7008818cadb2b499
parenta984321161ab760ac60514b50596d8147714e454 (diff)
downloadpystache-ad3707a030293dec100b92d7e7b1242d18e4cf7c.tar.gz
Moved the SpecLoader class into its own spec_loader module.
-rw-r--r--pystache/renderer.py2
-rw-r--r--pystache/spec_loader.py84
-rw-r--r--pystache/template_spec.py81
-rw-r--r--tests/test_template_spec.py3
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