blob: b3cdaa23ea7c2d8affba215f1c911ead37e9c55e [file] [log] [blame]
Ahmad Sharif0dcbc4b2012-02-02 16:37:18 -08001#!/usr/bin/python
2
3# Copyright 2011 Google Inc. All Rights Reserved.
4
5
6class Field(object):
7 """Class representing a Field in an experiment file."""
8
9 def __init__(self, name, required, default, inheritable, description):
10 self.name = name
11 self.required = required
12 self.assigned = False
13 self.default = default
14 self._value = default
15 self.inheritable = inheritable
16 self.description = description
17
18 def Set(self, value, parse=True):
19 if parse:
20 self._value = self._Parse(value)
21 else:
22 self._value = value
23 self.assigned = True
24
25 def Append(self, value):
26 self._value += self._Parse(value)
27 self.assigned = True
28
29 def _Parse(self, value):
30 return value
31
32 def Get(self):
33 return self._value
34
35 def GetString(self):
36 return str(self._value)
37
38
39class TextField(Field):
40 def __init__(self, name, required=False, default="", inheritable=False,
41 description=""):
42 super(TextField, self).__init__(name, required, default, inheritable,
43 description)
44
45 def _Parse(self, value):
46 return str(value)
47
48
49class BooleanField(Field):
50 def __init__(self, name, required=False, default=False, inheritable=False,
51 description=""):
52 super(BooleanField, self).__init__(name, required, default, inheritable,
53 description)
54
55 def _Parse(self, value):
56 if value.lower() == "true":
57 return True
58 elif value.lower() == "false":
59 return False
60 raise Exception("Invalid value for '%s'. Must be true or false." %
61 self.name)
62
63
64class IntegerField(Field):
65 def __init__(self, name, required=False, default=0, inheritable=False,
66 description=""):
67 super(IntegerField, self).__init__(name, required, default, inheritable,
68 description)
69
70 def _Parse(self, value):
71 return int(value)
72
73
74class FloatField(Field):
75 def __init__(self, name, required=False, default=0, inheritable=False,
76 description=""):
77 super(FloatField, self).__init__(name, required, default, inheritable,
78 description)
79
80 def _Parse(self, value):
81 return float(value)
82
83
84class ListField(Field):
85 def __init__(self, name, required=False, default=[], inheritable=False,
86 description=""):
87 super(ListField, self).__init__(name, required, default, inheritable,
88 description)
89
90 def _Parse(self, value):
91 return value.split()
92
93 def GetString(self):
94 return " ".join(self._value)
95
96
97class EnumField(Field):
98 def __init__(self, name, options, required=False, default="",
99 inheritable=False, description=""):
100 super(EnumField, self).__init__(name, required, default, inheritable,
101 description)
102 self.options = options
103
104 def _Parse(self, value):
105 if value not in self.options:
106 raise Exception("Invalid enum value for field '%s'. Must be one of (%s)"
107 % (self.name, ", ".join(self.options)))
108 return str(value)