Home | History | Annotate | Download | only in crosperf
      1 # Copyright 2011 Google Inc. All Rights Reserved.
      2 """Module to represent a Field in an experiment file."""
      3 
      4 
      5 class Field(object):
      6   """Class representing a Field in an experiment file."""
      7 
      8   def __init__(self, name, required, default, inheritable, description):
      9     self.name = name
     10     self.required = required
     11     self.assigned = False
     12     self.default = default
     13     self._value = default
     14     self.inheritable = inheritable
     15     self.description = description
     16 
     17   def Set(self, value, parse=True):
     18     if parse:
     19       self._value = self._Parse(value)
     20     else:
     21       self._value = value
     22     self.assigned = True
     23 
     24   def Append(self, value):
     25     self._value += self._Parse(value)
     26     self.assigned = True
     27 
     28   def _Parse(self, value):
     29     return value
     30 
     31   def Get(self):
     32     return self._value
     33 
     34   def GetString(self):
     35     return str(self._value)
     36 
     37 
     38 class TextField(Field):
     39   """Class of text field."""
     40 
     41   def __init__(self,
     42                name,
     43                required=False,
     44                default='',
     45                inheritable=False,
     46                description=''):
     47     super(TextField, self).__init__(name, required, default, inheritable,
     48                                     description)
     49 
     50   def _Parse(self, value):
     51     return str(value)
     52 
     53 
     54 class BooleanField(Field):
     55   """Class of boolean field."""
     56 
     57   def __init__(self,
     58                name,
     59                required=False,
     60                default=False,
     61                inheritable=False,
     62                description=''):
     63     super(BooleanField, self).__init__(name, required, default, inheritable,
     64                                        description)
     65 
     66   def _Parse(self, value):
     67     if value.lower() == 'true':
     68       return True
     69     elif value.lower() == 'false':
     70       return False
     71     raise TypeError(
     72         "Invalid value for '%s'. Must be true or false." % self.name)
     73 
     74 
     75 class IntegerField(Field):
     76   """Class of integer field."""
     77 
     78   def __init__(self,
     79                name,
     80                required=False,
     81                default=0,
     82                inheritable=False,
     83                description=''):
     84     super(IntegerField, self).__init__(name, required, default, inheritable,
     85                                        description)
     86 
     87   def _Parse(self, value):
     88     return int(value)
     89 
     90 
     91 class FloatField(Field):
     92   """Class of float field."""
     93 
     94   def __init__(self,
     95                name,
     96                required=False,
     97                default=0,
     98                inheritable=False,
     99                description=''):
    100     super(FloatField, self).__init__(name, required, default, inheritable,
    101                                      description)
    102 
    103   def _Parse(self, value):
    104     return float(value)
    105 
    106 
    107 class ListField(Field):
    108   """Class of list field."""
    109 
    110   def __init__(self,
    111                name,
    112                required=False,
    113                default=None,
    114                inheritable=False,
    115                description=''):
    116     super(ListField, self).__init__(name, required, default, inheritable,
    117                                     description)
    118 
    119   def _Parse(self, value):
    120     return value.split()
    121 
    122   def GetString(self):
    123     return ' '.join(self._value)
    124 
    125   def Append(self, value):
    126     v = self._Parse(value)
    127     if not self._value:
    128       self._value = v
    129     else:
    130       self._value += v
    131     self.assigned = True
    132 
    133 
    134 class EnumField(Field):
    135   """Class of enum field."""
    136 
    137   def __init__(self,
    138                name,
    139                options,
    140                required=False,
    141                default='',
    142                inheritable=False,
    143                description=''):
    144     super(EnumField, self).__init__(name, required, default, inheritable,
    145                                     description)
    146     self.options = options
    147 
    148   def _Parse(self, value):
    149     if value not in self.options:
    150       raise TypeError("Invalid enum value for field '%s'. Must be one of (%s)" %
    151                       (self.name, ', '.join(self.options)))
    152     return str(value)
    153