Browse Source

amazon: estimated delivery date

Fabian Peter Hammerle 7 years ago
parent
commit
5dbb141075
2 changed files with 33 additions and 3 deletions
  1. 30 0
      dingguo/parser/amazon.py
  2. 3 3
      tests/parser/test_amazon.py

+ 30 - 0
dingguo/parser/amazon.py

@@ -1,6 +1,8 @@
 # -*- coding: utf-8 -*-
 
 import datetime
+import dateutil
+import dateutil.tz
 import dingguo
 import email
 import ioex
@@ -22,11 +24,13 @@ def parse_order_confirmation_mail(mail):
         order_id = re.search(r'Bestellnummer #(.+)', order_text).group(1)
 
         order_date_formatted = re.search(ur'Aufgegeben am (.+)', order_text, re.UNICODE).group(1)
+        mail_date = dateutil.parser.parse(mail['date'])
         with ioex.setlocale('de_DE.UTF-8'):
             order_date = datetime.datetime.strptime(
                     order_date_formatted.encode('utf-8'),
                     '%d. %B %Y',
                     )
+            assert order_date.date() == mail_date.date()
 
         order = dingguo.Order(
             u'amazon.de',
@@ -67,6 +71,32 @@ def parse_order_confirmation_mail(mail):
                     shipper = article['shipper'],
                     ))
 
+        assert re.search(
+                ur'Verpackung und Versand: \w+ (\d+,\d+)',
+                order_text,
+                ).group(1) == '0,00'
+        shipping_match = re.finditer(
+                ur'Zustellung:\s+(?P<t>[\W\w]+?)\s+'
+                    + ur'Versandart',
+                order_text,
+                re.UNICODE,
+                )
+        for shipping_attr in [m.groupdict() for m in shipping_match]:
+            with ioex.setlocale('de_AT.UTF-8'):
+                s = datetime.datetime.strptime(
+                        shipping_attr['t'].encode('utf8'),
+                        '%A, %d. %B',
+                        ).replace(
+                            year = order.order_date.year,
+                            tzinfo = dateutil.tz.gettz('Europe/Berlin'),
+                            )
+                assert s.date() > order.order_date
+            e = s + datetime.timedelta(days = 1)
+            order.items.append(dingguo.Shipping(
+                price_brutto = dingguo.Sum(0.0, u'EUR'),
+                estimated_arrival_time = ioex.datetimeex.Period(start = s, end = e),
+                ))
+
         orders.append(order)
 
     return orders

+ 3 - 3
tests/test_parser_amazon.py → tests/parser/test_amazon.py

@@ -5,11 +5,11 @@ import pytest
 import dingguo.parser.amazon
 import email
 import glob
+import ioex
 import os
-import test_yaml
 import yaml
 
-project_root_path = os.path.realpath(os.path.join(__file__, '..', '..'))
+project_root_path = os.path.realpath(os.path.join(__file__, '..', '..', '..'))
 test_data_path = os.path.join(project_root_path, 'tests', 'data', 'amazon')
 
 @pytest.mark.parametrize('mail_path', glob.glob(os.path.join(test_data_path, '*.eml')))
@@ -21,4 +21,4 @@ def test_parse_confirmation_mail(mail_path):
     with open(mail_path.replace('.eml', '.yml')) as yaml_file:
         expected_orders = yaml.load(yaml_file.read())
     assert expected_orders == parsed_orders, \
-            test_yaml.yaml_diff(expected_orders, parsed_orders)
+            u'\n%s' % ioex.yaml_diff(expected_orders, parsed_orders, colors = True)