def parse_mail(fileobj): headers, body = {}, [] msg = email.message_from_file(fileobj) for k, v in msg.items(): headers[k] = quoted_printable(v).replace('\n', '').replace('\t', ' ').strip() for line in email.Iterators.body_line_iterator(msg): line = unicode(line, 'utf-8', 'replace').replace('\n', '') body.append(line) # Merge lines joined with "=\n" i = len(body) - 1 while i > 0: i -= 1 prev = body[i] if len(prev) == 74 and prev.endswith('='): body[i] = body[i][:-1] + body[i + 1] del body[i + 1] # Remove =20 from end of lines i = 0 while i < len(body): if body[i].endswith('=20'): body[i] = body[i][:-3] + ' ' i += 1 return headers, body
def parse_mail(fileobj): headers, body = {}, [] msg = email.message_from_binary_file(fileobj) for k, v in msg.items(): headers[k] = quoted_printable(v).replace('\n', '').replace('\t', ' ').strip() for line in email.iterators.body_line_iterator(msg): body.append(line.replace("\n", "")) # Merge lines joined with "=\n" i = len(body) - 1 while i > 0: i -= 1 prev = body[i] if len(prev) == 74 and prev.endswith('='): body[i] = body[i][:-1] + body[i + 1] del body[i + 1] # Remove =20 from end of lines i = 0 while i < len(body): if body[i].endswith('=20'): body[i] = body[i][:-3] + ' ' i += 1 return headers, body
def parse(headers, body, **kwargs): if headers.get('List-Id', '') not in lists: return mapping = { 'Source': 'package', 'Version': 'version', 'Distribution': 'distribution', 'Urgency': 'urgency', 'Changed-By': 'by', 'Closes': 'closes', 'Maintainer': 'maintainer' } msg = AcceptedUploadMessage() for line in body: for field, target in mapping.iteritems(): if line.startswith('%s: ' % field): val = line[len(field) + 2:] setattr(msg, target, val) del mapping[field] break # If we have found all the fields, stop looking if len(mapping) == 0: break if msg.by: msg.by = format_email_address(quoted_printable(msg.by)) try: if msg.closes: msg.closes = [int(x) for x in msg.closes.split(' ')] except ValueError: return if msg.urgency: msg.urgency = msg.urgency.lower() if msg.maintainer: msg.maintainer = format_email_address(quoted_printable(msg.by)) if 'new_queue' in kwargs: new_queue = kwargs['new_queue'] msg.new_upload = new_queue.is_new(msg.package, msg.version) return msg
def parse(headers, body, **kwargs): if headers.get("List-Id", "") not in lists: return mapping = { "Source": "package", "Version": "version", "Distribution": "distribution", "Urgency": "urgency", "Changed-By": "by", "Closes": "closes", "Maintainer": "maintainer", } msg = AcceptedUploadMessage() for line in body: for field, target in mapping.items(): if line.startswith("%s: " % field): val = line[len(field) + 2:] setattr(msg, target, val) del mapping[field] break # If we have found all the fields, stop looking if len(mapping) == 0: break if msg.by: msg.by = format_email_address(quoted_printable(msg.by)) try: if msg.closes: msg.closes = [int(x) for x in msg.closes.split(" ")] except ValueError: return if msg.urgency: msg.urgency = msg.urgency.lower() if "new_queue" in kwargs: new_queue = kwargs["new_queue"] msg.new_upload = new_queue.is_new( msg.package, msg.version) or new_queue.is_backports_new( msg.package, msg.version) return msg
def parse(headers, body): if headers.get('List-Id', '') not in ('<debian-devel-changes.lists.debian.org>', '<debian-backports-changes.lists.debian.org>'): return msg = AcceptedUploadMessage() mapping = { 'Source': 'package', 'Version': 'version', 'Distribution': 'distribution', 'Urgency': 'urgency', 'Changed-By': 'by', 'Closes': 'closes', } for line in body: for field, target in mapping.iteritems(): if line.startswith('%s: ' % field): val = line[len(field) + 2:] setattr(msg, target, val) del mapping[field] break # If we have found all the fields, stop looking if len(mapping) == 0: break if msg.by: msg.by = format_email_address(quoted_printable(msg.by)) try: if msg.closes: msg.closes = [int(x) for x in msg.closes.split(' ')] except ValueError: return if msg.urgency: msg.urgency = msg.urgency.lower() return msg