# -*- coding: utf-8 -*- import BeautifulSoup import datetime import dateutil.parser import dingguo import email.message import ioex import re def parse_order_confirmation_mail(mail): assert isinstance(mail, email.message.Message) html = mail.get_payload()[1].get_payload(decode = True).decode('utf-8') if not 'indiegogo' in html: raise Exception() email_recipient_address = mail['delivered-to'].decode('utf8') email_date = datetime.datetime.utcfromtimestamp( # seconds since the Epoch in UTC email.utils.mktime_tz(email.utils.parsedate_tz(mail['date'])) ) order = dingguo.Order( platform = u'indiegogo', order_id = '%s-%s' % (email_recipient_address, email_date.isoformat()), order_date = email_date, customer_id = email_recipient_address, ) doc = BeautifulSoup.BeautifulSoup(html) campaign_name_tag = doc.find(text = re.compile(u'vielen Dank für deinen Beitrag')).findNext('a') order.items.append(dingguo.Contribution( campaign = dingguo.Campaign( name = campaign_name_tag.text, founder = doc.find(text = re.compile(u'Kontaktiere den Kampagnenstarter')).findNext().text, website_url = campaign_name_tag['href'], ), price_brutto = dingguo.Sum.parse_text( doc.find(text = re.compile(u'Unterstützung:')).findNext().text ), reward = None, )) return [order]