From 85b363342c0d3a25155c500b42810f9ef9d82a22 Mon Sep 17 00:00:00 2001 From: Steve Baker Date: Tue, 4 Jun 2013 17:25:42 +1200 Subject: [PATCH] For Fn::Join, replace None items with an empty string. Currently, attempts to join lists with None items results in an error. This change is required for the next attempt to fix bug: #1184794 Change-Id: Ib599eeb21b7325ff797768100f1556a424a8bde9 --- heat/engine/template.py | 9 ++++++++- heat/tests/test_parser.py | 4 ++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/heat/engine/template.py b/heat/engine/template.py index 3bd77f31..bee3931a 100644 --- a/heat/engine/template.py +++ b/heat/engine/template.py @@ -217,7 +217,14 @@ class Template(collections.Mapping): if not isinstance(strings, (list, tuple)): raise TypeError('Arguments to "Fn::Join" not fully resolved') - return delim.join(strings) + + def empty_for_none(v): + if v is None: + return '' + else: + return v + + return delim.join(empty_for_none(value) for value in strings) return _resolve(lambda k, v: k == 'Fn::Join', handle_join, s) diff --git a/heat/tests/test_parser.py b/heat/tests/test_parser.py index 5baa4c0f..55db0d0c 100644 --- a/heat/tests/test_parser.py +++ b/heat/tests/test_parser.py @@ -79,6 +79,10 @@ class ParserTest(HeatTestCase): raw = {'Fn::Join': [' ', ['foo', 'bar', 'baz']]} self.assertEqual(join(raw), 'foo bar baz') + def test_join_none(self): + raw = {'Fn::Join': [' ', ['foo', None, 'baz']]} + self.assertEqual(join(raw), 'foo baz') + def test_join_list(self): raw = [{'Fn::Join': [' ', ['foo', 'bar', 'baz']]}, 'blarg', 'wibble'] parsed = join(raw) -- 2.45.2