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