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