4
from quickstart import settings
9
_counter = itertools.count()
12
self, name, value, label=None, help='', required=True,
16
self.label = name if label is None else label
18
self.required = required
19
self.editable = editable
20
self.position = self._counter.next()
23
return '<{}: {}={!r}>'.format(
24
self.__class__.__name__, self.name, self.value)
27
return str(self.value)
30
if self.required and not self.value:
31
msg = 'a value is required for the {} field'.format(self.label)
35
class StringField(Field):
40
if self.value is None:
42
elif isinstance(self.value, basestring):
43
self.value = self.value.strip()
45
msg = 'the {} field requires a string value'.format(self.label)
47
super(StringField, self).validate()
50
class BoolField(Field):
55
self, name, value, default=False, label=None, help='',
57
super(BoolField, self).__init__(
58
name, value, label=label, help=help, required=False,
60
self.default = default
63
if self.value is None:
64
self.value = self.default
65
elif not isinstance(self.value, bool):
66
msg = 'the {} field requires a boolean value'.format(self.label)
68
super(BoolField, self).validate()
71
class AutoGeneratedField(StringField):
73
def __init__(self, name, value=None, label=None, help='', editable=True):
75
value = '{}-{}'.format(name, uuid.uuid4().hex)
76
super(AutoGeneratedField, self).__init__(
77
name, value, label=label, help=help, required=False,
81
class ProviderField(StringField):
83
def __init__(self, value):
84
super(ProviderField, self).__init__(
85
'type', value, label='provider type',
86
help='the provider type enabled for this environment',
87
required=True, editable=False)