From a691ebd0c96ecc094f5711526d5ba55c5f3f323a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20=C5=A0pa=C4=8Dek?= Date: Wed, 11 May 2022 09:20:51 +0200 Subject: [PATCH] Add helper to unify options and zone block grammars A helper is needed to combine cfg_test output for generic options and all the type-dependent zone block variants. --- doc/arm/Makefile.am | 1 + doc/arm/_ext/mergegrammar.py | 54 ++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 doc/arm/_ext/mergegrammar.py diff --git a/doc/arm/Makefile.am b/doc/arm/Makefile.am index d4aa22b767..837f748412 100644 --- a/doc/arm/Makefile.am +++ b/doc/arm/Makefile.am @@ -62,6 +62,7 @@ EXTRA_DIST = \ tsig.inc.rst \ zones.inc.rst \ _ext/iscconf.py \ + _ext/mergegrammar.py \ _ext/namedconf.py \ _ext/rndcconf.py \ _static/custom.css \ diff --git a/doc/arm/_ext/mergegrammar.py b/doc/arm/_ext/mergegrammar.py new file mode 100644 index 0000000000..c95f7ae4ce --- /dev/null +++ b/doc/arm/_ext/mergegrammar.py @@ -0,0 +1,54 @@ +############################################################################ +# Copyright (C) Internet Systems Consortium, Inc. ("ISC") +# +# SPDX-License-Identifier: MPL-2.0 +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, you can obtain one at https://mozilla.org/MPL/2.0/. +# +# See the COPYRIGHT file distributed with this work for additional +# information regarding copyright ownership. +############################################################################ + +# Depends on CWD - Sphinx plugin + +import json +from pathlib import Path + +from . import parsegrammar + + +def read_zone(): + zone_grammars = {} + for file in Path("../misc/").glob("*.zoneopt"): + zone_type = f"type {file.stem}" + + with file.open(encoding="ascii") as fp: + zonegrammar = parsegrammar.parse_mapbody(fp) + assert len(zonegrammar) == 1 + assert "zone" in zonegrammar + zone_grammars[zone_type] = zonegrammar["zone"] + + return {"zone": {"_mapbody": zone_grammars}} + + +def read_main(): + with Path("../misc/options").open(encoding="ascii") as fp: + optgrammar = parsegrammar.parse_mapbody(fp) + return optgrammar + + +def combine(): + zones = read_zone() + assert zones + rest = read_main() + assert rest + rest.update(zones) + + return rest + + +if __name__ == "__main__": + full_grammar = combine() + print(json.dumps(full_grammar))