]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Add helper to unify options and zone block grammars
authorPetr Špaček <pspacek@isc.org>
Wed, 11 May 2022 07:20:51 +0000 (09:20 +0200)
committerPetr Špaček <pspacek@isc.org>
Fri, 1 Jul 2022 06:59:22 +0000 (08:59 +0200)
A helper is needed to combine cfg_test output for generic options and
all the type-dependent zone block variants.

doc/arm/Makefile.am
doc/arm/_ext/mergegrammar.py [new file with mode: 0644]

index d4aa22b7677f638f0b7dedf9c46cf49939dc2a06..837f7484129c2c068a2efb4fca3e73f92c885678 100644 (file)
@@ -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 (file)
index 0000000..c95f7ae
--- /dev/null
@@ -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))