From 64e2fe30e3d4c4f5804c5e54e5a7d583122268cb Mon Sep 17 00:00:00 2001 From: Chris Jerdonek Date: Wed, 25 Apr 2012 19:04:45 -0700 Subject: Started implementing dot notation. --- pystache/context.py | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/pystache/context.py b/pystache/context.py index de22a75..cb53b88 100644 --- a/pystache/context.py +++ b/pystache/context.py @@ -61,22 +61,40 @@ def _get_value(item, key): # 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 regarding tag interpolation. + Arguments: + + context_stack: a ContextStack instance. + This function does not coerce the return value to a string. """ 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 - # considered falsey, and should interpolate as the empty string. - return context.get(name, '') + return value class ContextStack(object): -- cgit v1.2.1