Size: 7807
Comment:
|
Size: 7801
Comment: Use shebang line conformant with Debian Python policy
|
Deletions are marked like this. | Additions are marked like this. |
Line 120: | Line 120: |
#!/usr/bin/env python |
#!/usr/bin/python |
Debbugs' SOAP Interface Documentation
This documentation will likely always be slightly behind the extant documentation in the Debbugs::SOAP module. However, feel free to update it when they begin to differ.
Please help to keep this documentation up to date!
URL and Namespace
http://bugs.debian.org/cgi-bin/soap.cgi is the official SOAP interface for Debian's BTS.
http://bugs.donarmstrong.com/cgi-bin/soap.cgi is the development version.
The namespace is Debbugs/SOAP
Available methods for bugs.debian.org
http://bugs.debian.org/debbugs-source/mainline/Debbugs/SOAP.pm
- get_status(bugnumber [, bugnumber]*)
- returns the status of the given bugs
- get_bugs(key, value[, key, value]*)
- returns bugs that match the conditions given by key-value pair. Possible keys: package, submitter, maint, src, severity, status, tag, owner, bugs.
- get_usertag(email [, tag]*)
- returns bugs tagged by the email. All of them, or only those tagged with the selected tags, if tags are explicitly given.
- get_bug_log(bugnumber)
- returns the whole bug log, divided in headers and bodies.
- newest_bugs(amount)
- returns a list of the newest bugs.
Available methods for bugs.donarmstrong.com
http://bzr.donarmstrong.com/debbugs/source/Debbugs/SOAP.pm
Currently the same as the one in bugs.debian.org
Examples
Perl
use warnings; use strict; use Data::Dumper; use SOAP::Lite; my $soap = SOAP::Lite->uri('Debbugs/SOAP')->proxy('http://bugs.debian.org/cgi-bin/soap.cgi'); print Dumper($soap->get_bugs(package=>'debbugs')->result()); print Dumper($soap->get_status(400000)->result()); print Dumper($soap->get_status(400000)->result()); # et al.
# get all the bugs tagged with a certain usertag for a package use SOAP::Lite; use Data::Dumper; my $c = new SOAP::Lite->uri('/Debbugs/SOAP')->proxy('http://bugs.debian.org/cgi-bin/soap.cgi'); my $usertags = my $usertags = $c->get_usertag('debian-qa@lists.debian.org')->result(); my $bugs = $c->get_bugs(usertags=>$usertags,tag=>'qa-ftbfs-20070708',package=>'tilp')->result(); print Dumper($bugs);
# get all bugs for a given usertag and then select the bug for a # certain package. Same as above probably a bit faster at times. # $inf will contain all information about the bug such as # subject, tags, severity ... use SOAP::Lite; use Data::Dumper; my $c = new SOAP::Lite->uri('/Debbugs/SOAP')->proxy('http://bugs.debian.org/cgi-bin/soap.cgi'); my $bugs = $c->get_usertag('debian-qa@lists.debian.org','qa-ftbfs-20070708')->result; my $bug = $c->get_bugs('bugs', $bugs->{'qa-ftbfs-20070708'}, 'package', 'tilp')->result; my $inf = $c->get_status($bug)->result; print Dumper($inf);
The following example was provided by DavidMorenoGarza:
# [...] snip [...] my $soap = SOAP::Lite->uri('Debbugs/SOAP')->proxy('http://bugs.donarmstrong.com/cgi-bin/soap.cgi'); my $latest_bug = $soap->newest_bugs(1)->result(); print "Latest bug: $latest_bug->[0]\n"; if($cache > $latest_bug->[0]) { print "No news.\n"; $_[KERNEL]->delay(soap_check => $delay); return; } my $rc_bugs = $soap->get_bugs( bugs => [$cache..$latest_bug->[0]], severity => [qw(serious grave critical)] )->result(); foreach my $bug(sort @$rc_bugs) { my $text = "#$bug: "; my $info = $soap->get_status($bug)->result->{$bug}; $text .= $info->{subject}; $text .= " - package: $info->{package}"; $text .= " - severity: $info->{severity}"; $text .= " - tags: $info->{tags}" if $info->{tags}; $text .= " - date: ".scalar(gmtime($info->{date})); $text .= " - submitter: $info->{originator}"; $text .= " - http://bugs.debian.org/$bug"; $irc->yield(notice => $channel, $text); }
Python
1 #!/usr/bin/python
2
3 import SOAPpy
4
5 url = 'http://bugs.debian.org/cgi-bin/soap.cgi'
6 namespace = 'Debbugs/SOAP'
7 server = SOAPpy.SOAPProxy(url, namespace)
8
9 # some debug output
10 #server.config.dumpSOAPOut = 1
11 #server.config.dumpSOAPIn = 1
12
13
14 def getStatus(*args):
15 result = server.get_status(*args)
16 return result
17
18 def getBugs(*args):
19 result = server.get_bugs(*args)
20 return result
21
22 def getUsertag(*args):
23 result = server.get_usertag(*args)
24 return result
25
26 def getBugLog(*args):
27 result = server.get_bug_log(*args)
28 return result
29
30 def newestBugs(*args):
31 result = server.newest_bugs(*args)
32 return result
33
34
35 # All bugs from one package (returns a list of bugnumbers)
36 print getBugs("package", "gtk-qt-engine")
37
38 # All bugs of a maintainer
39 print getBugs("maint", "<place an email address here>")
40
41 # returns the status of those bugs
42 print getStatus(409909, 419920, 421581, 417044, 397993)
43
44 # getStatus and getBugs combined:
45 getStatus(getBugs("package", "gtk-qt-engine"))
46
47 # returns the full log for the given bug number
48 print getBugLog(202526)
49
50 # retrives the newest 20 bugs
51 print newestBugs(20)
52
53 # returns bugs tagged by the given email
54 print getUsertag('debian-qa@lists.debian.org')
55
56 # returns bugs tagged by the given email, with the given tag
57 print getUsertag('debian-qa@lists.debian.org','qa-ftbfs-20070708')
Ruby
require 'soap/rpc/driver' host = "bugs.debian.org" port = 80 server="http://#{host}:#{port}/cgi-bin/soap.cgi" ns = 'Debbugs/SOAP/' drv = SOAP::RPC::Driver.new(server, ns) drv.wiredump_dev = STDOUT if $DEBUG drv.add_method('get_status','bugnumber') drv.add_method('get_bugs','keyparam') p drv.get_status(drv.get_bugs(['package', 'pbuilder', 'severity', 'wishlist']))
PHP
<?php $client = new SoapClient(NULL, array('location' => "http://bugs.debian.org/cgi-bin/soap.cgi", 'uri' => "Debbugs/SOAP", 'proxy_host' => "http://bugs.debian.org")); $response = $client->__soapCall("get_status", array('bug'=>$bugnumber)); $obj = $response[$bugnumber]; ?> <table border=1> <tr> <td>Originator </td> <td><?php echo $obj->originator?></td> </tr> <tr> <td>Found in</td> <td><?php echo implode(" ",$obj->found_versions); ?></td> </tr> </table>
Use var_dump to get the full list of variables available:
var_dump($obj);
To get details of all bugs with a specific usertag (in this case, crossbuilt):
<?php $tag = 'crossbuilt'; $email='codehelp@debian.org'; $client = new SoapClient(NULL, array('location' => "http://bugs.debian.org/cgi-bin/soap.cgi", 'uri' => "Debbugs/SOAP", 'proxy_host' => "http://bugs.debian.org")); $response = $client->__soapCall("get_usertag", array('email'=>$email,'tag'=>$tag)); $obj_list = ($response->$tag); while ($obj_list) { $bugnumber = array_pop($obj_list); $bugresponse = $client->__soapCall("get_status", array('bug'=>$bugnumber)); $bugobj = $bugresponse[$bugnumber]; echo "<pre>"; echo "Number: $bugnumber\n"; echo "Subject: $bugobj->subject\n"; echo "Package: $bugobj->package\n"; echo "Originator: $bugobj->originator\n"; $bugdate = date("c", $bugobj->date); echo "Date: $bugdate\n"; $modified = date("c", $bugobj->log_modified); echo "Modified: $modified\n"; if ($bugobj->done) { echo "Done: $bugobj->done\n"; } if ($bugobj->fixed) { echo "Done: $bugobj->fixed\n"; } $found = implode(" ",$bugobj->found_versions); echo "Found in: $found\n"; if ($bugobj->fixed_versions) { $fixed_ver = implode (" ", $bugobj->fixed_versions); echo "Fixed in: $fixed_ver\n"; } if ($bugobj->mergedwith) { $merged = implode (" ", $bugobj->mergedwith); echo "Merged with: $merged\n"; } echo "</pre>"; } ?>