diff options
Diffstat (limited to 'crosperf/field.py')
-rw-r--r-- | crosperf/field.py | 108 |
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) |