1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
import itertools
import uuid
from quickstart import settings
class Field(object):
_counter = itertools.count()
def __init__(
self, name, value, label=None, help='', required=True,
editable=True):
self.name = name
self.value = value
self.label = name if label is None else label
self.help = help
self.required = required
self.editable = editable
self.position = self._counter.next()
def __repr__(self):
return '<{}: {}={!r}>'.format(
self.__class__.__name__, self.name, self.value)
def __str__(self):
return str(self.value)
def validate(self):
if self.required and not self.value:
msg = 'a value is required for the {} field'.format(self.label)
raise ValueError(msg)
class StringField(Field):
field_type = 'string'
def validate(self):
if self.value is None:
self.value = ''
elif isinstance(self.value, basestring):
self.value = self.value.strip()
else:
msg = 'the {} field requires a string value'.format(self.label)
raise ValueError(msg)
super(StringField, self).validate()
class BoolField(Field):
field_type = 'bool'
def __init__(
self, name, value, default=False, label=None, help='',
editable=True):
super(BoolField, self).__init__(
name, value, label=label, help=help, required=False,
editable=editable)
self.default = default
def validate(self):
if self.value is None:
self.value = self.default
elif not isinstance(self.value, bool):
msg = 'the {} field requires a boolean value'.format(self.label)
raise ValueError(msg)
super(BoolField, self).validate()
class AutoGeneratedField(StringField):
def __init__(self, name, value=None, label=None, help='', editable=True):
if value is None:
value = '{}-{}'.format(name, uuid.uuid4().hex)
super(AutoGeneratedField, self).__init__(
name, value, label=label, help=help, required=False,
editable=editable)
class ProviderField(StringField):
def __init__(self, value):
super(ProviderField, self).__init__(
'type', value, label='provider type',
help='the provider type enabled for this environment',
required=True, editable=False)
|