[svn-commits] mjordan: branch mjordan/manager-events r368720 - /team/mjordan/manager-events...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Mon Jun 11 09:10:34 CDT 2012


Author: mjordan
Date: Mon Jun 11 09:10:30 2012
New Revision: 368720

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=368720
Log:
Address Russell's findings

Modified:
    team/mjordan/manager-events/build_tools/get_documentation.py
    team/mjordan/manager-events/build_tools/post_process_documentation.py

Modified: team/mjordan/manager-events/build_tools/get_documentation.py
URL: http://svnview.digium.com/svn/asterisk/team/mjordan/manager-events/build_tools/get_documentation.py?view=diff&rev=368720&r1=368719&r2=368720
==============================================================================
--- team/mjordan/manager-events/build_tools/get_documentation.py (original)
+++ team/mjordan/manager-events/build_tools/get_documentation.py Mon Jun 11 09:10:30 2012
@@ -14,6 +14,7 @@
 
 from xml.dom.minidom import Element
 
+
 def get_manager_event_method_type(candidate_string):
     if "ast_manager_event_multichan" in candidate_string:
         return "multichan"
@@ -22,6 +23,7 @@
     elif "manager_event" in candidate_string:
         return "manager_event"
     return ""
+
 
 def parse_manager_event_instance(xml_fragment):
     ''' Parse the information for a manager event
@@ -34,18 +36,26 @@
     information obtained from the manager_event macro calls
     '''
 
+    def __node_contains_parameter(node, parameter):
+        ''' Return whether or not a node contains a given parameter name '''
+        return any([n for n in node.getElementsByTagName("parameter")
+                    if __node_contains_attribute(n, parameter)])
+
+    def __node_contains_attribute(node, attribute_name):
+        ''' Return whether or not a node contains a given attribute name '''
+        return any([attr for attr in node.attributes.items()
+                    if attr[1] == attribute_name])
+
     candidate_lines = []
     type = ""
 
     # Read the manager_event method call, which should occur after
     # the documentation block
-    while (True):
-        line = sys.stdin.readline()
-        line = line.strip()
-        if line:
+    for line in sys.stdin:
+        if len(line):
             candidate_lines.append(line)
         if ");" in line:
-            break;
+            break
 
     candidate_string = ''.join(candidate_lines)
     type = get_manager_event_method_type(candidate_string)
@@ -54,7 +64,10 @@
         return ''.join(xml_fragment)
 
     # strip off the macro name
-    candidate_string = candidate_string[candidate_string.index("(",0) + 1:candidate_string.rindex(");")]
+    first_paren = candidate_string.index("(", 0)
+    last_paren = candidate_string.rindex(");")
+    candidate_string = candidate_string[first_paren + 1:last_paren]
+
     # split into parameter tokens
     func_parameter_tokens = candidate_string.split(',')
 
@@ -76,8 +89,10 @@
 
     # Build the top level XML element information.  Note that we temporarily
     # add the xi namespace in case any includes are used
-    xml_fragment.insert(0, "<managerEvent language=\"%s\" name=\"%s\" xmlns:xi=\"http://www.w3.org/2001/XInclude\">" %
-                        ('en_US', event_type.strip().replace("\"","")))
+    node_text = '<managerEvent language=\"%s\" name=\"%s\" xmlns:xi=\"%s\">'
+    xml_fragment.insert(0, node_text % ('en_US',
+                                        event_type.strip().replace("\"", ""),
+                                        'http://www.w3.org/2001/XInclude'))
     xml_fragment[1] = "<managerEventInstance class=\"%s\">" % (class_level)
     xml_fragment.insert(len(xml_fragment), "</managerEvent>")
 
@@ -100,20 +115,21 @@
     # Add parameters found in the method invocation that were not previously
     # documented
     for parameter in parameter_tokens:
-        if not parameter:
+        if not len(parameter):
             continue
         index = parameter.find(':')
         if index < 0:
             index = len(parameter)
-        parameter = (parameter.strip().replace("\"",""))[:index]
-        if ('%s' not in parameter and 
-            not any([node for node in syntax.getElementsByTagName("parameter") if
-                any([attr for attr in node.attributes.items() if attr[1] == parameter])])):
+        parameter = (parameter[:index].strip().replace("\"", ""))
+        if ('%s' not in parameter and
+            not __node_contains_parameter(syntax, parameter)):
             e = dom.createElement("parameter")
             e.setAttribute('name', parameter)
             syntax.appendChild(e)
 
-    return dom.toxml().replace("<?xml version=\"1.0\" ?>", "").replace('xmlns:xi="http://www.w3.org/2001/XInclude"', '')
+    return dom.toxml().replace("<?xml version=\"1.0\" ?>", "").replace(
+               'xmlns:xi="http://www.w3.org/2001/XInclude"', '')
+
 
 def main(argv=None):
 
