summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Schubert <contact@benschubert.me>2019-07-26 16:13:49 +0100
committerBenjamin Schubert <contact@benschubert.me>2019-07-28 20:57:36 +0100
commiteeb140c0500b04119adc14254e8f55837bee85fa (patch)
tree465530aa8db433ca4b534b5137d5d9f0956d2e84
parentcf1e9068d993084ac7e71f505657efbeca6f6fe4 (diff)
downloadbuildstream-bschubert/node-enum.tar.gz
optionpool: Use 'get_enum' for getting the option typebschubert/node-enum
This improves the consistency of our error reporting
-rw-r--r--src/buildstream/_options/optionpool.py19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/buildstream/_options/optionpool.py b/src/buildstream/_options/optionpool.py
index d6b1b1614..a0730c617 100644
--- a/src/buildstream/_options/optionpool.py
+++ b/src/buildstream/_options/optionpool.py
@@ -22,6 +22,7 @@ import jinja2
from .._exceptions import LoadError, LoadErrorReason
from ..node import MappingNode, SequenceNode, _assert_symbol_name
+from ..types import FastEnum
from .optionbool import OptionBool
from .optionenum import OptionEnum
from .optionflags import OptionFlags
@@ -40,6 +41,15 @@ _OPTION_TYPES = {
}
+class OptionTypes(FastEnum):
+ BOOL = OptionBool.OPTION_TYPE
+ ENUM = OptionEnum.OPTION_TYPE
+ FLAG = OptionFlags.OPTION_TYPE
+ ELT_MASK = OptionEltMask.OPTION_TYPE
+ ARCH = OptionArch.OPTION_TYPE
+ OS = OptionOS.OPTION_TYPE
+
+
class OptionPool():
def __init__(self, element_path):
@@ -80,13 +90,8 @@ class OptionPool():
# Assert that the option name is a valid symbol
_assert_symbol_name(option_name, "option name", ref_node=option_definition, allow_dashes=False)
- opt_type_name = option_definition.get_str('type')
- try:
- opt_type = _OPTION_TYPES[opt_type_name]
- except KeyError:
- p = option_definition.get_scalar('type').get_provenance()
- raise LoadError("{}: Invalid option type '{}'".format(p, opt_type_name),
- LoadErrorReason.INVALID_DATA)
+ opt_type_name = option_definition.get_enum('type', OptionTypes)
+ opt_type = _OPTION_TYPES[opt_type_name.value]
option = opt_type(option_name, option_definition, self)
self._options[option_name] = option