Commit 64e2fe30 by Chris Jerdonek

Started implementing dot notation.

parent 29ac86c0
...@@ -61,22 +61,40 @@ def _get_value(item, key): ...@@ -61,22 +61,40 @@ def _get_value(item, key):
# TODO: add some unit tests for this. # TODO: add some unit tests for this.
def resolve(context, name): def resolve(context_stack, name):
""" """
Resolve the given name against the given context stack. Resolve a name against a context stack.
This function follows the rules outlined in the section of the spec This function follows the rules outlined in the section of the spec
regarding tag interpolation. regarding tag interpolation.
Arguments:
context_stack: a ContextStack instance.
This function does not coerce the return value to a string. This function does not coerce the return value to a string.
""" """
if name == '.': if name == '.':
return context.top() return context_stack.top()
parts = name.split('.')
value = context_stack.get(parts[0], _NOT_FOUND)
for part in parts[1:]:
# TODO: use EAFP here instead.
# http://docs.python.org/glossary.html#term-eafp
if value is _NOT_FOUND:
break
value = _get_value(value, part)
# The spec says that if name resolution fails at any point, the result
# should be considered falsey, and should interpolate as the empty string.
if value is _NOT_FOUND:
return ''
# The spec says that if the name fails resolution, the result should be return value
# considered falsey, and should interpolate as the empty string.
return context.get(name, '')
class ContextStack(object): class ContextStack(object):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment