diff options
-rw-r--r-- | heat/engine/parameters.py | 4 | ||||
-rw-r--r-- | heat/engine/resources/template_resource.py | 2 | ||||
-rw-r--r-- | heat/tests/test_parameters.py | 13 | ||||
-rw-r--r-- | requirements.txt | 4 | ||||
-rw-r--r-- | test-requirements.txt | 2 |
5 files changed, 18 insertions, 7 deletions
diff --git a/heat/engine/parameters.py b/heat/engine/parameters.py index c20d82444..944a57c8d 100644 --- a/heat/engine/parameters.py +++ b/heat/engine/parameters.py @@ -15,9 +15,11 @@ import collections import itertools import json +import six from heat.engine import constraints as constr from heat.common import exception +from heat.openstack.common import strutils PARAMETER_KEYS = ( @@ -251,7 +253,7 @@ class Parameter(object): if self.hidden(): return '******' else: - return str(value) + return strutils.safe_encode(six.text_type(value)) class NumberParam(Parameter): diff --git a/heat/engine/resources/template_resource.py b/heat/engine/resources/template_resource.py index e10500000..7bf27c1ce 100644 --- a/heat/engine/resources/template_resource.py +++ b/heat/engine/resources/template_resource.py @@ -59,7 +59,7 @@ class TemplateResource(stack_resource.StackResource): self._parsed_nested = None self.stack = stack self.validation_exception = None - self.update_allowed_keys = ('Properties',) + self.update_allowed_keys = ('Properties', 'Metadata') tri = stack.env.get_resource_info( json_snippet['Type'], diff --git a/heat/tests/test_parameters.py b/heat/tests/test_parameters.py index d91343dc2..8413fd4e0 100644 --- a/heat/tests/test_parameters.py +++ b/heat/tests/test_parameters.py @@ -164,6 +164,11 @@ class ParameterTest(testtools.TestCase): p = self.new_parameter('p', schema, 'bar') self.assertEqual('bar', p.value()) + def test_string_value_unicode(self): + schema = {'Type': 'String'} + p = self.new_parameter('p', schema, u'test\u2665') + self.assertEqual(u'test\u2665', p.value()) + def test_string_value_list_bad(self): schema = {'Type': 'String', 'ConstraintDescription': 'wibble', @@ -375,13 +380,17 @@ class ParametersTest(testtools.TestCase): def test_map_str(self): template = {'Parameters': {'Foo': {'Type': 'String'}, - 'Bar': {'Type': 'Number'}}} + 'Bar': {'Type': 'Number'}, + 'Uni': {'Type': 'String'}}} stack_name = 'test_params' params = self.new_parameters(stack_name, template, - {'Foo': 'foo', 'Bar': '42'}) + {'Foo': 'foo', + 'Bar': '42', + 'Uni': u'test\u2665'}) expected = {'Foo': 'foo', 'Bar': '42', + 'Uni': 'test\xe2\x99\xa5', 'AWS::Region': 'ap-southeast-1', 'AWS::StackId': 'arn:openstack:heat:::stacks/{0}/{1}'.format( diff --git a/requirements.txt b/requirements.txt index 4b6298d53..1adc1365b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13,8 +13,8 @@ sqlalchemy-migrate>=0.8.2,!=0.8.4 python-novaclient>=2.17.0 PasteDeploy>=1.5.0 requests>=1.1 -Routes>=1.12.3 -SQLAlchemy>=0.7.8,<=0.9.99 +Routes>=1.12.3,!=2.0 +SQLAlchemy>=0.7.8,!=0.9.5,<=0.9.99 WebOb>=1.2.3 python-heatclient>=0.2.3 python-keystoneclient>=0.7.0 diff --git a/test-requirements.txt b/test-requirements.txt index f8aab6837..1faa43fce 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -9,6 +9,6 @@ testtools>=0.9.34 testrepository>=0.0.18 testscenarios>=0.4 python-glanceclient>=0.9.0 -sphinx>=1.1.2,<1.2 +sphinx>=1.1.2,<1.1.999 oslosphinx lockfile>=0.8 |