hm.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. # -*- coding: utf-8 -*-
  2. import datetime
  3. import dingguo
  4. import string
  5. import email
  6. import ioex
  7. import re
  8. import BeautifulSoup
  9. def parse_order_confirmation_mail(mail):
  10. assert isinstance(mail, email.message.Message)
  11. html_mail = mail.get_payload()[0].get_payload()[1].get_payload(decode = True)
  12. doc = BeautifulSoup.BeautifulSoup(html_mail)
  13. order_attr = re.search(
  14. ur'Bestelldatum:(?P<date>\d+)'
  15. + ur'Benutzername:(?P<user>.*)'
  16. + ur'Name',
  17. doc.find(text = 'Bestelldatum:').findParent('table').text,
  18. re.UNICODE,
  19. ).groupdict()
  20. user = ''.join([c if (c in string.printable) else '' for c in order_attr['user']])
  21. order = dingguo.Order(
  22. customer_id = user,
  23. order_date = datetime.datetime.strptime(order_attr['date'], '%d%m%y').date(),
  24. order_id = u'%s-%s' % (user, order_attr['date']),
  25. platform = u'hm',
  26. )
  27. for article_tag in [t.findParents('tr')[2] for t in doc.findAll(text = 'Art.-Nr.:')]:
  28. article_subtags = article_tag.findAll(recursive = False)
  29. article = re.search(
  30. ur'Art.-Nr.:(?P<id>[\d-]+)'
  31. + ur'Beschreibung:(?P<label>.*)'
  32. + ur'Größe:(?P<size>.*)'
  33. + ur'Farbe:(?P<color>[^\d]+)',
  34. article_subtags[1].text,
  35. re.UNICODE,
  36. ).groupdict()
  37. order.items.append(dingguo.Article(
  38. color = article['color'],
  39. name = article['label'],
  40. price_brutto = dingguo.Sum(
  41. float(article_subtags[3].text.replace(',', '.')),
  42. u'EUR',
  43. ),
  44. product_id = article['id'],
  45. quantity = int(article_subtags[2].text),
  46. reseller = u'H&M',
  47. size = article['size'],
  48. ))
  49. return [order]