aboutsummaryrefslogtreecommitdiffstats
path: root/python/tidy/servo_tidy/tidy.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/tidy/servo_tidy/tidy.py')
-rw-r--r--python/tidy/servo_tidy/tidy.py33
1 files changed, 22 insertions, 11 deletions
diff --git a/python/tidy/servo_tidy/tidy.py b/python/tidy/servo_tidy/tidy.py
index 2f638abe099..e12ae4cdeb3 100644
--- a/python/tidy/servo_tidy/tidy.py
+++ b/python/tidy/servo_tidy/tidy.py
@@ -17,8 +17,10 @@ import re
import StringIO
import subprocess
import sys
+
import colorama
import toml
+import voluptuous
import yaml
from licenseck import MPL, APACHE, COPYRIGHT, licenses_toml, licenses_dep_toml
@@ -775,15 +777,24 @@ def duplicate_key_yaml_constructor(loader, node, deep=False):
def lint_buildbot_steps_yaml(mapping):
- # Check for well-formedness of contents
- # A well-formed buildbot_steps.yml should be a map to list of strings
- for k in mapping.keys():
- if not isinstance(mapping[k], list):
- raise ValueError("Key '{}' maps to type '{}', but list expected".format(k, type(mapping[k]).__name__))
-
- # check if value is a list of strings
- for item in itertools.ifilter(lambda i: not isinstance(i, str), mapping[k]):
- raise ValueError("List mapped to '{}' contains non-string element".format(k))
+ from voluptuous import Any, Extra, Required, Schema
+
+ # Note: dictionary keys are optional by default in voluptuous
+ env = Schema({Extra: str})
+ commands = Schema([str])
+ schema = Schema({
+ 'env': env,
+ Extra: Any(
+ commands,
+ {
+ 'env': env,
+ Required('commands'): commands,
+ },
+ ),
+ })
+
+ # Signals errors via exception throwing
+ schema(mapping)
class SafeYamlLoader(yaml.SafeLoader):
@@ -811,8 +822,8 @@ def check_yaml(file_name, contents):
yield (line, e)
except KeyError as e:
yield (None, "Duplicated Key ({})".format(e.message))
- except ValueError as e:
- yield (None, e.message)
+ except voluptuous.MultipleInvalid as e:
+ yield (None, str(e))
def check_for_possible_duplicate_json_keys(key_value_pairs):