[PATCH 3 of 5] templater: move stringify() to templateutil module
Yuya Nishihara
yuya at tcha.org
Fri Mar 9 07:45:32 EST 2018
# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1520518246 -32400
# Thu Mar 08 23:10:46 2018 +0900
# Node ID dc412296cebd7c33cbae3b7ed5b0974186105387
# Parent aac4772ff9b50425be5dd17ede58d2edb2a53699
templater: move stringify() to templateutil module
As we have a util module, it doesn't make sense to import stringify() from
templatefilters.py.
diff --git a/mercurial/formatter.py b/mercurial/formatter.py
--- a/mercurial/formatter.py
+++ b/mercurial/formatter.py
@@ -124,6 +124,7 @@ from . import (
templatefilters,
templatekw,
templater,
+ templateutil,
util,
)
from .utils import dateutil
@@ -403,7 +404,7 @@ class templateformatter(baseformatter):
props['revcache'] = {}
props = pycompat.strkwargs(props)
g = self._t(ref, **props)
- self._out.write(templater.stringify(g))
+ self._out.write(templateutil.stringify(g))
def end(self):
baseformatter.end(self)
diff --git a/mercurial/hgweb/hgweb_mod.py b/mercurial/hgweb/hgweb_mod.py
--- a/mercurial/hgweb/hgweb_mod.py
+++ b/mercurial/hgweb/hgweb_mod.py
@@ -35,6 +35,7 @@ from .. import (
repoview,
templatefilters,
templater,
+ templateutil,
ui as uimod,
util,
wireproto,
@@ -418,7 +419,7 @@ class hgweb(object):
try:
tmpl = rctx.templater(req)
ctype = tmpl('mimetype', encoding=encoding.encoding)
- ctype = templater.stringify(ctype)
+ ctype = templateutil.stringify(ctype)
# check read permissions non-static content
if cmd != 'static':
diff --git a/mercurial/hgweb/hgwebdir_mod.py b/mercurial/hgweb/hgwebdir_mod.py
--- a/mercurial/hgweb/hgwebdir_mod.py
+++ b/mercurial/hgweb/hgwebdir_mod.py
@@ -37,6 +37,7 @@ from .. import (
pycompat,
scmutil,
templater,
+ templateutil,
ui as uimod,
util,
)
@@ -239,7 +240,7 @@ class hgwebdir(object):
virtual = req.env.get("PATH_INFO", "").strip('/')
tmpl = self.templater(req, nonce)
ctype = tmpl('mimetype', encoding=encoding.encoding)
- ctype = templater.stringify(ctype)
+ ctype = templateutil.stringify(ctype)
# a static file
if virtual.startswith('static/') or 'static' in req.form:
diff --git a/mercurial/logcmdutil.py b/mercurial/logcmdutil.py
--- a/mercurial/logcmdutil.py
+++ b/mercurial/logcmdutil.py
@@ -33,6 +33,7 @@ from . import (
smartset,
templatekw,
templater,
+ templateutil,
util,
)
from .utils import dateutil
@@ -449,13 +450,15 @@ class changesettemplater(changesetprinte
self._parts.update(m)
if self._parts['docheader']:
- self.ui.write(templater.stringify(self.t(self._parts['docheader'])))
+ self.ui.write(
+ templateutil.stringify(self.t(self._parts['docheader'])))
def close(self):
if self._parts['docfooter']:
if not self.footer:
self.footer = ""
- self.footer += templater.stringify(self.t(self._parts['docfooter']))
+ self.footer += templateutil.stringify(
+ self.t(self._parts['docfooter']))
return super(changesettemplater, self).close()
def _show(self, ctx, copies, props):
@@ -470,11 +473,12 @@ class changesettemplater(changesetprinte
# since there's inherently a conflict between header (across items) and
# separator (per item)
if self._parts['separator'] and index > 0:
- self.ui.write(templater.stringify(self.t(self._parts['separator'])))
+ self.ui.write(
+ templateutil.stringify(self.t(self._parts['separator'])))
# write header
if self._parts['header']:
- h = templater.stringify(self.t(self._parts['header'], **props))
+ h = templateutil.stringify(self.t(self._parts['header'], **props))
if self.buffered:
self.header[ctx.rev()] = h
else:
@@ -484,12 +488,12 @@ class changesettemplater(changesetprinte
# write changeset metadata, then patch if requested
key = self._parts[self._tref]
- self.ui.write(templater.stringify(self.t(key, **props)))
+ self.ui.write(templateutil.stringify(self.t(key, **props)))
self._showpatch(ctx)
if self._parts['footer']:
if not self.footer:
- self.footer = templater.stringify(
+ self.footer = templateutil.stringify(
self.t(self._parts['footer'], **props))
def templatespec(tmpl, mapfile):
diff --git a/mercurial/templatefilters.py b/mercurial/templatefilters.py
--- a/mercurial/templatefilters.py
+++ b/mercurial/templatefilters.py
@@ -19,6 +19,7 @@ from . import (
pycompat,
registrar,
templatekw,
+ templateutil,
url,
util,
)
@@ -375,18 +376,7 @@ def stringify(thing):
"""Any type. Turns the value into text by converting values into
text and concatenating them.
"""
- thing = templatekw.unwraphybrid(thing)
- if util.safehasattr(thing, '__iter__') and not isinstance(thing, bytes):
- if isinstance(thing, str):
- # This is only reachable on Python 3 (otherwise
- # isinstance(thing, bytes) would have been true), and is
- # here to prevent infinite recursion bugs on Python 3.
- raise error.ProgrammingError(
- 'stringify got unexpected unicode string: %r' % thing)
- return "".join([stringify(t) for t in thing if t is not None])
- if thing is None:
- return ""
- return pycompat.bytestr(thing)
+ return templateutil.stringify(thing)
@templatefilter('stripdir')
def stripdir(text):
diff --git a/mercurial/templater.py b/mercurial/templater.py
--- a/mercurial/templater.py
+++ b/mercurial/templater.py
@@ -1118,8 +1118,6 @@ def expandaliases(tree, aliases):
# template engine
-stringify = templatefilters.stringify
-
def _flatten(thing):
'''yield a single stream from a possibly nested set of iterators'''
thing = templatekw.unwraphybrid(thing)
@@ -1366,7 +1364,7 @@ class templater(object):
def render(self, mapping):
"""Render the default unnamed template and return result as string"""
mapping = pycompat.strkwargs(mapping)
- return stringify(self('', **mapping))
+ return templateutil.stringify(self('', **mapping))
def __call__(self, t, **mapping):
mapping = pycompat.byteskwargs(mapping)
diff --git a/mercurial/templateutil.py b/mercurial/templateutil.py
--- a/mercurial/templateutil.py
+++ b/mercurial/templateutil.py
@@ -13,7 +13,6 @@ from .i18n import _
from . import (
error,
pycompat,
- templatefilters,
templatekw,
util,
)
@@ -24,6 +23,21 @@ class ResourceUnavailable(error.Abort):
class TemplateNotFound(error.Abort):
pass
+def stringify(thing):
+ """Turn values into bytes by converting into text and concatenating them"""
+ thing = templatekw.unwraphybrid(thing)
+ if util.safehasattr(thing, '__iter__') and not isinstance(thing, bytes):
+ if isinstance(thing, str):
+ # This is only reachable on Python 3 (otherwise
+ # isinstance(thing, bytes) would have been true), and is
+ # here to prevent infinite recursion bugs on Python 3.
+ raise error.ProgrammingError(
+ 'stringify got unexpected unicode string: %r' % thing)
+ return "".join([stringify(t) for t in thing if t is not None])
+ if thing is None:
+ return ""
+ return pycompat.bytestr(thing)
+
def findsymbolicname(arg):
"""Find symbolic name for the given compiled expression; returns None
if nothing found reliably"""
@@ -223,5 +237,3 @@ def getdictitem(dictarg, key):
if val is None:
return
return templatekw.wraphybridvalue(dictarg, key, val)
-
-stringify = templatefilters.stringify
diff --git a/tests/test-template-engine.t b/tests/test-template-engine.t
--- a/tests/test-template-engine.t
+++ b/tests/test-template-engine.t
@@ -1,7 +1,10 @@
$ cat > engine.py << EOF
>
- > from mercurial import templater
+ > from mercurial import (
+ > templater,
+ > templateutil,
+ > )
>
> class mytemplater(object):
> def __init__(self, loader, filters, defaults, resources, aliases):
@@ -31,7 +34,7 @@
> v = v(**props)
> elif callable(v):
> v = v(self, props)
- > v = templater.stringify(v)
+ > v = templateutil.stringify(v)
> tmpl = tmpl.replace('{{%s}}' % k, v)
> yield tmpl
>
More information about the Mercurial-devel
mailing list