| # 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 |