diff options
Diffstat (limited to 'wnpp-query.py')
-rwxr-xr-x | wnpp-query.py | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/wnpp-query.py b/wnpp-query.py new file mode 100755 index 0000000..7839fe3 --- /dev/null +++ b/wnpp-query.py @@ -0,0 +1,67 @@ +#!/usr/bin/python + +# This program is free software. It comes without any warranty, to +# the extent permitted by applicable law. You can redistribute it +# and/or modify it under the terms of the Do What The Fuck You Want +# To Public License, Version 2, as published by Sam Hocevar. See +# http://sam.zoy.org/wtfpl/COPYING for more details. + +# Author: Stefan Ritter <xeno@thehappy.de> +# Description: Query Debian WNPP pages + +import urllib2, sys, re +from optparse import OptionParser + +# Parse commandline arguments +parser = OptionParser() +parser.add_option('-i', action='store_true', dest='itp', default=False, help='Query ITPs') +parser.add_option('-r', action='store_true', dest='rfp', default=False, help='Query RFPs') +parser.add_option('--min', dest='min_days_old', type="int", help='Minimum age (in days)') +parser.add_option('--max', dest='max_days_old', type="int", help='Maximum age (in days)') +(options, args) = parser.parse_args() + +if not options.min_days_old and not options.max_days_old or not options.itp and not options.rfp or options.itp and options.rfp: + parser.error('You have to give at least one of --min or --max and one of -r or -i options.') + sys.exit + +if not options.min_days_old: options.min_days_old = 0 +if not options.max_days_old: options.max_days_old = 9999 + +# Here we go... +reports = [] +item = [] +if options.itp: + url = urllib2.urlopen('http://www.debian.org/devel/wnpp/being_packaged') +else: + url = urllib2.urlopen('http://www.debian.org/devel/wnpp/requested') + +for line in url: + if re.findall('bugs\.debian\.org', line) or re.match('requested(.*)ago', line) or re.match('(.*)days in preparation', line): + # First line + if re.match('^.ul.(.*),', line) or re.match ('^(.*)li.(.*),', line): + # Link + link = re.sub('<ul>', '', line).strip() # First line starts with <ul> + link = line[14:43] + item.append(link) + + # Name + name = re.sub('<ul>', '', line).strip() # First line starts with <ul> + name = name[44:] + name = name.split(':', 1)[0] + item.append(name) + + # Second line + if re.match('^requested(.*)', line) or re.match('^(.*)days in preparation', line): + if options.itp: + days = line.split(' ')[0] + else: + days = line.split(' ')[1] + item.append(days) + + if len(item) == 3: + reports.append(item) + item = [] + +for entry in reports: + if int(entry[2]) <= options.max_days_old and int(entry[2]) >= options.min_days_old: + print entry[1] + ': ' + entry[2] + ' days ago (' + entry[0] + ')' |