Used proper 2to3-converted pystache lib.

This commit is contained in:
sv-ncp-3 root 2014-11-10 16:45:56 +01:00
parent a335f7e702
commit 3239f7be34
10 changed files with 30 additions and 25 deletions

View File

@ -22,7 +22,7 @@ except:
from sys import exc_info from sys import exc_info
ex_type, ex_value, tb = exc_info() ex_type, ex_value, tb = exc_info()
new_ex = Exception("%s: %s" % (ex_type.__name__, ex_value)) new_ex = Exception("%s: %s" % (ex_type.__name__, ex_value))
raise new_ex.__class__, new_ex, tb raise new_ex.__class__(new_ex).with_traceback(tb)
# The optparse module is deprecated in Python 2.7 in favor of argparse. # The optparse module is deprecated in Python 2.7 in favor of argparse.
# However, argparse is not available in Python 2.6 and earlier. # However, argparse is not available in Python 2.6 and earlier.
@ -88,7 +88,7 @@ def main(sys_argv=sys.argv):
context = json.loads(context) context = json.loads(context)
rendered = renderer.render(template, context) rendered = renderer.render(template, context)
print rendered print(rendered)
if __name__=='__main__': if __name__=='__main__':

View File

@ -13,9 +13,9 @@ def _get_string_types():
# and byte strings, and 2to3 seems to convert all of "str", "unicode", # and byte strings, and 2to3 seems to convert all of "str", "unicode",
# and "basestring" to Python 3's "str". # and "basestring" to Python 3's "str".
if version_info < (3, ): if version_info < (3, ):
return basestring return str
# The latter evaluates to "bytes" in Python 3 -- even after conversion by 2to3. # The latter evaluates to "bytes" in Python 3 -- even after conversion by 2to3.
return (str, type(u"a".encode('utf-8'))) return (str, type("a".encode('utf-8')))
_STRING_TYPES = _get_string_types() _STRING_TYPES = _get_string_types()

View File

@ -15,6 +15,7 @@ spec, we define these categories mutually exclusively as follows:
""" """
from pystache.common import PystacheError from pystache.common import PystacheError
import collections
# This equals '__builtin__' in Python 2 and 'builtins' in Python 3. # This equals '__builtin__' in Python 2 and 'builtins' in Python 3.
@ -69,7 +70,7 @@ def _get_value(context, key):
else: else:
# TODO: consider using EAFP here instead. # TODO: consider using EAFP here instead.
# http://docs.python.org/glossary.html#term-eafp # http://docs.python.org/glossary.html#term-eafp
if callable(attr): if isinstance(attr, collections.Callable):
return attr() return attr()
return attr return attr

View File

@ -39,7 +39,7 @@ STRING_ENCODING = sys.getdefaultencoding()
FILE_ENCODING = sys.getdefaultencoding() FILE_ENCODING = sys.getdefaultencoding()
# The delimiters to start with when parsing. # The delimiters to start with when parsing.
DELIMITERS = (u'{{', u'}}') DELIMITERS = ('{{', '}}')
# How to handle missing tags when rendering a template. # How to handle missing tags when rendering a template.
MISSING_TAGS = MissingTags.ignore MISSING_TAGS = MissingTags.ignore

View File

@ -86,7 +86,7 @@ class Loader(object):
def _make_locator(self): def _make_locator(self):
return Locator(extension=self.extension) return Locator(extension=self.extension)
def unicode(self, s, encoding=None): def str(self, s, encoding=None):
""" """
Convert a string to unicode using the given encoding, and return it. Convert a string to unicode using the given encoding, and return it.
@ -119,7 +119,7 @@ class Loader(object):
if encoding is None: if encoding is None:
encoding = self.file_encoding encoding = self.file_encoding
return self.unicode(b, encoding) return self.str(b, encoding)
def load_file(self, file_name): def load_file(self, file_name):
""" """

View File

@ -44,7 +44,7 @@ class ParsedTemplate(object):
if type(node) is str: if type(node) is str:
return node return node
return node.render(engine, context) return node.render(engine, context)
parts = map(get_unicode, self._parse_tree) parts = list(map(get_unicode, self._parse_tree))
s = ''.join(parts) s = ''.join(parts)
return str(s) return str(s)

View File

