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