def get_cgi_reports(package, system='debian', http_proxy='', archived=False, source=False, version=None): page = open_url(cgi_package_url(system, package, archived, source, version=version), http_proxy) if not page: return (0, None, None) #content = page.read() #if 'Maintainer' not in content: # return (0, None, None) parser = BTSParser(cgi=True) for line in page: parser.feed(line) parser.close() try: page.fp._sock.recv = None except: pass page.close() # Reorganize hierarchy to put recently-fixed bugs at top parser.reorganize() data = (parser.bugcount, parser.title, parser.hierarchy) del parser return data
def parse_mbox_report(number, url, http_proxy, followups=False): page = open_url(url, http_proxy) if not page: return None # Make this seekable wholefile = cStringIO.StringIO(page.read()) try: page.fp._sock.recv = None except: pass page.close() mbox = mailbox.UnixMailbox(wholefile, msgfactory) title = '' output = [] for message in mbox: if not message: pass subject = message.get('Subject') if not title: title = subject date = message.get('Date') fromhdr = message.get('From') body = entry = '' for part in message.walk(): if part.get_content_type() == 'text/plain' and not body: body = part.get_payload(None, True) if fromhdr: entry += 'From: %s%s' % (fromhdr, os.linesep) if subject and subject != title: entry += 'Subject: %s%s' % (subject, os.linesep) if date: entry += 'Date: %s%s' % (date, os.linesep) if entry: entry += os.linesep entry += body.rstrip('\n') + os.linesep output.append(entry) if not output: return None title = "#%d: %s" % (number, title) return (title, output)
def get_reports(package, system='debian', mirrors=None, version=None, http_proxy='', archived=False, source=False): if isinstance(package, basestring): if SYSTEMS[system].get('cgiroot'): result = get_cgi_reports(package, system, http_proxy, archived, source, version=version) if result: return result url = package_url(system, package, mirrors, source) page = open_url(url, http_proxy) if not page: return (0, None, None) #content = page.read() #if 'Maintainer' not in content: # return (0, None, None) parser = BTSParser() for line in page: parser.feed(line) parser.close() try: page.fp._sock.recv = None except: pass page.close() return parser.bugcount, parser.title, parser.hierarchy # A list of bug numbers this_hierarchy = [] package = [int(x) for x in package] package.sort() for bug in package: result = get_report(bug, system, mirrors, http_proxy, archived) if result: title, body = result this_hierarchy.append(title) #print title title = "Multiple bug reports" bugcount = len(this_hierarchy) hierarchy = [('Reports', this_hierarchy)] return bugcount, title, hierarchy
def parse_html_report(number, url, http_proxy, followups=False, cgi=True): page = open_url(url, http_proxy) if not page: return None parser = BTSParser(cgi=cgi, followups=followups) for line in page: parser.feed(line) parser.close() try: page.fp._sock.recv = None except: pass page.close() items = parser.preblock title = "#%d: %s" % (number, parser.title) if not followups: items = [items] output = [] for stuff in items: parts = stuff.split('\n\n') match = re.search('^Date: (.*)$', parts[0], re.M | re.I) date_submitted = '' if match: date_submitted = 'Date: %s\n' % match.group(1) stuff = ('\n\n'.join(parts[1:])).rstrip() if not stuff: continue item = date_submitted+stuff+os.linesep output.append(item) if not output: return None return (title, output)