Added readonly attribute to a schema

A readonly schema is only expected to be read by users. It cannot be
changed and it cannot be included in profile/policy creation.

Change-Id: I6d87643f48661cdf95c3202d9aa66a6604861f99
This commit is contained in:
tengqm 2015-03-25 17:53:10 +08:00
parent 2274d61716
commit 31bc235d2b
4 changed files with 23 additions and 4 deletions

View File

@ -46,10 +46,10 @@ class Schema(collections.Mapping):
KEYS = (
TYPE, DESCRIPTION, DEFAULT, REQUIRED, SCHEMA, UPDATABLE,
CONSTRAINTS,
CONSTRAINTS, READONLY,
) = (
'type', 'description', 'default', 'required', 'schema', 'updatable',
'constraints',
'constraints', 'readonly',
)
TYPES = (
@ -60,7 +60,7 @@ class Schema(collections.Mapping):
def __init__(self, description=None, default=None,
required=False, schema=None, updatable=False,
constraints=None):
readonly=False, constraints=None):
if schema is not None:
if type(self) not in (List, Map):
@ -78,6 +78,7 @@ class Schema(collections.Mapping):
self.required = required
self.updatable = updatable
self.constraints = constraints or []
self.readonly = readonly
self._len = None
def has_default(self):
@ -135,6 +136,8 @@ class Schema(collections.Mapping):
return dict((n, dict(s)) for n, s in self.schema.items())
elif key == self.REQUIRED:
return self.required
elif key == self.READONLY:
return self.readonly
elif key == self.CONSTRAINTS:
if self.constraints:
return [dict(c) for c in self.constraints]

View File

@ -42,13 +42,14 @@ class PolicyTypeTest(base.SenlinTestCase):
'spec': {
'KEY1': {
'type': 'String',
'required': False,
'readonly': False,
'required': False,
'description': 'key1',
'default': 'default1',
},
'KEY2': {
'type': 'Integer',
'readonly': False,
'required': False,
'description': 'key2',
'default': 1,

View File

@ -42,12 +42,14 @@ class ProfileTypeTest(base.SenlinTestCase):
'spec': {
'INT': {
'type': 'Integer',
'readonly': False,
'required': False,
'description': 'int property',
'default': 0,
},
'STR': {
'type': 'String',
'readonly': False,
'required': False,
'description': 'string property',
'default': 'a string',
@ -55,11 +57,13 @@ class ProfileTypeTest(base.SenlinTestCase):
'LIST': {
'type': 'List',
'description': 'list property',
'readonly': False,
'required': False,
'schema': {
'*': {
'type': 'String',
'description': 'list item',
'readonly': False,
'required': False,
},
},
@ -68,16 +72,19 @@ class ProfileTypeTest(base.SenlinTestCase):
'MAP': {
'type': 'Map',
'description': 'map property',
'readonly': False,
'required': False,
'schema': {
'KEY1': {
'type': 'Integer',
'description': 'key1',
'readonly': False,
'required': False,
},
'KEY2': {
'type': 'String',
'description': 'key2',
'readonly': False,
'required': False,
},
},

View File

@ -34,6 +34,7 @@ class SchemaTest(testtools.TestCase):
'type': 'String',
'description': 'A string',
'default': 'wibble',
'readonly': False,
'required': True,
'constraints': [{
'constraint': ['foo', 'bar'],
@ -54,6 +55,7 @@ class SchemaTest(testtools.TestCase):
'type': 'String',
'description': 'A string',
'default': 'wibble',
'readonly': False,
'required': True,
'constraints': [{
'constraint': ['foo', 'bar'],
@ -61,6 +63,7 @@ class SchemaTest(testtools.TestCase):
}]
}
},
'readonly': False,
'required': False,
}
c = constraints.AllowedValues(['foo', 'bar'])
@ -78,6 +81,7 @@ class SchemaTest(testtools.TestCase):
'type': 'String',
'description': 'A string',
'default': 'wibble',
'readonly': False,
'required': True,
'constraints': [{
'type': 'AllowedValues',
@ -85,6 +89,7 @@ class SchemaTest(testtools.TestCase):
}]
}
},
'readonly': False,
'required': False,
}
c = constraints.AllowedValues(['foo', 'bar'])
@ -106,6 +111,7 @@ class SchemaTest(testtools.TestCase):
'type': 'String',
'description': 'A string',
'default': 'wibble',
'readonly': False,
'required': True,
'constraints': [{
'type': 'AllowedValues',
@ -113,9 +119,11 @@ class SchemaTest(testtools.TestCase):
}]
}
},
'readonly': False,
'required': False,
}
},
'readonly': False,
'required': False,
}
c = constraints.AllowedValues(['foo', 'bar'])