]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Always convert AllowedValues to a list
authorZane Bitter <zbitter@redhat.com>
Thu, 25 Jul 2013 09:33:41 +0000 (11:33 +0200)
committerZane Bitter <zbitter@redhat.com>
Thu, 25 Jul 2013 09:33:41 +0000 (11:33 +0200)
Passing e.g. a string as the AllowedValues list can appear to work, since
str.__contains__() performs a substring match. It's better to fail fast, so
convert AllowedValues to a list regardless of its initial type.

Change-Id: I74783e6a7c1743ead3f086116dd3850afeb7a028

heat/engine/parameters.py
heat/engine/properties.py

index e21a3690a3cf631318b6a54eccecafef520455ae..f71fdacfaf3c91c71e1ce444c7dce7c831f38405 100644 (file)
@@ -87,7 +87,7 @@ class Parameter(object):
 
     def _validate(self, value):
         if VALUES in self.schema:
-            allowed = self.schema[VALUES]
+            allowed = list(self.schema[VALUES])
             if value not in allowed:
                 message = '%s not in %s %s' % (value, VALUES, allowed)
                 raise ValueError(self._error_msg(message))
@@ -253,7 +253,7 @@ class JsonParam(Parameter, collections.Mapping):
                 raise ValueError(self._error_msg(message))
         # check valid keys
         if VALUES in self.schema:
-            allowed = self.schema[VALUES]
+            allowed = list(self.schema[VALUES])
             bad_keys = [k for k in self.parsed if k not in allowed]
             if bad_keys:
                 message = ('keys %s are not in %s %s'
index 810ddaaad84b084e5117fbff588adc6492a2ada5..f1d0fb0285927c3b3bb998ea6b080bffcca0599d 100644 (file)
@@ -21,7 +21,8 @@ from heat.common import exception
 
 SCHEMA_KEYS = (
     REQUIRED, IMPLEMENTED, DEFAULT, TYPE, SCHEMA,
-    PATTERN, MIN_VALUE, MAX_VALUE, VALUES, MIN_LENGTH, MAX_LENGTH,
+    PATTERN, MIN_VALUE, MAX_VALUE, VALUES,
+    MIN_LENGTH, MAX_LENGTH,
 ) = (
     'Required', 'Implemented', 'Default', 'Type', 'Schema',
     'AllowedPattern', 'MinValue', 'MaxValue', 'AllowedValues',
@@ -67,7 +68,7 @@ class Property(object):
 
     def _check_allowed(self, value):
         if VALUES in self.schema:
-            allowed = self.schema[VALUES]
+            allowed = list(self.schema[VALUES])
             if value not in allowed:
                 raise ValueError('"%s" is not an allowed value %s' %
                                  (value, str(allowed)))