aboutsummaryrefslogtreecommitdiff
path: root/crosperf/field.py
diff options
context:
space:
mode:
authorStephen Hines <srhines@google.com>2017-02-08 10:42:04 +0000
committerandroid-build-merger <android-build-merger@google.com>2017-02-08 10:42:04 +0000
commitc5804ce784c39d6cf4f69139ab3197d989181cf9 (patch)
tree87b3a32b13c392939d66fa93105896f5df0736a6 /crosperf/field.py
parentbaba90fd78c18585d22430dc95c748f96ad0c772 (diff)
parent9c6fa5f9e514c743e62be0ee401c12e10c94d7f1 (diff)
downloadtoolchain-utils-c5804ce784c39d6cf4f69139ab3197d989181cf9.tar.gz
Merge remote-tracking branch 'aosp/mirror-chromium-master' into initial_import am: 870a8df6fc
am: 9c6fa5f9e5 Change-Id: Ie306363c46445f59e341b69121c4b0e113ad79b2
Diffstat (limited to 'crosperf/field.py')
-rw-r--r--crosperf/field.py152
1 files changed, 152 insertions, 0 deletions
diff --git a/crosperf/field.py b/crosperf/field.py
new file mode 100644
index 00000000..bc92e2cc
--- /dev/null
+++ b/crosperf/field.py
@@ -0,0 +1,152 @@
+# 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)