aboutsummaryrefslogtreecommitdiff
path: root/crosperf/field.py
blob: b3cdaa23ea7c2d8affba215f1c911ead37e9c55e (plain)
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#!/usr/bin/python

# Copyright 2011 Google Inc. All Rights Reserved.


class Field(object):
  """Class representing a Field in an experiment file."""

  def __init__(self, name, required, default, inheritable, description):
    self.name = name
    self.required = required
    self.assigned = False
    self.default = default
    self._value = default
    self.inheritable = inheritable
    self.description = description

  def Set(self, value, parse=True):
    if parse:
      self._value = self._Parse(value)
    else:
      self._value = value
    self.assigned = True

  def Append(self, value):
    self._value += self._Parse(value)
    self.assigned = True

  def _Parse(self, value):
    return value

  def Get(self):
    return self._value

  def GetString(self):
    return str(self._value)


class TextField(Field):
  def __init__(self, name, required=False, default="", inheritable=False,
               description=""):
    super(TextField, self).__init__(name, required, default, inheritable,
                                    description)

  def _Parse(self, value):
    return str(value)


class BooleanField(Field):
  def __init__(self, name, required=False, default=False, inheritable=False,
               description=""):
    super(BooleanField, self).__init__(name, required, default, inheritable,
                                       description)

  def _Parse(self, value):
    if value.lower() == "true":
      return True
    elif value.lower() == "false":
      return False
    raise Exception("Invalid value for '%s'. Must be true or false." %
                    self.name)


class IntegerField(Field):
  def __init__(self, name, required=False, default=0, inheritable=False,
               description=""):
    super(IntegerField, self).__init__(name, required, default, inheritable,
                                       description)

  def _Parse(self, value):
    return int(value)


class FloatField(Field):
  def __init__(self, name, required=False, default=0, inheritable=False,
               description=""):
    super(FloatField, self).__init__(name, required, default, inheritable,
                                     description)

  def _Parse(self, value):
    return float(value)


class ListField(Field):
  def __init__(self, name, required=False, default=[], inheritable=False,
               description=""):
    super(ListField, self).__init__(name, required, default, inheritable,
                                    description)

  def _Parse(self, value):
    return value.split()

  def GetString(self):
    return " ".join(self._value)


class EnumField(Field):
  def __init__(self, name, options, required=False, default="",
               inheritable=False, description=""):
    super(EnumField, self).__init__(name, required, default, inheritable,
                                    description)
    self.options = options

  def _Parse(self, value):
    if value not in self.options:
      raise Exception("Invalid enum value for field '%s'. Must be one of (%s)"
                      % (self.name, ", ".join(self.options)))
    return str(value)