wnpp-query/wnpp-query.py

93 lines
3.1 KiB
Python
Raw Normal View History

2009-10-27 13:27:32 +01:00
#!/usr/bin/python
2009-10-28 12:38:09 +01:00
# -*- coding: utf-8 -*-
2009-10-27 13:27:32 +01:00
# 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
2009-10-27 13:27:32 +01:00
import urllib2, sys, re
from optparse import OptionParser
2009-10-27 13:27:32 +01:00
parser = OptionParser()
2009-10-27 21:35:07 +01:00
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('-d', action='store_true', dest='description', default=False, help='show description of each package')
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()
2009-10-27 13:27:32 +01:00
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
2009-10-27 13:27:32 +01:00
if not options.min_days_old: options.min_days_old = 0
if not options.max_days_old: options.max_days_old = 9999
2009-10-27 17:02:56 +01:00
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')
2009-10-27 13:27:32 +01:00
2009-10-28 15:51:41 +01:00
reports = []
item = []
for line in url:
2009-10-27 17:02:56 +01:00
2009-10-28 15:51:41 +01:00
if re.match('^(.*)bugs\.debian\.org(.*)$', line) \
or re.match('^requested(.*)$', line) \
or re.match('^in preparation since(.*)$', line) \
or re.match('^(.*)days in preparation\.$', line):
2009-10-27 17:02:56 +01:00
if re.match('^\<ul\>(.*),', line) \
or re.match ('^ \<li\>\<a href(.*)\</a\>,', line):
2009-10-28 15:51:41 +01:00
line = line.strip()
link = re.sub('<ul>', '', line)
link = line[13:42]
2009-10-27 13:27:32 +01:00
item.append(link)
2009-10-28 15:51:41 +01:00
name = re.sub('<ul>', '', line)
2009-10-27 13:27:32 +01:00
name = name[44:]
name = name.split(':', 1)[0]
item.append(name)
if options.description:
try:
2009-10-28 15:51:41 +01:00
description = re.sub('</a>,', '', line)
description = ' (' + description.split(':')[2].strip() + ')'
except:
description = ''
item.append(description)
else:
item.append('')
2009-10-27 17:02:56 +01:00
if re.match('^requested(.*)$', line) \
or re.match('^(.*)days in preparation(.*)$', line) \
or re.match('^in preparation since(.*)$', line):
2009-10-27 17:02:56 +01:00
if options.itp:
if re.match('^in preparation since yesterday\.$', line): days = '1'
elif re.match('^in preparation since today\.$', line): days = '0'
2009-10-27 17:02:56 +01:00
else: days = line.split(' ')[0]
else:
if re.match('^requested yesterday\.$', line): days = '1'
elif re.match('^requested today\.$', line): days = '0'
else: days = line.split(' ')[1]
2009-10-27 13:27:32 +01:00
item.append(days)
if len(item) == 4:
2009-10-27 13:27:32 +01:00
reports.append(item)
item = []
reports.sort(key = lambda x: x[3])
2009-10-27 13:27:32 +01:00
for entry in reports:
if int(entry[3]) <= options.max_days_old \
and int(entry[3]) >= options.min_days_old:
print entry[3], 'days ago:', entry[1], entry[0], entry[2]