You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
3.8 KiB
152 lines
3.8 KiB
# Copyright 2011 Google Inc. All Rights Reserved. |
|
"""Module to represent a Field in an experiment file.""" |
|
|
|
|
|
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): |
|
"""Class of text 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): |
|
"""Class of boolean 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 TypeError("Invalid value for '%s'. Must be true or false." % |
|
self.name) |
|
|
|
|
|
class IntegerField(Field): |
|
"""Class of integer 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): |
|
"""Class of float 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): |
|
"""Class of list field.""" |
|
|
|
def __init__(self, |
|
name, |
|
required=False, |
|
default=None, |
|
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) |
|
|
|
def Append(self, value): |
|
v = self._Parse(value) |
|
if not self._value: |
|
self._value = v |
|
else: |
|
self._value += v |
|
self.assigned = True |
|
|
|
|
|
class EnumField(Field): |
|
"""Class of enum 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 TypeError("Invalid enum value for field '%s'. Must be one of (%s)" % |
|
(self.name, ', '.join(self.options))) |
|
return str(value)
|
|
|