From: Naoki Kambe Date: Tue, 16 Oct 2012 04:15:49 +0000 (+0900) Subject: [2298] modify the xsd_handler() method X-Git-Tag: trac2487_base~1^2~26^2~36 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0434072c4e6acb8d227ffed3cba7a06cd42de1de;p=thirdparty%2Fkea.git [2298] modify the xsd_handler() method xsd_handler() doesn't accept any arguments such as a module name and a item name. It replaces variable strings in the template and displays it. --- diff --git a/src/bin/stats/stats_httpd.py.in b/src/bin/stats/stats_httpd.py.in index 9f5e901d05..65b234e8d5 100644 --- a/src/bin/stats/stats_httpd.py.in +++ b/src/bin/stats/stats_httpd.py.in @@ -536,143 +536,10 @@ class StatsHttpd: return self.xml_body def xsd_handler(self, module_name=None, item_name=None): - """Requests the specified statistics specification by using - the function get_stats_spec respectively and loads the XSD - template file and returns the string of the XSD document.The - first argument is the module name which owns the statistics - data, the second argument is one name of the statistics items - which the the module owns. The second argument cannot be - specified when the first argument is not specified.""" - - # TODO: Separate the following recursive function by type of - # the parameter. Because we should be sure what type there is - # when we call it recursively. - def stats_spec2xsd(stats_spec, xsd_elem): - """Internal use for xsd_handler. Reads stats_spec - specified as first arguments, and modify the xml object - specified as second argument. xsd_elem must be - modified. Always returns None with no exceptions.""" - # assumed module_spec or one stats_spec - if type(stats_spec) is dict: - # assumed module_spec - if 'item_name' not in stats_spec: - for mod in stats_spec.keys(): - elem = xml.etree.ElementTree.Element( - "element", { "name" : mod }) - complextype = xml.etree.ElementTree.Element("complexType") - alltag = xml.etree.ElementTree.Element("all") - stats_spec2xsd(stats_spec[mod], alltag) - complextype.append(alltag) - elem.append(complextype) - xsd_elem.append(elem) - # assumed stats_spec - else: - if stats_spec['item_type'] == 'map': - alltag = xml.etree.ElementTree.Element("all") - stats_spec2xsd(stats_spec['map_item_spec'], alltag) - complextype = xml.etree.ElementTree.Element("complexType") - complextype.append(alltag) - elem = xml.etree.ElementTree.Element( - "element", attrib={ "name" : stats_spec["item_name"], - "minOccurs": "0" \ - if stats_spec["item_optional"] \ - else "1", - "maxOccurs": "unbounded" }) - elem.append(complextype) - xsd_elem.append(elem) - elif stats_spec['item_type'] == 'list': - alltag = xml.etree.ElementTree.Element("sequence") - stats_spec2xsd(stats_spec['list_item_spec'], alltag) - complextype = xml.etree.ElementTree.Element("complexType") - complextype.append(alltag) - elem = xml.etree.ElementTree.Element( - "element", attrib={ "name" : stats_spec["item_name"], - "minOccurs": "0" \ - if stats_spec["item_optional"] \ - else "1", - "maxOccurs": "1" }) - elem.append(complextype) - xsd_elem.append(elem) - else: - # determine the datatype of XSD - # TODO: Should consider other item_format types - datatype = stats_spec["item_type"] \ - if stats_spec["item_type"].lower() != 'real' \ - else 'float' - if "item_format" in stats_spec: - item_format = stats_spec["item_format"] - if datatype.lower() == 'string' \ - and item_format.lower() == 'date-time': - datatype = 'dateTime' - elif datatype.lower() == 'string' \ - and (item_format.lower() == 'date' \ - or item_format.lower() == 'time'): - datatype = item_format.lower() - elem = xml.etree.ElementTree.Element( - "element", - attrib={ - 'name' : stats_spec["item_name"], - 'type' : datatype, - 'minOccurs' : "0" \ - if stats_spec["item_optional"] \ - else "1", - 'maxOccurs' : "1" - } - ) - annotation = xml.etree.ElementTree.Element("annotation") - appinfo = xml.etree.ElementTree.Element("appinfo") - documentation = xml.etree.ElementTree.Element("documentation") - if "item_title" in stats_spec: - appinfo.text = stats_spec["item_title"] - if "item_description" in stats_spec: - documentation.text = stats_spec["item_description"] - annotation.append(appinfo) - annotation.append(documentation) - elem.append(annotation) - xsd_elem.append(elem) - # multiple stats_specs - elif type(stats_spec) is list: - for item_spec in stats_spec: - stats_spec2xsd(item_spec, xsd_elem) - - # for XSD - stats_spec = self.get_stats_spec(module_name, item_name) - alltag = xml.etree.ElementTree.Element("all") - stats_spec2xsd(stats_spec, alltag) - complextype = xml.etree.ElementTree.Element("complexType") - complextype.append(alltag) - documentation = xml.etree.ElementTree.Element("documentation") - documentation.text = "A set of statistics data" - annotation = xml.etree.ElementTree.Element("annotation") - annotation.append(documentation) - elem = xml.etree.ElementTree.Element( - "element", attrib={ 'name' : 'statistics' }) - elem.append(annotation) - elem.append(complextype) - documentation = xml.etree.ElementTree.Element("documentation") - documentation.text = "XML schema of the statistics data in BIND 10" - annotation = xml.etree.ElementTree.Element("annotation") - annotation.append(documentation) - xsd_root = xml.etree.ElementTree.Element( - "schema", - attrib={ 'xmlns' : "http://www.w3.org/2001/XMLSchema", - 'targetNamespace' : XSD_NAMESPACE, - 'xmlns:bind10' : XSD_NAMESPACE }) - xsd_root.append(annotation) - xsd_root.append(elem) - # The coding conversion is tricky. xml..tostring() of Python 3.2 - # returns bytes (not string) regardless of the coding, while - # tostring() of Python 3.1 returns a string. To support both - # cases transparently, we first make sure tostring() returns - # bytes by specifying utf-8 and then convert the result to a - # plain string (code below assume it). - # FIXME: Non-ASCII characters might be lost here. Consider how - # the whole system should handle non-ASCII characters. - xsd_string = str(xml.etree.ElementTree.tostring(xsd_root, encoding='utf-8'), - encoding='us-ascii') + """Loads the XSD template file, replaces the variable strings, + and returns the string of the XSD document.""" self.xsd_body = self.open_template(XSD_TEMPLATE_LOCATION).substitute( - xsd_string=xsd_string) - assert self.xsd_body is not None + xsd_namespace=XSD_NAMESPACE) return self.xsd_body def xsl_handler(self, module_name=None, item_name=None):