Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Unified Diff: sky/tools/webkitpy/thirdparty/coverage/templite.py

Issue 946753002: Delete a bunch of dead python code. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sky/tools/webkitpy/thirdparty/coverage/summary.py ('k') | sky/tools/webkitpy/thirdparty/coverage/tracer.c » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/tools/webkitpy/thirdparty/coverage/templite.py
diff --git a/sky/tools/webkitpy/thirdparty/coverage/templite.py b/sky/tools/webkitpy/thirdparty/coverage/templite.py
deleted file mode 100644
index c39e061efd92284bff97b22446273f58d19d42c7..0000000000000000000000000000000000000000
--- a/sky/tools/webkitpy/thirdparty/coverage/templite.py
+++ /dev/null
@@ -1,166 +0,0 @@
-"""A simple Python template renderer, for a nano-subset of Django syntax."""
-
-# Coincidentally named the same as http://code.activestate.com/recipes/496702/
-
-import re, sys
-
-class Templite(object):
- """A simple template renderer, for a nano-subset of Django syntax.
-
- Supported constructs are extended variable access::
-
- {{var.modifer.modifier|filter|filter}}
-
- loops::
-
- {% for var in list %}...{% endfor %}
-
- and ifs::
-
- {% if var %}...{% endif %}
-
- Comments are within curly-hash markers::
-
- {# This will be ignored #}
-
- Construct a Templite with the template text, then use `render` against a
- dictionary context to create a finished string.
-
- """
- def __init__(self, text, *contexts):
- """Construct a Templite with the given `text`.
-
- `contexts` are dictionaries of values to use for future renderings.
- These are good for filters and global values.
-
- """
- self.text = text
- self.context = {}
- for context in contexts:
- self.context.update(context)
-
- # Split the text to form a list of tokens.
- toks = re.split(r"(?s)({{.*?}}|{%.*?%}|{#.*?#})", text)
-
- # Parse the tokens into a nested list of operations. Each item in the
- # list is a tuple with an opcode, and arguments. They'll be
- # interpreted by TempliteEngine.
- #
- # When parsing an action tag with nested content (if, for), the current
- # ops list is pushed onto ops_stack, and the parsing continues in a new
- # ops list that is part of the arguments to the if or for op.
- ops = []
- ops_stack = []
- for tok in toks:
- if tok.startswith('{{'):
- # Expression: ('exp', expr)
- ops.append(('exp', tok[2:-2].strip()))
- elif tok.startswith('{#'):
- # Comment: ignore it and move on.
- continue
- elif tok.startswith('{%'):
- # Action tag: split into words and parse further.
- words = tok[2:-2].strip().split()
- if words[0] == 'if':
- # If: ('if', (expr, body_ops))
- if_ops = []
- assert len(words) == 2
- ops.append(('if', (words[1], if_ops)))
- ops_stack.append(ops)
- ops = if_ops
- elif words[0] == 'for':
- # For: ('for', (varname, listexpr, body_ops))
- assert len(words) == 4 and words[2] == 'in'
- for_ops = []
- ops.append(('for', (words[1], words[3], for_ops)))
- ops_stack.append(ops)
- ops = for_ops
- elif words[0].startswith('end'):
- # Endsomething. Pop the ops stack
- ops = ops_stack.pop()
- assert ops[-1][0] == words[0][3:]
- else:
- raise SyntaxError("Don't understand tag %r" % words)
- else:
- ops.append(('lit', tok))
-
- assert not ops_stack, "Unmatched action tag: %r" % ops_stack[-1][0]
- self.ops = ops
-
- def render(self, context=None):
- """Render this template by applying it to `context`.
-
- `context` is a dictionary of values to use in this rendering.
-
- """
- # Make the complete context we'll use.
- ctx = dict(self.context)
- if context:
- ctx.update(context)
-
- # Run it through an engine, and return the result.
- engine = _TempliteEngine(ctx)
- engine.execute(self.ops)
- return "".join(engine.result)
-
-
-class _TempliteEngine(object):
- """Executes Templite objects to produce strings."""
- def __init__(self, context):
- self.context = context
- self.result = []
-
- def execute(self, ops):
- """Execute `ops` in the engine.
-
- Called recursively for the bodies of if's and loops.
-
- """
- for op, args in ops:
- if op == 'lit':
- self.result.append(args)
- elif op == 'exp':
- try:
- self.result.append(str(self.evaluate(args)))
- except:
- exc_class, exc, _ = sys.exc_info()
- new_exc = exc_class("Couldn't evaluate {{ %s }}: %s"
- % (args, exc))
- raise new_exc
- elif op == 'if':
- expr, body = args
- if self.evaluate(expr):
- self.execute(body)
- elif op == 'for':
- var, lis, body = args
- vals = self.evaluate(lis)
- for val in vals:
- self.context[var] = val
- self.execute(body)
- else:
- raise AssertionError("TempliteEngine doesn't grok op %r" % op)
-
- def evaluate(self, expr):
- """Evaluate an expression.
-
- `expr` can have pipes and dots to indicate data access and filtering.
-
- """
- if "|" in expr:
- pipes = expr.split("|")
- value = self.evaluate(pipes[0])
- for func in pipes[1:]:
- value = self.evaluate(func)(value)
- elif "." in expr:
- dots = expr.split('.')
- value = self.evaluate(dots[0])
- for dot in dots[1:]:
- try:
- value = getattr(value, dot)
- except AttributeError:
- value = value[dot]
- if hasattr(value, '__call__'):
- value = value()
- else:
- value = self.context[expr]
- return value
« no previous file with comments | « sky/tools/webkitpy/thirdparty/coverage/summary.py ('k') | sky/tools/webkitpy/thirdparty/coverage/tracer.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698