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