mirror of
				https://git.launchpad.net/ubuntu-dev-tools
				synced 2025-11-04 07:54:03 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			135 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/python
 | 
						|
# -*- coding: utf-8 -*-
 | 
						|
#
 | 
						|
# Copyright (C) 2007 Canonical Ltd., Daniel Holbach
 | 
						|
# Copyright (C) 2008 Jonathan Patrick Davies <jpds@ubuntu.com>
 | 
						|
#
 | 
						|
# ##################################################################
 | 
						|
#
 | 
						|
# This program is free software; you can redistribute it and/or
 | 
						|
# modify it under the terms of the GNU General Public License
 | 
						|
# as published by the Free Software Foundation; version 3.
 | 
						|
#
 | 
						|
# This program is distributed in the hope that it will be useful,
 | 
						|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
# GNU General Public License for more details.
 | 
						|
#
 | 
						|
# See file /usr/share/common-licenses/GPL-3 for more details.
 | 
						|
#
 | 
						|
# ##################################################################
 | 
						|
#
 | 
						|
#
 | 
						|
# hugdaylist - produces MoinMoin wiki formatted tables based on a Launchpad bug
 | 
						|
#              list.
 | 
						|
#
 | 
						|
# hugdaylist <url>
 | 
						|
# - produces lists like https://wiki.ubuntu.com/UbuntuBugDay/20070912?action=raw
 | 
						|
#
 | 
						|
# hugdaylist -n <howmany> <url>
 | 
						|
# - will only list <howmany> URLs.
 | 
						|
 | 
						|
import sys
 | 
						|
from optparse import OptionParser
 | 
						|
 | 
						|
from ubuntutools.lp.libsupport import get_launchpad, translate_web_api, translate_api_web
 | 
						|
 | 
						|
def check_args():
 | 
						|
    howmany = -1
 | 
						|
    url = ""
 | 
						|
 | 
						|
    # Our usage options.
 | 
						|
    usage = "usage: %prog [-n <number>] launchpad-buglist-url"
 | 
						|
    optParser = OptionParser(usage)
 | 
						|
    argsParsed = 0
 | 
						|
 | 
						|
    # Options - namely just the number of bugs to output.
 | 
						|
    optParser.add_option("-n", "--number", type = "int",
 | 
						|
            dest = "number", help = "Number of entries to output.")
 | 
						|
 | 
						|
    # Parse arguments.
 | 
						|
    (options, args) = optParser.parse_args()
 | 
						|
 | 
						|
    # Check if we want a number other than the default.
 | 
						|
    howmany = options.number
 | 
						|
 | 
						|
    # Check that we have an URL.
 | 
						|
    if not args:
 | 
						|
        print >> sys.stderr, "An URL pointing to a Launchpad bug list is " \
 | 
						|
           "required."
 | 
						|
        optParser.print_help()
 | 
						|
        sys.exit(1)
 | 
						|
    else:
 | 
						|
        url = args[argsParsed]
 | 
						|
 | 
						|
    return (howmany, url)
 | 
						|
 | 
						|
def filter_unsolved(task):
 | 
						|
    # TODO: don't use this filter here, only check status and assignee of
 | 
						|
    #   the given task
 | 
						|
    # Filter out special types of bugs:
 | 
						|
    # - https://wiki.ubuntu.com/Bugs/HowToTriage#Special%20types%20of%20bugs
 | 
						|
    subscriptions = set(s.person.name for s in task.bug.subscriptions) #this is expensive, parse name out of self_link instead?
 | 
						|
    if (task.status != "Fix Committed" and
 | 
						|
        (not task.assignee or task.assignee.name in ['motu','desktop-bugs']) and
 | 
						|
         'ubuntu-sponsors' not in subscriptions and
 | 
						|
         'ubuntu-archive' not in subscriptions):
 | 
						|
        return True
 | 
						|
    return False
 | 
						|
 | 
						|
def main():
 | 
						|
    (howmany, url) = check_args()
 | 
						|
    if len(url.split("?", 1)) == 2:
 | 
						|
        # search options not supported, because there is no mapping web ui options <-> API options
 | 
						|
        print >> sys.stderr, "Options in url are not supported, url: %s" %url
 | 
						|
        sys.exit(1)
 | 
						|
 | 
						|
    launchpad = None
 | 
						|
    try:
 | 
						|
        launchpad = get_launchpad("ubuntu-dev-tools")
 | 
						|
    except IOError, e:
 | 
						|
        print e
 | 
						|
        sys.exit(1)
 | 
						|
 | 
						|
    api_url = translate_web_api(url, launchpad)
 | 
						|
    try:
 | 
						|
        product = launchpad.load(api_url)
 | 
						|
    except Exception, e:
 | 
						|
        x = getattr(e, "response", {})
 | 
						|
        if x.get("status", None) == "404":
 | 
						|
            print >> sys.stderr, "The URL at '%s' does not appear to be a valid url to a product" %url
 | 
						|
            sys.exit(1)
 | 
						|
        else:
 | 
						|
            raise
 | 
						|
 | 
						|
    bl = product.searchTasks()
 | 
						|
 | 
						|
    l = filter(filter_unsolved, bl)
 | 
						|
 | 
						|
    if not l:
 | 
						|
        print "Bug list of %s is empty." % url
 | 
						|
        sys.exit(0)
 | 
						|
    if howmany == -1:
 | 
						|
        howmany = len(l)
 | 
						|
 | 
						|
    print """
 | 
						|
## ||<rowbgcolor="#CCFFCC"> This task is done || somebody || ||
 | 
						|
## ||<rowbgcolor="#FFFFCC"> This task is assigned || somebody || <status> ||
 | 
						|
## ||<rowbgcolor="#FFEBBB"> This task isn't || ... || ||
 | 
						|
## ||<rowbgcolor="#FFCCCC"> This task is blocked on something || somebody || <explanation> ||
 | 
						|
 | 
						|
|| Bug || Subject || Triager ||"""
 | 
						|
 | 
						|
    for i in list(l)[:howmany]:
 | 
						|
        bug = i.bug
 | 
						|
        print '||<rowbgcolor="#FFEBBB"> [%s %s] || %s || ||' % \
 | 
						|
            (translate_api_web(bug.self_link), bug.id, bug.title)
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    try:
 | 
						|
        main()
 | 
						|
    except KeyboardInterrupt:
 | 
						|
        print >> sys.stderr, "Aborted."
 | 
						|
        sys.exit(1)
 |