| #!/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) |