Browse Source

[917] add some minor changes

- set minOccurs "0" if item_optional is True

- prepare table tag before going through list-type item

- use item_title instead of item_name if item_title is set
Naoki Kambe 13 years ago
parent
commit
d5ec22cc34

+ 34 - 12
src/bin/stats/stats_httpd.py.in

@@ -500,16 +500,24 @@ class StatsHttpd:
                         complextype = xml.etree.ElementTree.Element("complexType")
                         complextype = xml.etree.ElementTree.Element("complexType")
                         complextype.append(alltag)
                         complextype.append(alltag)
                         elem = xml.etree.ElementTree.Element(
                         elem = xml.etree.ElementTree.Element(
-                            "element", { "name" : stats_spec["item_name"] })
+                            "element", attrib={ "name" : stats_spec["item_name"],
+                                                "minOccurs": "0" \
+                                                    if stats_spec["item_optional"] \
+                                                    else "1",
+                                                "maxOccurs": "unbounded" })
                         elem.append(complextype)
                         elem.append(complextype)
                         xsd_elem.append(elem)
                         xsd_elem.append(elem)
                     elif stats_spec['item_type'] == 'list':
                     elif stats_spec['item_type'] == 'list':
-                        alltag = xml.etree.ElementTree.Element("all")
+                        alltag = xml.etree.ElementTree.Element("sequence")
                         stats_spec2xsd(stats_spec['list_item_spec'], alltag)
                         stats_spec2xsd(stats_spec['list_item_spec'], alltag)
                         complextype = xml.etree.ElementTree.Element("complexType")
                         complextype = xml.etree.ElementTree.Element("complexType")
                         complextype.append(alltag)
                         complextype.append(alltag)
                         elem = xml.etree.ElementTree.Element(
                         elem = xml.etree.ElementTree.Element(
-                            "element", { "name" : stats_spec["item_name"] })
+                            "element", attrib={ "name" : stats_spec["item_name"],
+                                                "minOccurs": "0" \
+                                                    if stats_spec["item_optional"] \
+                                                    else "1",
+                                                "maxOccurs": "1" })
                         elem.append(complextype)
                         elem.append(complextype)
                         xsd_elem.append(elem)
                         xsd_elem.append(elem)
                     else:
                     else:
@@ -520,7 +528,9 @@ class StatsHttpd:
                                 'type' : stats_spec["item_type"] \
                                 'type' : stats_spec["item_type"] \
                                     if stats_spec["item_type"].lower() != 'real' \
                                     if stats_spec["item_type"].lower() != 'real' \
                                     else 'float',
                                     else 'float',
-                                'minOccurs' : "1",
+                                'minOccurs' : "0" \
+                                    if stats_spec["item_optional"] \
+                                    else "1",
                                 'maxOccurs' : "1"
                                 'maxOccurs' : "1"
                                 }
                                 }
                             )
                             )
@@ -621,7 +631,6 @@ class StatsHttpd:
                     xsl_elem.append(table)
                     xsl_elem.append(table)
                 # assumed stats_spec
                 # assumed stats_spec
                 else:
                 else:
-                    tr = xml.etree.ElementTree.Element("tr")
                     td = xml.etree.ElementTree.Element(
                     td = xml.etree.ElementTree.Element(
                         "td",
                         "td",
                         attrib={ "class" : "title",
                         attrib={ "class" : "title",
@@ -630,23 +639,34 @@ class StatsHttpd:
                                      else "" })
                                      else "" })
                     a = xml.etree.ElementTree.Element(
                     a = xml.etree.ElementTree.Element(
                         "a", attrib={ "href": urllib.parse.quote(path + "/" + stats_spec["item_name"]) })
                         "a", attrib={ "href": urllib.parse.quote(path + "/" + stats_spec["item_name"]) })
-                    a.text = stats_spec["item_name"]
+                    a.text = stats_spec[ "item_title" if "item_title" in stats_spec else "item_name" ]
                     td.append(a)
                     td.append(a)
-                    tr.append(td)
+                    xsl_elem.append(td)
+                    td = xml.etree.ElementTree.Element("td")
                     if stats_spec['item_type'] == 'map':
                     if stats_spec['item_type'] == 'map':
-                        stats_spec2xsl(stats_spec['map_item_spec'], tr,
+                        stats_spec2xsl(stats_spec['map_item_spec'], td,
                                        path + "/" + stats_spec["item_name"])
                                        path + "/" + stats_spec["item_name"])
                     elif stats_spec['item_type'] == 'list':
                     elif stats_spec['item_type'] == 'list':
+                        table = xml.etree.ElementTree.Element("table")
+                        tr = xml.etree.ElementTree.Element("tr")
+                        th = xml.etree.ElementTree.Element("th")
+                        th.text = "Item Names"
+                        tr.append(th)
+                        th = xml.etree.ElementTree.Element("th")
+                        th.text = "Item Values"
+                        tr.append(th)
+                        table.append(tr)
+                        tr = xml.etree.ElementTree.Element("tr")
                         stats_spec2xsl(stats_spec['list_item_spec'], tr,
                         stats_spec2xsl(stats_spec['list_item_spec'], tr,
                                        path + "/" + stats_spec["item_name"])
                                        path + "/" + stats_spec["item_name"])
