From 12637df59055939f1872304e7c795f5fad3f2f67 Mon Sep 17 00:00:00 2001
From: Andrea Spadaccini <spadaccio@google.com>
Date: Thu, 6 Oct 2011 20:19:43 +0100
Subject: [PATCH] Generalize docpp and sphinx_ext

autotools/docpp
* handle generic custom directives in the form <class>_<kind>
* adapt handling of query fields

build/sphinx_ext.py
* add the BuildValuesDoc function to output definitions using the sphinx
  syntax that was already used for query fields
* adapt BuildQueryFields to use BuildValuesDoc

Signed-off-by: Andrea Spadaccini <spadaccio@google.com>
Reviewed-by: Michael Hanselmann <hansmi@google.com>
---
 autotools/docpp         | 13 +++++++++----
 lib/build/sphinx_ext.py | 21 ++++++++++++++++-----
 2 files changed, 25 insertions(+), 9 deletions(-)

diff --git a/autotools/docpp b/autotools/docpp
index 0970bcbaf..5d3bde8d6 100755
--- a/autotools/docpp
+++ b/autotools/docpp
@@ -30,15 +30,20 @@ from ganeti import query
 from ganeti.build import sphinx_ext
 
 
-_QUERY_FIELDS_RE = re.compile(r"^@QUERY_FIELDS_(?P<kind>[A-Z]+)@$")
+_DOC_RE = re.compile(r"^@(?P<class>[A-Z_]+)_(?P<kind>[A-Z]+)@$")
+
+_DOC_CLASSES_DATA = {
+  "QUERY_FIELDS": (query.ALL_FIELDS, sphinx_ext.BuildQueryFields),
+  }
 
 
 def main():
   for line in fileinput.input():
-    m = _QUERY_FIELDS_RE.match(line)
+    m = _DOC_RE.match(line)
     if m:
-      fields = query.ALL_FIELDS[m.group("kind").lower()]
-      for i in sphinx_ext.BuildQueryFields(fields):
+      fields_dict, builder = _DOC_CLASSES_DATA[m.group("class")]
+      fields = fields_dict[m.group("kind").lower()]
+      for i in builder(fields):
         print i
     else:
       print line,
diff --git a/lib/build/sphinx_ext.py b/lib/build/sphinx_ext.py
index 0d2d2e3cf..addb987f2 100644
--- a/lib/build/sphinx_ext.py
+++ b/lib/build/sphinx_ext.py
@@ -270,11 +270,22 @@ def BuildQueryFields(fields):
   @type fields: dict (field name as key, field details as value)
 
   """
-  for (_, (fdef, _, _, _)) in utils.NiceSort(fields.items(),
-                                             key=compat.fst):
-    assert len(fdef.doc.splitlines()) == 1
-    yield "``%s``" % fdef.name
-    yield "  %s" % fdef.doc
+  defs = [(fdef.name, fdef.doc)
+           for (_, (fdef, _, _, _)) in utils.NiceSort(fields.items(),
+                                                      key=compat.fst)]
+  yield BuildValuesDoc(defs)
+
+
+def BuildValuesDoc(values):
+  """Builds documentation for a list of values
+
+  @type values: list of tuples in the form (value, documentation)
+
+  """
+  for name, doc in values:
+    assert len(doc.splitlines()) == 1
+    yield "``%s``" % name
+    yield "  %s" % doc
 
 
 # TODO: Implement Sphinx directive for query fields
-- 
GitLab