From: JUN JIE NAN Date: Sun, 11 Aug 2013 03:24:38 +0000 (+0800) Subject: Do validation in parameter schema X-Git-Tag: 2014.1~206^2 X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=7c8181f226f5f161590052da2cce3937754fb2ce;p=openstack-build%2Fheat-build.git Do validation in parameter schema Provide validate method in parameter schema and call it in each parameter object. Implements blueprint hot-parameters Change-Id: Ia85c5fe9eb777bc1e5f76f9ddb08a6ec96100c38 --- diff --git a/heat/engine/parameters.py b/heat/engine/parameters.py index 95c4b935..a8a98cd2 100644 --- a/heat/engine/parameters.py +++ b/heat/engine/parameters.py @@ -55,6 +55,28 @@ class ParamSchema(dict): continue check(name, value, const) + def constraints(self): + ptype = self[TYPE] + keys = { + STRING: [ALLOWED_VALUES, ALLOWED_PATTERN, MAX_LENGTH, MIN_LENGTH], + NUMBER: [ALLOWED_VALUES, MAX_VALUE, MIN_VALUE], + JSON: [MAX_LENGTH, MIN_LENGTH] + }.get(ptype) + list_keys = { + COMMA_DELIMITED_LIST: [ALLOWED_VALUES], + JSON: [ALLOWED_VALUES] + }.get(ptype) + return (keys, list_keys) + + def validate(self, name, value): + (keys, list_keys) = self.constraints() + if keys: + self.do_check(name, value, keys) + if list_keys: + values = value + for value in values: + self.do_check(name, value, list_keys) + def raise_error(self, name, message, desc=True): if desc: message = self.get(CONSTRAINT_DESCRIPTION) or message @@ -200,17 +222,14 @@ class NumberParam(Parameter): return float(self.value()) def validate(self, val): - self.schema.do_check(self.name, val, [ALLOWED_VALUES, - MAX_VALUE, MIN_VALUE]) + self.schema.validate(self.name, val) class StringParam(Parameter): '''A template parameter of type "String".''' def validate(self, val): - self.schema.do_check(self.name, val, - [ALLOWED_VALUES, - ALLOWED_PATTERN, MAX_LENGTH, MIN_LENGTH]) + self.schema.validate(self.name, val) class CommaDelimitedListParam(Parameter, collections.Sequence): @@ -240,8 +259,7 @@ class CommaDelimitedListParam(Parameter, collections.Sequence): def validate(self, val): parsed = self.parse(val) - for val in parsed: - self.schema.do_check(self.name, val, [ALLOWED_VALUES]) + self.schema.validate(self.name, parsed) class JsonParam(Parameter, collections.Mapping): @@ -286,9 +304,7 @@ class JsonParam(Parameter, collections.Mapping): def validate(self, val): val = self.parse(val) - self.schema.do_check(self.name, val, [MAX_LENGTH, MIN_LENGTH]) - for key in val: - self.schema.do_check(self.name, key, [ALLOWED_VALUES]) + self.schema.validate(self.name, val) class Parameters(collections.Mapping):