1 #!/usr/bin/env python 2 3 import libxml2dom.xmlrpc 4 5 # Some examples from the specification. 6 7 request = """<?xml version="1.0"?> 8 <methodCall> 9 <methodName>examples.getStateName</methodName> 10 <params> 11 <param> 12 <value><i4>41</i4></value> 13 </param> 14 </params> 15 </methodCall>""" 16 17 req = libxml2dom.xmlrpc.parseString(request) 18 assert req.method.methodName == "examples.getStateName" 19 assert req.method.rawParameterValues == [(("i4", ""), "41")] 20 assert req.fault is None 21 print "Method name:", req.method.methodName 22 print "Parameter values:", req.method.rawParameterValues 23 print "Fault:", req.fault 24 25 response = """<?xml version="1.0"?> 26 <methodResponse> 27 <params> 28 <param> 29 <value><string>South Dakota</string></value> 30 </param> 31 </params> 32 </methodResponse>""" 33 34 resp = libxml2dom.xmlrpc.parseString(response) 35 assert resp.method.methodName is None 36 assert resp.method.rawParameterValues == [(("string", ""), "South Dakota")] 37 assert resp.fault is None 38 print "Method name:", resp.method.methodName 39 print "Parameter values:", resp.method.rawParameterValues 40 print "Fault:", resp.fault 41 42 failed = """<?xml version="1.0"?> 43 <methodResponse> 44 <fault> 45 <value> 46 <struct> 47 <member> 48 <name>faultCode</name> 49 <value><int>4</int></value> 50 </member> 51 <member> 52 <name>faultString</name> 53 <value><string>Too many parameters.</string></value> 54 </member> 55 </struct> 56 </value> 57 </fault> 58 </methodResponse>""" 59 60 f = libxml2dom.xmlrpc.parseString(failed) 61 assert f.method.methodName is None 62 assert f.method.rawParameterValues == [] 63 assert f.fault.code == "4" 64 assert f.fault.reason == "Too many parameters." 65 print "Method name:", f.method.methodName 66 print "Parameter values:", f.method.rawParameterValues 67 print "Fault code:", f.fault.code 68 69 # Python Package Index examples. 70 71 search = """<?xml version="1.0"?> 72 <methodCall> 73 <methodName>search</methodName> 74 <params> 75 <param> 76 <value> 77 <struct> 78 <member> 79 <name>name</name> 80 <value><string>libxml2dom</string></value> 81 </member> 82 <member> 83 <name>description</name> 84 <value>XML</value> 85 </member> 86 </struct> 87 </value> 88 </param> 89 <param> 90 <value> 91 <string>and</string> 92 </value> 93 </param> 94 </params> 95 </methodCall>""" 96 97 s = libxml2dom.xmlrpc.parseString(search) 98 assert s.method.methodName == "search" 99 assert s.method.rawParameterValues == [ 100 (("struct", None), [ 101 (("string", "name"), "libxml2dom"), (("string", "description"), "XML") 102 ]), 103 (("string", None), "and") 104 ] 105 assert s.fault is None 106 print "Method name:", s.method.methodName 107 print "Parameter values:", s.method.rawParameterValues 108 print "Fault:", s.fault 109 110 # Nested structure examples. 111 112 search2 = """<?xml version="1.0"?> 113 <methodCall> 114 <methodName>search</methodName> 115 <params> 116 <param> 117 <value> 118 <struct> 119 <member> 120 <name>names</name> 121 <value> 122 <struct> 123 <member> 124 <name>name</name> 125 <value><string>libxml2dom</string></value> 126 </member> 127 <member> 128 <name>description</name> 129 <value>XML</value> 130 </member> 131 </struct> 132 </value> 133 </member> 134 </struct> 135 </value> 136 </param> 137 <param> 138 <value> 139 <string>and</string> 140 </value> 141 </param> 142 </params> 143 </methodCall>""" 144 145 s2 = libxml2dom.xmlrpc.parseString(search2) 146 assert s2.method.methodName == "search" 147 assert s2.method.rawParameterValues == [ 148 (("struct", None), [ 149 (("struct", "names"), [(("string", "name"), "libxml2dom"), (("string", "description"), "XML")]) 150 ]), 151 (("string", None), "and") 152 ] 153 assert s2.fault is None 154 print "Method name:", s2.method.methodName 155 print "Parameter values:", s2.method.rawParameterValues 156 print "Fault:", s2.fault 157 158 arrays = """<?xml version="1.0"?> 159 <methodResponse> 160 <params> 161 <param> 162 <value> 163 <array> 164 <data> 165 <value> 166 <string>libxml2dom</string> 167 </value> 168 <value> 169 <string>XSLTools</string> 170 </value> 171 </data> 172 </array> 173 </value> 174 </param> 175 </params> 176 </methodResponse>""" 177 178 a = libxml2dom.xmlrpc.parseString(arrays) 179 assert a.method.methodName is None 180 assert a.method.rawParameterValues == [ 181 (("array", None), [(("string", None), "libxml2dom"), (("string", None), "XSLTools")]) 182 ] 183 assert a.fault is None 184 print "Method name:", a.method.methodName 185 print "Parameter values:", a.method.rawParameterValues 186 print "Fault:", a.fault 187 188 # vim: tabstop=4 expandtab shiftwidth=4