@@ -125,10 +141,9 @@
     xml = []
     line_number = 0
 
-    while(True):
+    for line in sys.stdin:
         # Note: multiple places may have to read a line, so iterating over
         # readlines isn't possible.  Break when a null line is returned
-        line = sys.stdin.readline()
         line_number += 1
         if not line:
             break
@@ -136,7 +151,7 @@
         line = line.strip()
         if ("/*** DOCUMENTATION" in line):
             in_doc = True
-        elif ("***/" in line and in_doc == True):
+        elif ("***/" in line and in_doc):
             # Depending on what we're processing, determine if we need to do
             # any additional work
             in_doc = False
@@ -150,11 +165,11 @@
                 xml.append(''.join(xml_fragment))
 
             xml_fragment = []
-        elif (in_doc == True):
+        elif (in_doc):
             xml_fragment.append("%s\n" % line)
 
     sys.stdout.write(''.join(xml))
     return 0
 
 if __name__ == "__main__":
-    sys.exit(main() or 0)
+    sys.exit(main() or 0)

Modified: team/mjordan/manager-events/build_tools/post_process_documentation.py
URL: http://svnview.digium.com/svn/asterisk/team/mjordan/manager-events/build_tools/post_process_documentation.py?view=diff&rev=368720&r1=368719&r2=368720
==============================================================================
--- team/mjordan/manager-events/build_tools/post_process_documentation.py (original)
+++ team/mjordan/manager-events/build_tools/post_process_documentation.py Mon Jun 11 09:10:30 2012
@@ -15,7 +15,28 @@
 
 from xml.dom.minidom import Element, parse
 
+
 def merge_parameter_information(managerEvent):
+    ''' Merge the parameter information across all managerEventInstances
+    within a managerEvent node '''
+
+    def __swap_parameter_documentation(one, two):
+        # See who has the better documentation and use it
+        if (one.hasChildNodes()):
+            two.parentNode.replaceChild(one.cloneNode(True), two)
+        elif (two.hasChildNodes()):
+            one.parentNode.replaceChild(two.cloneNode(True), one)
+
+    def __merge_parameter(param, other_instances):
+        # Compare the parameter to every other instance's set of parameters
+        for other in other_instances:
+            other_parameters = other.getElementsByTagName("parameter")
+            match = [p for p in other_parameters
+                     if p.getAttribute('name') == param.getAttribute('name')]
+            if (match):
+                # See who has the better documentation and use it
+                __swap_parameter_documentation(param, match[0])
+
     instances = managerEvent.getElementsByTagName("managerEventInstance")
     merged = []
     for instance in instances:
@@ -23,19 +44,9 @@
         parameters = instance.getElementsByTagName("parameter")
         for parameter in parameters:
             if parameter not in merged:
-                # Once we process a parameter, we don't need to do it again for any other
-                # managerEventInstances
                 merged.append(parameter)
-                # Compare the parameter to every other managerEventInstance's set of parameters
-                for other in others:
-                    other_parameters = other.getElementsByTagName("parameter")
-                    match = [p for p in other_parameters if p.getAttribute('name') == parameter.getAttribute('name')]
-                    if (match):
-                        # See who has the better documentation and use it
-                        if (parameter.hasChildNodes()):
-                            match[0].parentNode.replaceChild(parameter.cloneNode(True), match[0])
-                        elif (match[0].hasChildNodes()):
-                            parameter.parentNode.replaceChild(match[0].cloneNode(True), parameter)
+                __merge_parameter(parameter, others)
+
 
 def collapse_event_pair(managerEventOne, managerEventTwo):
     # Move all children of managerEventTwo to managerEventOne
@@ -44,8 +55,8 @@
 
     return managerEventOne
 
+
 def collapse_manager_events(rootNode, managerEvents):
-
     events = {}
     for managerEvent in managerEvents:
         rootNode.removeChild(managerEvent)
@@ -62,16 +73,17 @@
         rootNode.appendChild(event)
     return
 
+
 def main(argv=None):
 
     if argv is None:
         argv = sys.argv
 
     parser = optparse.OptionParser()
-    parser.add_option('-i', '--input', dest = 'input_file',
+    parser.add_option('-i', '--input', dest='input_file',
                       default='doc/core-full-en_US.xml',
                       help='The XML file to process')
-    parser.add_option('-o', '--output', dest = 'output_file',
+    parser.add_option('-o', '--output', dest='output_file',
                       default='doc/core-en_US.xml',
                       help='The XML file to create')
     (options, args) = parser.parse_args(argv)
@@ -90,4 +102,4 @@
     return 0
 
 if __name__ == "__main__":
-    sys.exit(main() or 0)
+    sys.exit(main() or 0)




More information about the svn-commits mailing list