field.py revision 0dcbc4b1714260820fd4b8d6536fbb05e139cc0f
1#!/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)
109