aboutsummaryrefslogtreecommitdiff
path: root/crosperf/field.py
diff options
context:
space:
mode:
Diffstat (limited to 'crosperf/field.py')
-rw-r--r--crosperf/field.py108
1 files changed, 108 insertions, 0 deletions
diff --git a/crosperf/field.py b/crosperf/field.py
new file mode 100644
index 00000000..b3cdaa23
--- /dev/null
+++ b/crosperf/field.py
@@ -0,0 +1,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)