[stringtemplate-interest] PyST Zero-valued attributes patch (was Problem in multivalued attribute handling?)

Terence Parr parrt at cs.usfca.edu
Sat Dec 9 12:50:01 PST 2006


Hi all, not sure this was fixed, adding to bug list.
Ter
On Jul 17, 2006, at 2:40 PM, Colin Bean wrote:

> Hi all,
>
> I've finally got a more complete patch to make PyST correctly handle
> an attribute with a numeric value of zero.
> In my previous post I mentioned that in my patched version, setting an
> attribute property to zero causes an error.  Upon further inspection,
> it seems like this also causes an error in the standard 2.2 release (I
> tested this on a clean build).  In order to duplicate it, do something
> like:
>
> import stringtemplate
> test = stringtemplate.StringTemplate('$foo.a$')
> test['foo'] = {'a':0}
> print test
>
> PyST should fail on the print statement.  This is not a problem in
> 2.1, it seems newly introduced in 2.2.
>
> The patch below fixes this bug, and causes zero values to render
> correctly in single value attributes, multivalued attributes, lists,
> and as object properties.  I still haven't tested zero values
> inherited in nested templates, so ymmv.  I'll post if I make a more
> complete patch, but this should fix basic zero attribute problems;
> code changes are below.
>
> Regards,
> -Colin
>
> --- StringTemplateOrig.py       2006-07-10 15:53:44.000000000 -0700
> +++ StringTemplate.py   2006-07-10 23:14:10.000000000 -0700
> @@ -677,7 +677,7 @@
>             # a normal call to setAttribute with unknown attribute
>             raise KeyError("no such attribute: " + name +
>                " in template context " +
> self.getEnclosingInstanceStackString())
> -        if value:
> +        if value is not None:
>             attributes[name] = value
>         elif isinstance(value, list) or \
>              isinstance(value, dict) or \
> --- language/ASTExprOrig.py     2006-07-10 15:57:35.000000000 -0700
> +++ language/ASTExpr.py 2006-07-11 07:13:38.000000000 -0700
> @@ -177,7 +177,7 @@
>                     i += 1
>             else:
>                 for ithValue in attributeValue:
> -                    if not ithValue:
> +                    if ithValue is None:
>                         # weird...a None value in the list; ignore
>                         continue
>
> @@ -270,7 +270,7 @@
>                 value = o[propertyName]
>             except:
>                 value = None
> -            if not value:
> +            if value is None:
>                 # no property defined; if a map in this group
>                 # then there may be a default value
>                 value = o[ASTExpr.DEFAULT_MAP_VALUE_NAME]
> @@ -390,7 +390,7 @@
>         return self._write(this, o, out, separator)
>
>     def _write(self, this, o, out, separator):
> -        if not o:
> +        if o is None:
>             return 0
>         n = 0
>         try:



More information about the stringtemplate-interest mailing list