Index: third_party/pystache/src/common.py |
diff --git a/third_party/pystache/src/common.py b/third_party/pystache/src/common.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..fb266dd8b57026f4369a83febc831e8adad973a5 |
--- /dev/null |
+++ b/third_party/pystache/src/common.py |
@@ -0,0 +1,71 @@ |
+# coding: utf-8 |
+ |
+""" |
+Exposes functionality needed throughout the project. |
+ |
+""" |
+ |
+from sys import version_info |
+ |
+def _get_string_types(): |
+ # TODO: come up with a better solution for this. One of the issues here |
+ # is that in Python 3 there is no common base class for unicode strings |
+ # and byte strings, and 2to3 seems to convert all of "str", "unicode", |
+ # and "basestring" to Python 3's "str". |
+ if version_info < (3, ): |
+ return basestring |
+ # The latter evaluates to "bytes" in Python 3 -- even after conversion by 2to3. |
+ return (unicode, type(u"a".encode('utf-8'))) |
+ |
+ |
+_STRING_TYPES = _get_string_types() |
+ |
+ |
+def is_string(obj): |
+ """ |
+ Return whether the given object is a byte string or unicode string. |
+ |
+ This function is provided for compatibility with both Python 2 and 3 |
+ when using 2to3. |
+ |
+ """ |
+ return isinstance(obj, _STRING_TYPES) |
+ |
+ |
+# This function was designed to be portable across Python versions -- both |
+# with older versions and with Python 3 after applying 2to3. |
+def read(path): |
+ """ |
+ Return the contents of a text file as a byte string. |
+ |
+ """ |
+ # Opening in binary mode is necessary for compatibility across Python |
+ # 2 and 3. In both Python 2 and 3, open() defaults to opening files in |
+ # text mode. However, in Python 2, open() returns file objects whose |
+ # read() method returns byte strings (strings of type `str` in Python 2), |
+ # whereas in Python 3, the file object returns unicode strings (strings |
+ # of type `str` in Python 3). |
+ f = open(path, 'rb') |
+ # We avoid use of the with keyword for Python 2.4 support. |
+ try: |
+ return f.read() |
+ finally: |
+ f.close() |
+ |
+ |
+class MissingTags(object): |
+ |
+ """Contains the valid values for Renderer.missing_tags.""" |
+ |
+ ignore = 'ignore' |
+ strict = 'strict' |
+ |
+ |
+class PystacheError(Exception): |
+ """Base class for Pystache exceptions.""" |
+ pass |
+ |
+ |
+class TemplateNotFoundError(PystacheError): |
+ """An exception raised when a template is not found.""" |
+ pass |