field.py revision 0dcbc4b1714260820fd4b8d6536fbb05e139cc0f
1#!/usr/bin/python 2 3# Copyright 2011 Google Inc. All Rights Reserved. 4 5 6class Field(object): 7 """Class representing a Field in an experiment file.""" 8 9 def __init__(self, name, required, default, inheritable, description): 10 self.name = name 11 self.required = required 12 self.assigned = False 13 self.default = default 14 self._value = default 15 self.inheritable = inheritable 16 self.description = description 17 18 def Set(self, value, parse=True): 19 if parse: 20 self._value = self._Parse(value) 21 else: 22 self._value = value 23 self.assigned = True 24 25 def Append(self, value): 26 self._value += self._Parse(value) 27 self.assigned = True 28 29 def _Parse(self, value): 30 return value 31 32 def Get(self): 33 return self._value 34 35 def GetString(self): 36 return str(self._value) 37 38 39class TextField(Field): 40 def __init__(self, name, required=False, default="", inheritable=False, 41 description=""): 42 super(TextField, self).__init__(name, required, default, inheritable, 43 description) 44 45 def _Parse(self, value): 46 return str(value) 47 48 49class BooleanField(Field): 50 def __init__(self, name, required=False, default=False, inheritable=False, 51 description=""): 52 super(BooleanField, self).__init__(name, required, default, inheritable, 53 description) 54 55 def _Parse(self, value): 56 if value.lower() == "true": 57 return True 58 elif value.lower() == "false": 59 return False 60 raise Exception("Invalid value for '%s'. Must be true or false." % 61 self.name) 62 63 64class IntegerField(Field): 65 def __init__(self, name, required=False, default=0, inheritable=False, 66 description=""): 67 super(IntegerField, self).__init__(name, required, default, inheritable, 68 description) 69 70 def _Parse(self, value): 71 return int(value) 72 73 74class FloatField(Field): 75 def __init__(self, name, required=False, default=0, inheritable=False, 76 description=""): 77 super(FloatField, self).__init__(name, required, default, inheritable, 78 description) 79 80 def _Parse(self, value): 81 return float(value) 82 83 84class ListField(Field): 85 def __init__(self, name, required=False, default=[], inheritable=False, 86 description=""): 87 super(ListField, self).__init__(name, required, default, inheritable, 88 description) 89 90 def _Parse(self, value): 91 return value.split() 92 93 def GetString(self): 94 return " ".join(self._value) 95 96 97class EnumField(Field): 98 def __init__(self, name, options, required=False, default="", 99 inheritable=False, description=""): 100 super(EnumField, self).__init__(name, required, default, inheritable, 101 description) 102 self.options = options 103 104 def _Parse(self, value): 105 if value not in self.options: 106 raise Exception("Invalid enum value for field '%s'. Must be one of (%s)" 107 % (self.name, ", ".join(self.options))) 108 return str(value) 109