@ -9,9 +9,10 @@ import re
from pystache import defaults from pystache import defaults
from pystache.parsed import ParsedTemplate from pystache.parsed import ParsedTemplate
import collections
END_OF_LINE_CHARACTERS = [u'\r', u'\n'] END_OF_LINE_CHARACTERS = ['\r', '\n']
NON_BLANK_RE = re.compile(r'^(.)', re.M) NON_BLANK_RE = re.compile(r'^(.)', re.M)
@ -30,8 +31,8 @@ def parse(template, delimiters=None):
Examples: Examples:
>>> parsed = parse(u"Hey {{#who}}{{name}}!{{/who}}") >>> parsed = parse("Hey {{#who}}{{name}}!{{/who}}")
>>> print str(parsed).replace('u', '') # This is a hack to get the test to pass both in Python 2 and 3. >>> print(str(parsed).replace('u', '')) # This is a hack to get the test to pass both in Python 2 and 3.
['Hey ', _SectionNode(key='who', index_begin=12, index_end=21, parsed=[_EscapeNode(key='name'), '!'])] ['Hey ', _SectionNode(key='who', index_begin=12, index_end=21, parsed=[_EscapeNode(key='name'), '!'])]
""" """
@ -94,7 +95,7 @@ class _CommentNode(object):
return _format(self) return _format(self)
def render(self, engine, context): def render(self, engine, context):
return u'' return ''
class _ChangeNode(object): class _ChangeNode(object):
@ -106,7 +107,7 @@ class _ChangeNode(object):
return _format(self) return _format(self)
def render(self, engine, context): def render(self, engine, context):
return u'' return ''
class _EscapeNode(object): class _EscapeNode(object):
@ -168,7 +169,7 @@ class _InvertedNode(object):
# Note that lambdas are considered truthy for inverted sections # Note that lambdas are considered truthy for inverted sections
# per the spec. # per the spec.
if data: if data:
return u'' return ''
return self.parsed_section.render(engine, context) return self.parsed_section.render(engine, context)
@ -193,7 +194,7 @@ class _SectionNode(object):
parts = [] parts = []
for val in values: for val in values:
if callable(val): if isinstance(val, collections.Callable):
# Lambdas special case section rendering and bypass pushing # Lambdas special case section rendering and bypass pushing
# the data value onto the context stack. From the spec-- # the data value onto the context stack. From the spec--
# #
@ -376,3 +377,4 @@ class _Parser(object):
return _InvertedNode(tag_key, parsed_section) return _InvertedNode(tag_key, parsed_section)
raise Exception("Invalid symbol for section tag: %s" % repr(tag_type)) raise Exception("Invalid symbol for section tag: %s" % repr(tag_type))

View File

@ -9,6 +9,7 @@ import re
from pystache.common import is_string from pystache.common import is_string
from pystache.parser import parse from pystache.parser import parse
import collections
def context_get(stack, name): def context_get(stack, name):
@ -104,7 +105,7 @@ class RenderEngine(object):
""" """
val = self.resolve_context(context, name) val = self.resolve_context(context, name)
if callable(val): if isinstance(val, collections.Callable):
# Return because _render_value() is already a string. # Return because _render_value() is already a string.
return self._render_value(val(), context) return self._render_value(val(), context)
@ -160,7 +161,7 @@ class RenderEngine(object):
if not is_string(val): if not is_string(val):
# In case the template is an integer, for example. # In case the template is an integer, for example.
val = self.to_str(val) val = self.to_str(val)
if type(val) is not unicode: if type(val) is not str:
val = self.literal(val) val = self.literal(val)
return self.render(val, context, delimiters) return self.render(val, context, delimiters)

View File

@ -32,7 +32,7 @@ class Renderer(object):
>>> partials = {'partial': 'Hello, {{thing}}!'} >>> partials = {'partial': 'Hello, {{thing}}!'}
>>> renderer = Renderer(partials=partials) >>> renderer = Renderer(partials=partials)
>>> # We apply print to make the test work in Python 3 after 2to3. >>> # We apply print to make the test work in Python 3 after 2to3.
>>> print renderer.render('{{>partial}}', {'thing': 'world'}) >>> print(renderer.render('{{>partial}}', {'thing': 'world'}))
Hello, world! Hello, world!
To customize string coercion (e.g. to render False values as ''), one can To customize string coercion (e.g. to render False values as ''), one can
@ -179,7 +179,7 @@ class Renderer(object):
# We avoid the Python ternary operator for Python 2.4 support. # We avoid the Python ternary operator for Python 2.4 support.
if isinstance(s, str): if isinstance(s, str):
return s return s
return self.unicode(s) return self.str(s)
def _to_unicode_hard(self, s): def _to_unicode_hard(self, s):
""" """
@ -197,7 +197,7 @@ class Renderer(object):
""" """
return str(self.escape(self._to_unicode_soft(s))) return str(self.escape(self._to_unicode_soft(s)))
def unicode(self, b, encoding=None): def str(self, b, encoding=None):
""" """
Convert a byte string to unicode, using string_encoding and decode_errors. Convert a byte string to unicode, using string_encoding and decode_errors.
@ -230,7 +230,7 @@ class Renderer(object):
""" """
return Loader(file_encoding=self.file_encoding, extension=self.file_extension, return Loader(file_encoding=self.file_encoding, extension=self.file_extension,
to_unicode=self.unicode, search_dirs=self.search_dirs) to_unicode=self.str, search_dirs=self.search_dirs)
def _make_load_template(self): def _make_load_template(self):
""" """
@ -299,7 +299,7 @@ class Renderer(object):
try: try:
return load_partial(name) return load_partial(name)
except TemplateNotFoundError: except TemplateNotFoundError:
return u'' return ''
return resolve_partial return resolve_partial
@ -316,7 +316,7 @@ class Renderer(object):
try: try:
return context_get(stack, name) return context_get(stack, name)
except KeyNotFoundError: except KeyNotFoundError:
return u'' return ''
return resolve_context return resolve_context
@ -458,3 +458,4 @@ class Renderer(object):
# Otherwise, we assume the template is an object. # Otherwise, we assume the template is an object.
return self._render_object(template, *context, **kwargs) return self._render_object(template, *context, **kwargs)

View File

@ -83,7 +83,7 @@ class SpecLoader(object):
""" """
if spec.template is not None: if spec.template is not None:
return self.loader.unicode(spec.template, spec.template_encoding) return self.loader.str(spec.template, spec.template_encoding)
path = self._find(spec) path = self._find(spec)