diff options
author | Sara Golemon <sara.golemon@mongodb.com> | 2018-09-26 15:17:56 +0000 |
---|---|---|
committer | Sara Golemon <sara.golemon@mongodb.com> | 2018-10-05 23:33:33 +0000 |
commit | f9600749453db5dec58bd1bbfd967e16b1578a24 (patch) | |
tree | 22e0f6e8f773483ad12828d92f4bf8d1496fbe70 /buildscripts/idl/idl/parser.py | |
parent | 2db04b524dc5e2121b74829814db7c8e84e5696d (diff) | |
download | mongo-f9600749453db5dec58bd1bbfd967e16b1578a24.tar.gz |
SERVER-37168 Add validators for IDL fields
Diffstat (limited to 'buildscripts/idl/idl/parser.py')
-rw-r--r-- | buildscripts/idl/idl/parser.py | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/buildscripts/idl/idl/parser.py b/buildscripts/idl/idl/parser.py index 052f9a21782..bb778a5633f 100644 --- a/buildscripts/idl/idl/parser.py +++ b/buildscripts/idl/idl/parser.py @@ -191,6 +191,23 @@ def _parse_type(ctxt, spec, name, node): spec.symbols.add_type(ctxt, idltype) +def _parse_validator(ctxt, node): + # type: (errors.ParserContext, yaml.nodes.MappingNode) -> syntax.Validator + """Parse a validator for a field.""" + validator = syntax.Validator(ctxt.file_name, node.start_mark.line, node.start_mark.column) + + _generic_parser( + ctxt, node, "validator", validator, { + "gt": _RuleDesc("scalar"), + "lt": _RuleDesc("scalar"), + "gte": _RuleDesc("scalar"), + "lte": _RuleDesc("scalar"), + "callback": _RuleDesc("scalar"), + }) + + return validator + + def _parse_field(ctxt, name, node): # type: (errors.ParserContext, str, Union[yaml.nodes.MappingNode, yaml.nodes.ScalarNode, yaml.nodes.SequenceNode]) -> syntax.Field """Parse a field in a struct/command in the IDL file.""" @@ -207,6 +224,7 @@ def _parse_field(ctxt, name, node): "default": _RuleDesc('scalar'), "supports_doc_sequence": _RuleDesc("bool_scalar"), "comparison_order": _RuleDesc("int_scalar"), + "validator": _RuleDesc('mapping', mapping_parser_func=_parse_validator), }) return field |