+                        table.append(tr)
+                        td.append(table)
                     else:
                     else:
-                        td = xml.etree.ElementTree.Element("td")
                         xsl_valueof = xml.etree.ElementTree.Element(
                         xsl_valueof = xml.etree.ElementTree.Element(
                             "xsl:value-of",
                             "xsl:value-of",
                             attrib={'select': stats_spec["item_name"]})
                             attrib={'select': stats_spec["item_name"]})
                         td.append(xsl_valueof)
                         td.append(xsl_valueof)
-                        tr.append(td)
-                    xsl_elem.append(tr)
+                    xsl_elem.append(td)
             # multiple stats_specs
             # multiple stats_specs
             elif type(stats_spec) is list:
             elif type(stats_spec) is list:
                 table = xml.etree.ElementTree.Element("table")
                 table = xml.etree.ElementTree.Element("table")
@@ -659,7 +679,9 @@ class StatsHttpd:
                 tr.append(th)
                 tr.append(th)
                 table.append(tr)
                 table.append(tr)
                 for item_spec in stats_spec:
                 for item_spec in stats_spec:
-                    stats_spec2xsl(item_spec, table, path)
+                    tr = xml.etree.ElementTree.Element("tr")
+                    stats_spec2xsl(item_spec, tr, path)
+                    table.append(tr)
                 xsl_elem.append(table)
                 xsl_elem.append(table)
             return None
             return None
 
 

+ 1 - 1
src/bin/stats/tests/b10-stats-httpd_test.py

@@ -755,7 +755,7 @@ class TestStatsHttpd(unittest.TestCase):
               }
               }
         xsl_body1 = self.stats_httpd.open_template(
         xsl_body1 = self.stats_httpd.open_template(
             stats_httpd.XSL_TEMPLATE_LOCATION).substitute(
             stats_httpd.XSL_TEMPLATE_LOCATION).substitute(
-            xsl_string='<xsl:template match="bind10:statistics"><table><tr><th>Module Names</th><th>Module Items</th></tr><xsl:for-each select="Dummy"><tr><td><a href="./Dummy">Dummy</a></td><td><table><tr><th>Item Names</th><th>Item Values</th></tr><tr><td class="title" title="foo is bar"><a href="./Dummy/foo">foo</a></td><td><xsl:value-of select="foo" /></td></tr></table></td></tr></xsl:for-each></table></xsl:template>',
+            xsl_string='<xsl:template match="bind10:statistics"><table><tr><th>Module Names</th><th>Module Items</th></tr><xsl:for-each select="Dummy"><tr><td><a href="./Dummy">Dummy</a></td><td><table><tr><th>Item Names</th><th>Item Values</th></tr><tr><td class="title" title="foo is bar"><a href="./Dummy/foo">Foo</a></td><td><xsl:value-of select="foo" /></td></tr></table></td></tr></xsl:for-each></table></xsl:template>',
             xsd_namespace=stats_httpd.XSD_NAMESPACE)
             xsd_namespace=stats_httpd.XSD_NAMESPACE)
         xsl_body2 = self.stats_httpd.xsl_handler()
         xsl_body2 = self.stats_httpd.xsl_handler()
         self.assertEqual(type(xsl_body1), str)
         self.assertEqual(type(xsl_body1), str)

+ 6 - 2
src/bin/stats/tests/b10-stats_test.py

@@ -556,7 +556,9 @@ class TestStats(unittest.TestCase):
                                     "item_name": "zonename",
                                     "item_name": "zonename",
                                     "item_type": "string",
                                     "item_type": "string",
                                     "item_optional": False,
                                     "item_optional": False,
-                                    "item_default": ""
+                                    "item_default": "",
+                                    "item_title": "Zonename",
+                                    "item_description": "Zonename"
                                     },
                                     },
                                 {
                                 {
                                     "item_name": "queries.udp",
                                     "item_name": "queries.udp",
@@ -617,7 +619,9 @@ class TestStats(unittest.TestCase):
                                 "item_name": "zonename",
                                 "item_name": "zonename",
                                 "item_type": "string",
                                 "item_type": "string",
                                 "item_optional": False,
                                 "item_optional": False,
-                                "item_default": ""
+                                "item_default": "",
+                                "item_title": "Zonename",
+                                "item_description": "Zonename"
                                 },
                                 },
                             {
                             {
                                 "item_name": "queries.udp",
                                 "item_name": "queries.udp",

+ 3 - 1
src/bin/stats/tests/test_utils.py

@@ -261,7 +261,9 @@ class MockAuth:
               "item_name": "zonename",
               "item_name": "zonename",
               "item_type": "string",
               "item_type": "string",
               "item_optional": false,
               "item_optional": false,
-              "item_default": ""
+              "item_default": "",
+              "item_title": "Zonename",
+              "item_description": "Zonename"
             },
             },
             {
             {
               "item_name": "queries.udp",
               "item_name": "queries.udp",