Size: 10188
Comment:
|
Size: 10222
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 33: | Line 33: |
||originator||String||Who sent the bugreport|| | ||subject||String||Subject/Title of the bugreport|| ||originator||String||Submitter of the bugreport|| |
Line 35: | Line 36: |
||subject||String|||| |
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 (see attributes list bellow)
- 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 (which can be 'done', 'forwarded', 'open'), 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.
- get_versions(package, dist, arch)
- Returns a list of the versions of package in the distributions and architectures listed. This routine only returns unique values.
get_status attributes returned
Bug attributes returned by get_status are :
Attribute |
Type |
Meaning |
subject |
String |
Subject/Title of the bugreport |
originator |
String |
Submitter of the bugreport |
date |
||
msgid |
String |
|
package |
String |
|
tags |
Whitespace seperated List of Strings |
|
done |
Boolean |
|
forwarded |
String |
some URL, sometimes an email address |
mergedwith |
Integer when one Bugnumber, empty String when empty, should be a list of ?? if merged with more than one bug? |
|
severity |
String |
|
owner |
||
found_versions |
List of Strings |
Version Numbers |
found_date |
||
found |
Dict |
Not fully implemented in debbugs, use found_versions for now |
fixed_versions |
List of Strings |
Version Numbers |
fixed_date |
||
fixed |
Dict |
Not fully implemented in debbugs, use fixed_versions for now |
blocks |
Sometimes an int sometimes a string |
|
blockedby |
||
unarchived |
Boolean |
|
summary |
String |
Seems to be empty all the times |
affects |
||
log_modified |
||
location |
||
archived |
Boolean |
|
bug_num |
Integer |
The Bugnumber |
id |
Integer |
Superflouus, use bug_num, id will vanish in future versions according to Don |
source |
String |
|
keywords |
||
pending |
String |
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 = $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 def get_status(*args):
10 result = server.get_status(*args)
11 return result
12
13 def get_bugs(*args):
14 result = server.get_bugs(*args)
15 return result
16
17 def get_usertag(email, *tags):
18 result = server.get_usertag(email, *tags)
19 return result
20
21 def get_bug_log(bugnumber):
22 result = server.get_bug_log(bugnumber)
23 return result
24
25 def newest_bugs(amount):
26 result = server.newest_bugs(amount)
27 return result
28
29 if __name__ == "__main__":
30 # Demonstration
31
32 # some debug output
33 server.config.dumpSOAPOut = 1
34 server.config.dumpSOAPIn = 1
35
36 # All bugs from one package (returns a list of bugnumbers)
37 print get_bugs("package", "gtk-qt-engine")
38
39 # All bugs of a maintainer
40 print get_bugs("maint", "debian-qa@lists.debian.org")
41
42 # returns the status of those bugs
43 print get_status(409909, 419920, 421581, 417044, 397993)
44
45 # get_status and get_bugs combined:
46 print get_status(get_bugs("package", "gtk-qt-engine"))
47
48 # returns the full log for the given bug number
49 print get_bug_log(202526)
50
51 # retrives the newest 20 bugs
52 print newest_bugs(20)
53
54 # All bugs of a maintainer
55 print get_bugs("maint", "debian-qa@lists.debian.org")
56
57 # returns the status of those bugs
58 print get_status(409909, 419920, 421581, 417044, 397993)
59
60 # get_status and get_bugs combined:
61 print get_status(get_bugs("package", "gtk-qt-engine"))
62
63 # returns the full log for the given bug number
64 print get_bug_log(202526)
65
66 # retrives the newest 20 bugs
67 print newest_bugs(20)
68
69 # returns bugs tagged by the given email
70 print get_usertag("debian-qa@lists.debian.org")
71
72 # returns bugs tagged by the given email, with the given tag
73 print get_usertag("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); try { $bugresponse = $client->__soapCall("get_status", array('bug'=>$bugnumber)); } catch (Exception $e) { print "Unable to get status for bug #"; print "<a href=\"http://bugs.debian.org/$bugnumber\">$bugnumber</a><br/>\n"; continue; } $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>"; } ?>
FAQ