summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Schubert <ben.c.schubert@gmail.com>2019-07-05 17:59:15 +0100
committerBenjamin Schubert <ben.c.schubert@gmail.com>2019-07-05 17:59:15 +0100
commite6a6cc74855d1ea433fa9c657188beed35a94da9 (patch)
tree5fe983f9ab5ea6e49969ecc617827ff6794874ef
parent473d999547841794f232ea1a27bab0387e6e4f7a (diff)
downloadbuildstream-bschubert/node-provenance.tar.gz
_yaml: rework 'assert_symbol_names' to not require provenancebschubert/node-provenance
Now that we get scalar Nodes, it is easier to just give the node and extract the provenance as needed.
-rw-r--r--src/buildstream/_frontend/app.py2
-rw-r--r--src/buildstream/_options/option.py3
-rw-r--r--src/buildstream/_options/optionpool.py3
-rw-r--r--src/buildstream/_project.py4
-rw-r--r--src/buildstream/_yaml.pyx10
5 files changed, 11 insertions, 11 deletions
diff --git a/src/buildstream/_frontend/app.py b/src/buildstream/_frontend/app.py
index 68cf7ec4d..8d200fe6e 100644
--- a/src/buildstream/_frontend/app.py
+++ b/src/buildstream/_frontend/app.py
@@ -325,7 +325,7 @@ class App():
if project_name:
# If project name was specified, user interaction is not desired, just
# perform some validation and write the project.conf
- _yaml.assert_symbol_name(None, project_name, 'project name')
+ _yaml.assert_symbol_name(project_name, 'project name')
self._assert_format_version(format_version)
self._assert_element_path(element_path)
diff --git a/src/buildstream/_options/option.py b/src/buildstream/_options/option.py
index 6aa4cdc01..49b18da48 100644
--- a/src/buildstream/_options/option.py
+++ b/src/buildstream/_options/option.py
@@ -66,8 +66,7 @@ class Option():
# Assert valid symbol name for variable name
if self.variable is not None:
- p = _yaml.node_get_provenance(node, 'variable')
- _yaml.assert_symbol_name(p, self.variable, 'variable name')
+ _yaml.assert_symbol_name(self.variable, 'variable name', ref_node=node.get_node('variable'))
# load_value()
#
diff --git a/src/buildstream/_options/optionpool.py b/src/buildstream/_options/optionpool.py
index f695c0acf..cd4bfb6dc 100644
--- a/src/buildstream/_options/optionpool.py
+++ b/src/buildstream/_options/optionpool.py
@@ -68,8 +68,7 @@ class OptionPool():
for option_name, option_definition in options.items():
# Assert that the option name is a valid symbol
- p = _yaml.node_get_provenance(options, option_name)
- _yaml.assert_symbol_name(p, option_name, "option name", allow_dashes=False)
+ _yaml.assert_symbol_name(option_name, "option name", ref_node=option_definition, allow_dashes=False)
opt_type_name = option_definition.get_str('type')
try:
diff --git a/src/buildstream/_project.py b/src/buildstream/_project.py
index ecb12c715..2ec0672c6 100644
--- a/src/buildstream/_project.py
+++ b/src/buildstream/_project.py
@@ -594,8 +594,8 @@ class Project():
self.name = self._project_conf.get_str('name')
# Validate that project name is a valid symbol name
- _yaml.assert_symbol_name(_yaml.node_get_provenance(pre_config_node, 'name'),
- self.name, "project name")
+ _yaml.assert_symbol_name(self.name, "project name",
+ ref_node=pre_config_node.get_node('name'))
self.element_path = os.path.join(
self.directory,
diff --git a/src/buildstream/_yaml.pyx b/src/buildstream/_yaml.pyx
index 8bb43e057..1c45a0689 100644
--- a/src/buildstream/_yaml.pyx
+++ b/src/buildstream/_yaml.pyx
@@ -1222,9 +1222,9 @@ cdef Node _new_node_from_list(list inlist, Node ref_node):
# are required to be symbols.
#
# Args:
-# provenance (Provenance): The provenance of the loaded symbol, or None
# symbol_name (str): The loaded symbol name
# purpose (str): The purpose of the string, for an error message
+# ref_node (Node): The node of the loaded symbol, or None
# allow_dashes (bool): Whether dashes are allowed for this symbol
#
# Raises:
@@ -1233,7 +1233,7 @@ cdef Node _new_node_from_list(list inlist, Node ref_node):
# Note that dashes are generally preferred for variable names and
# usage in YAML, but things such as option names which will be
# evaluated with jinja2 cannot use dashes.
-def assert_symbol_name(ProvenanceInformation provenance, str symbol_name, str purpose, *, bint allow_dashes=True):
+def assert_symbol_name(str symbol_name, str purpose, *, Node ref_node=None, bint allow_dashes=True):
cdef str valid_chars = string.digits + string.ascii_letters + '_'
if allow_dashes:
valid_chars += '-'
@@ -1253,8 +1253,10 @@ def assert_symbol_name(ProvenanceInformation provenance, str symbol_name, str pu
detail += " or dashes"
message = "Invalid symbol name for {}: '{}'".format(purpose, symbol_name)
- if provenance is not None:
- message = "{}: {}".format(provenance, message)
+ if ref_node:
+ provenance = node_get_provenance(ref_node)
+ if provenance is not None:
+ message = "{}: {}".format(provenance, message)
raise LoadError(LoadErrorReason.INVALID_SYMBOL_NAME,
message, detail=detail)