From 72114edf068a9b2f54d3b09e9a198f611be397e8 Mon Sep 17 00:00:00 2001 From: Olivier Chafik Date: Fri, 22 Mar 2024 13:07:44 +0000 Subject: json-schema-to-grammar : fix order of props + non-str const/enum (#6232) * json: ordered json in server/schema converter to respect orig order * json: ws nits * json: support non-string const / enums --- examples/json-schema-to-grammar.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'examples/json-schema-to-grammar.py') diff --git a/examples/json-schema-to-grammar.py b/examples/json-schema-to-grammar.py index 9eead557..91dd734c 100755 --- a/examples/json-schema-to-grammar.py +++ b/examples/json-schema-to-grammar.py @@ -61,7 +61,7 @@ class SchemaConverter: def _format_literal(self, literal): escaped = GRAMMAR_LITERAL_ESCAPE_RE.sub( - lambda m: GRAMMAR_LITERAL_ESCAPES.get(m.group(0)), json.dumps(literal) + lambda m: GRAMMAR_LITERAL_ESCAPES.get(m.group(0)), literal ) return f'"{escaped}"' @@ -308,8 +308,7 @@ class SchemaConverter: return ref_name def _generate_constant_rule(self, value): - assert isinstance(value, str), f'Only string constants are supported, got {value}' - return self._format_literal(value) + return self._format_literal(json.dumps(value)) def visit(self, schema, name): schema_type = schema.get('type') @@ -428,7 +427,7 @@ class SchemaConverter: prop_rule_name = self.visit(prop_schema, f'{name}{"-" if name else ""}{prop_name}') prop_kv_rule_names[prop_name] = self._add_rule( f'{name}{"-" if name else ""}{prop_name}-kv', - fr'{self._format_literal(prop_name)} space ":" space {prop_rule_name}' + fr'{self._format_literal(json.dumps(prop_name))} space ":" space {prop_rule_name}' ) required_props = [k for k in sorted_props if k in required] optional_props = [k for k in sorted_props if k not in required] -- cgit v1.2.3