BugList
|
Size: 2066
Comment:
|
← Revision 21 as of 2008-08-06 17:01:38 ⇥
Size: 8070
Comment:
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 1: | Line 1: |
| ## page was renamed from BugHelper/Dev/python-launchpad-bugs/API changes/BugListExample ## page was renamed from BugHelper/Dev/python-launchpad-bugs/API changes/BugList example ||<tablestyle="float:right; font-size: 0.9em; width:40%; background:#F1F1ED; margin: 0 0 1em 1em;" style="padding:0.5em;"><<TableOfContents>>|| = BugList - tutorial = |
|
| Line 2: | Line 8: |
| = Example usage of BugList = | |
| Line 4: | Line 9: |
| ''' Use `LaunchpadConnector` and setting authentification: ''' {{{ import launchpadBugs.Connector as Connector |
== General workflow == |
| Line 7: | Line 11: |
| BugList = Connector.ConnectBugList() BugList.authentification = "cookie.txt" |
This is how to use python-launchpad-bugs to get a list of bugs {{{#!python >>> from launchpadbugs.connector import ConnectBugList >>> BugList = ConnectBugList() # using the html mode >>> bl = BugList("https://bugs.launchpad.net/ubuntu/+source/bughelper/+bugs") |
| Line 11: | Line 19: |
| ''' Getting a list of bugs and print available information: ''' {{{ l = bl.BugList("https://bugs.launchpad.net/ubuntu/+source/bughelper/+bugs") for i in l.bugs: print i.bugnumber, print i.url, print i.summary, print i.importance, print i.status, print i.sourcepackage }}} {{{ 88521 https://bugs.launchpad.net/ubuntu/+source/bughelper/+bug/88521 selectively pulling attachments by name Medium Incomplete None |
If you need a faster method to fetch the bug list but can abdicate additional information like status and importance of a bugreport it is possible to use the text mode of launchpad: |
| Line 23: | Line 21: |
| 88102 https://bugs.launchpad.net/ubuntu/+source/bughelper/+bug/88102 sort report by issue type rather than bug number Undecided Confirmed None | {{{#!python start=2 >>> BugList = ConnectBugList("text") # using the text mode |
| Line 26: | Line 25: |
| ''' Adding some (upstream) bugs to the set ''' {{{ l += bl.BugList("https://bugs.launchpad.net/bughelper/+bugs") print l.bugs }}} {{{ set([109628, 110937, 88521, 88102, 84723, 88102, 81291, 85152, 88521, 90084, 109547]) |
In some cases, e.g. if the resulting lists should contain private bugreports, authentication is necessary {{{#!python start=4 >>> BugList.authentication="cookie.txt" #for text-based mozilla cookie files or >>> BugList.authentication="cookie.sql" #for sql mozilla cookie files |
| Line 33: | Line 32: |
| ''' Setting a filter and filter the set of bugs ''' {{{ bl.set_filter(minbug=100000, filterbug="117701,109628", status="New") l = l.filter() print l.bugs }}} {{{ set([110937, 109547]) |
It is also possible to do authentication via email-login and password. Note: This takes much longer than using cookie files, therefore python-launchpad-bugs provides a method to save the resulting cookie into a file {{{#!python start=7 >>> BugList.authentication={"email": "[email protected]", "passwort": "YourPassword"} >>> BugList.connection.save_cookie("/home/markus/.lpcookie") |
| Line 41: | Line 39: |
| ''' Sorting the list of bugs ''' {{{ print l.sort("nr") }}} {{{ [109547, 110937] |
There are currently different versions of launchpad, the stable bugs.launchpad.net and the testing environment bugs.edge.launchpad.net. Sometimes it makes sense to explicitly choose one of these versions to work with. In python-launchpad-bugs it is possible to define which version to use. {{{#!python >>> from launchpadbugs.lpconstants import HTTPCONNECTION >>> BugList.set_connection_mode(HTTPCONNECTION.MODE.EDGE) # or >>> BugList.set_connection_mode(HTTPCONNECTION.MODE.STABLE) }}} == Bug list objects == `BugList` objects are set-like objects, each member is an instance of `LPBugInfo`. {{{#!python >>> bl <BugList https://bugs.launchpad.net/ubuntu/+source/bughelper/+bugs> >>> print bl BugList([<BugInfo 129341>,<BugInfo 88102>,<BugInfo 150887>]) >>> len(bl) 3 |
| Line 47: | Line 60: |
| ''' add LP urloptions to an url ''' {{{ a = bl.BugList("https://launchpad.net/ubuntu/+source/apport/+bugs?%s" %bl.URLOPT) print a.bugs }}} {{{ set([123180, 122818, 123394, 119270, 123440, 87364, 105224, 108482, 95504, 114215, 118407, 118827, 119104, 95822, 121121, 121341, 122196, 123216, 122274, 122347, 122522, 122798, 89916, 122882, 94130, 122859, 123062]) |
=== LPBugInfo === A `LPBugInfo` object has this attribute: ||'''Attribute'''||'''Description'''||'''Example'''|| || .bugnumber || number of a bugreport (type of int) || || || .url || url to this bugreport (task specific) || || || .summary || one-line title of a bugreport || || || .importance || importance of a bugreport || || || .status || status of a bugreport || || || .sourcepackage || returns affected package within a distribution or an empty string|| || {{{#!python >>> b = bl.pop() >>> b <BugInfo 239007> >>> print b [Bug 239007 : Confirmed/Undecided] >>> int(b) 239007 |
| Line 54: | Line 82: |
| ''' Raising `LPUrlError` for invalid urls ''' {{{ try: a = bl.BugList("https://bugs.launchpad.net/ubuntu/+source/firefokkksss/+bugs") print len(a.bugs) except bl.LPURLERROR, e: print e |
=== Adding some (upstream) bugs to the set === It is easy to merge two `BugList`-objects {{{#!python >>> bl <BugList https://bugs.launchpad.net/ubuntu/+source/bughelper/+bugs> >>> bl += BugList("https://bugs.launchpad.net/bughelper/+bugs") >>> len(bl) 14 |
| Line 61: | Line 92: |
| {{{ "'Page not found (url: https://bugs.launchpad.net/ubuntu/+source/firefokkksss/+bugs)'" |
=== Filtering bug lists === With python-launchpad-bugs 0.3 there is a new way of filtering bug lists. First of all: there are two different ways of filtering * Filtering while fetching the list * Filtering the actual object The way mentioned by the last item can easily be done by using python's buildin `filter()` function and does not change the actual object.<<BR>> In contrast the first way is irreversible. It is possible to use URL-based filter options (options provided by `advanced-search` of launchpad) or functions to filter elements. This functions take an element of the bug list as the only argument and return either `False` or an instance of `LPBugInfo` or `LPBug`. If `False` is returned the related element is filtered out of the list. As a very basic example let's have a look at all bugs in the bughelper project which have an even bugnumber and which importance is either "Medium" or "Low" {{{#!python >>> from launchpadbugs.basebuglistfilter import URLBugListFilter >>> bug_filter = URLBugListFilter() >>> bug_filter.add_option("importance", ("Medium", "Low")) >>> bug_filter.functions.append(lambda x: not int(x) % 2 and x) >>> bl = BugList(bug_filter("https://bugs.launchpad.net/bughelper/+bugs")) >>> print bl BugList([<BugInfo 131378>,<BugInfo 88102>]) |
| Line 64: | Line 114: |
=== Sorting the list of bugs === `LPBugList` objects do also have a `.sort(<key>)` method which returns a sorted list. `<key>` could be nr, status or importance with an optional leading `-` for reverse order. {{{#!python >>> bl = BugList("https://bugs.launchpad.net/ubuntu/+source/bughelper/+bugs") >>> print [str(i) for i in bl] ['[Bug 239007 : Confirmed/Undecided]', '[Bug 129341 : New/Wishlist]', '[Bug 88102 : Confirmed/Undecided]', '[Bug 150887 : In Progress/Wishlist]'] >>> print [str(i) for i in bl.sort("-status")] ['[Bug 129341 : New/Wishlist]', '[Bug 239007 : Confirmed/Undecided]', '[Bug 88102 : Confirmed/Undecided]', '[Bug 150887 : In Progress/Wishlist]'] }}} == Raised Exeptions == If the url given as an argument to the buglist is not valid in launchpad a `LaunchpadURLError`-Error will be raised {{{#!python >>> from launchpadbugs.exceptions import LaunchpadURLError >>> try: ... bl = BugList("https://bugs.launchpad.net/ubuntu/+source/bughelpcxcxcver/+bugs") ... except LaunchpadURLError, e: ... print e ... * message: Page not found * url: https://bugs.launchpad.net/ubuntu/+source/bughelpcxcxcver/+bugs }}} New to python-launchpad-bugs 0.3 is that this types of errors always return the url in question. == visualize fetching progress == With python-launchpad-bugs 0.3 it is possible to visualize the progress of getting the bug lists from launchpad. This is useful for GUI based applications. {{{#!python >>> from launchpadbugs.connector import ConnectBugList >>> BugList = ConnectBugList() >>> def progress_hook(counter, batchsize, result_length): ... print counter, "/", batchsize, "/", result_length ... >>> BugList.set_progress_hook(progress_hook) >>> BugList("https://bugs.edge.launchpad.net/python-launchpad-bugs/+bugs") 1 / 25 / 30 2 / 25 / 30 <BugList https://bugs.edge.launchpad.net/python-launchpad-bugs/+bugs> >>> }}} == More on custom filter functions == Another new feature of python-launchpad-bugs 0.3 are filter functions which are able to stop the entire fetching process. As a very abstract example let's try to get a list of the first 5 bugs in ubuntu with the word 'ubuntu' in the summary. {{{#!python >>> from launchpadbugs.connector import ConnectBugList >>> from launchpadbugs.basebuglistfilter import URLBugListFilter, StopFiltering >>> class myfilter(object): ... def __init__(self): ... self.counter = 0 ... def __call__(self, bug): ... if self.counter > 5: ... raise StopFiltering ... if "ubuntu" in bug.summary.lower(): ... self.counter += 1 ... return bug ... else: ... return False ... >>> BugList = ConnectBugList() >>> bug_filter = URLBugListFilter() >>> bug_filter.functions.append(myfilter()) >>> BugList(bug_filter("https://bugs.edge.launchpad.net/ubuntu/+bugs")) BugList([<BugInfo 126784>,<BugInfo 19634>,<BugInfo 24692>,<BugInfo 159096>,<BugInfo 44346>,<BugInfo 41694>]) }}} Some more useful examples can be found in [[http://bazaar.launchpad.net/~bughelper-dev/python-launchpad-bugs/main/annotate/head:/launchpadbugs/basebuglistfilter.py|basebuglistfilter.py]], one of them is the `datereported` filter function which allows getting a list of all bugs reported on a given date or in a given time period. ---- Go Back to '''[[BugHelper/Dev]]'''.<<BR>> CategoryBugHelper |
BugList - tutorial
This is still work in progress
General workflow
This is how to use python-launchpad-bugs to get a list of bugs
If you need a faster method to fetch the bug list but can abdicate additional information like status and importance of a bugreport it is possible to use the text mode of launchpad:
2 >>> BugList = ConnectBugList("text") # using the text mode
In some cases, e.g. if the resulting lists should contain private bugreports, authentication is necessary
It is also possible to do authentication via email-login and password. Note: This takes much longer than using cookie files, therefore python-launchpad-bugs provides a method to save the resulting cookie into a file
7 >>> BugList.authentication={"email": "[email protected]", "passwort": "YourPassword"}
8 >>> BugList.connection.save_cookie("/home/markus/.lpcookie")
There are currently different versions of launchpad, the stable bugs.launchpad.net and the testing environment bugs.edge.launchpad.net. Sometimes it makes sense to explicitly choose one of these versions to work with. In python-launchpad-bugs it is possible to define which version to use.
Bug list objects
BugList objects are set-like objects, each member is an instance of LPBugInfo.
LPBugInfo
A LPBugInfo object has this attribute:
Attribute |
Description |
Example |
.bugnumber |
number of a bugreport (type of int) |
|
.url |
url to this bugreport (task specific) |
|
.summary |
one-line title of a bugreport |
|
.importance |
importance of a bugreport |
|
.status |
status of a bugreport |
|
.sourcepackage |
returns affected package within a distribution or an empty string |
|
Adding some (upstream) bugs to the set
It is easy to merge two BugList-objects
Filtering bug lists
With python-launchpad-bugs 0.3 there is a new way of filtering bug lists. First of all: there are two different ways of filtering
- Filtering while fetching the list
- Filtering the actual object
The way mentioned by the last item can easily be done by using python's buildin filter() function and does not change the actual object.
In contrast the first way is irreversible. It is possible to use URL-based filter options (options provided by advanced-search of launchpad) or functions to filter elements. This functions take an element of the bug list as the only argument and return either False or an instance of LPBugInfo or LPBug. If False is returned the related element is filtered out of the list.
As a very basic example let's have a look at all bugs in the bughelper project which have an even bugnumber and which importance is either "Medium" or "Low"
1 >>> from launchpadbugs.basebuglistfilter import URLBugListFilter
2 >>> bug_filter = URLBugListFilter()
3 >>> bug_filter.add_option("importance", ("Medium", "Low"))
4 >>> bug_filter.functions.append(lambda x: not int(x) % 2 and x)
5 >>> bl = BugList(bug_filter("https://bugs.launchpad.net/bughelper/+bugs"))
6 >>> print bl
7 BugList([<BugInfo 131378>,<BugInfo 88102>])
Sorting the list of bugs
LPBugList objects do also have a .sort(<key>) method which returns a sorted list. <key> could be nr, status or importance with an optional leading - for reverse order.
1 >>> bl = BugList("https://bugs.launchpad.net/ubuntu/+source/bughelper/+bugs")
2 >>> print [str(i) for i in bl]
3 ['[Bug 239007 : Confirmed/Undecided]', '[Bug 129341 : New/Wishlist]', '[Bug 88102 : Confirmed/Undecided]', '[Bug 150887 : In Progress/Wishlist]']
4 >>> print [str(i) for i in bl.sort("-status")]
5 ['[Bug 129341 : New/Wishlist]', '[Bug 239007 : Confirmed/Undecided]', '[Bug 88102 : Confirmed/Undecided]', '[Bug 150887 : In Progress/Wishlist]']
Raised Exeptions
If the url given as an argument to the buglist is not valid in launchpad a LaunchpadURLError-Error will be raised
1 >>> from launchpadbugs.exceptions import LaunchpadURLError
2 >>> try:
3 ... bl = BugList("https://bugs.launchpad.net/ubuntu/+source/bughelpcxcxcver/+bugs")
4 ... except LaunchpadURLError, e:
5 ... print e
6 ...
7 * message: Page not found
8 * url: https://bugs.launchpad.net/ubuntu/+source/bughelpcxcxcver/+bugs
New to python-launchpad-bugs 0.3 is that this types of errors always return the url in question.
visualize fetching progress
With python-launchpad-bugs 0.3 it is possible to visualize the progress of getting the bug lists from launchpad. This is useful for GUI based applications.
1 >>> from launchpadbugs.connector import ConnectBugList
2 >>> BugList = ConnectBugList()
3 >>> def progress_hook(counter, batchsize, result_length):
4 ... print counter, "/", batchsize, "/", result_length
5 ...
6 >>> BugList.set_progress_hook(progress_hook)
7 >>> BugList("https://bugs.edge.launchpad.net/python-launchpad-bugs/+bugs")
8 1 / 25 / 30
9 2 / 25 / 30
10 <BugList https://bugs.edge.launchpad.net/python-launchpad-bugs/+bugs>
11 >>>
More on custom filter functions
Another new feature of python-launchpad-bugs 0.3 are filter functions which are able to stop the entire fetching process. As a very abstract example let's try to get a list of the first 5 bugs in ubuntu with the word 'ubuntu' in the summary.
1 >>> from launchpadbugs.connector import ConnectBugList
2 >>> from launchpadbugs.basebuglistfilter import URLBugListFilter, StopFiltering
3 >>> class myfilter(object):
4 ... def __init__(self):
5 ... self.counter = 0
6 ... def __call__(self, bug):
7 ... if self.counter > 5:
8 ... raise StopFiltering
9 ... if "ubuntu" in bug.summary.lower():
10 ... self.counter += 1
11 ... return bug
12 ... else:
13 ... return False
14 ...
15 >>> BugList = ConnectBugList()
16 >>> bug_filter = URLBugListFilter()
17 >>> bug_filter.functions.append(myfilter())
18 >>> BugList(bug_filter("https://bugs.edge.launchpad.net/ubuntu/+bugs"))
19 BugList([<BugInfo 126784>,<BugInfo 19634>,<BugInfo 24692>,<BugInfo 159096>,<BugInfo 44346>,<BugInfo 41694>])
Some more useful examples can be found in basebuglistfilter.py, one of them is the datereported filter function which allows getting a list of all bugs reported on a given date or in a given time period.
Go Back to BugHelper/Dev.
CategoryBugHelper
BugHelper/Dev/python-launchpad-bugs/BugList (last edited 2008-08-06 17:01:38 by localhost)