#!/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 # Description: Query Debian WNPP pages import urllib2, sys, re from optparse import OptionParser 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 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) \ or re.match('^in preparation since(.*)$', line): if re.match('^\(.*),', line) \ or re.match ('^ \\,', line): link = re.sub('
    ', '', line).strip() link = line[14:43] item.append(link) name = re.sub('
      ', '', line).strip() name = name[44:] name = name.split(':', 1)[0] item.append(name) if re.match('^requested(.*)$', line) \ or re.match('^(.*)days in preparation(.*)$', line) \ or re.match('^in preparation since yesterday(.*)$', line): if options.itp: if re.match('^in preparation since yesterday', line): days = '1' else: 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] + ')'