|
@@ -0,0 +1,89 @@
|
|
|
|
+#!/usr/bin/env python
|
|
|
|
+# PYTHON_ARGCOMPLETE_OK
|
|
|
|
+
|
|
|
|
+import re
|
|
|
|
+import os
|
|
|
|
+import sys
|
|
|
|
+import yaml
|
|
|
|
+import email
|
|
|
|
+import pprint
|
|
|
|
+import random
|
|
|
|
+import locale
|
|
|
|
+import argparse
|
|
|
|
+import datetime
|
|
|
|
+import argcomplete
|
|
|
|
+
|
|
|
|
+# strptime
|
|
|
|
+locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
|
|
|
|
+
|
|
|
|
+def parse(msg):
|
|
|
|
+
|
|
|
|
+ order = {
|
|
|
|
+ 'platform': 'amazon.de',
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ msg_text = msg.get_payload(decode = True)
|
|
|
|
+
|
|
|
|
+ order['order_id'] = re.search(r'Bestellnummer #(.+)', msg_text).group(1)
|
|
|
|
+
|
|
|
|
+ order_date = datetime.datetime.strptime(
|
|
|
|
+ re.search(r'Aufgegeben am (.+)', msg_text).group(1),
|
|
|
|
+ '%d. %B %Y'
|
|
|
|
+ )
|
|
|
|
+ order['order_date'] = order_date.strftime('%Y-%m-%d')
|
|
|
|
+
|
|
|
|
+ order['articles'] = []
|
|
|
|
+ articles_text = msg_text.split('Bestellte(r) Artikel:')[1].split('_' * 10)[0].strip()
|
|
|
|
+ for article_text in articles_text.split('\n\n'):
|
|
|
|
+ article_match = re.match(
|
|
|
|
+ ur' *(?P<name>.*)\s'
|
|
|
|
+ + ur' *(?P<price_currency>[A-Z]+) (?P<price>\d+,\d+)\s'
|
|
|
|
+ + ur' *Verkauft von: (?P<reseller>.*)',
|
|
|
|
+ article_text,
|
|
|
|
+ re.MULTILINE | re.UNICODE
|
|
|
|
+ )
|
|
|
|
+ article = article_match.groupdict()
|
|
|
|
+ article['price'] = float(article['price'].replace(',', '.'))
|
|
|
|
+ order['articles'].append(article)
|
|
|
|
+
|
|
|
|
+ return order
|
|
|
|
+
|
|
|
|
+def compute():
|
|
|
|
+
|
|
|
|
+ msg = email.message_from_string(sys.stdin.read())
|
|
|
|
+
|
|
|
|
+ orders = []
|
|
|
|
+
|
|
|
|
+ if msg.is_multipart():
|
|
|
|
+ for part in msg.get_payload():
|
|
|
|
+ orders.append(parse(part))
|
|
|
|
+ else:
|
|
|
|
+ orders.append(parse(msg))
|
|
|
|
+
|
|
|
|
+ print(yaml.safe_dump(orders, default_flow_style = False))
|
|
|
|
+
|
|
|
|
+def _init_argparser():
|
|
|
|
+
|
|
|
|
+ argparser = argparse.ArgumentParser(description = None)
|
|
|
|
+ # argparser.add_argument('a', nargs = '*')
|
|
|
|
+ # argparser.add_argument('--b')
|
|
|
|
+ # argparser.add_argument('--flag', action='store_true')
|
|
|
|
+ # argparser.add_argument('file', type = argparse.FileType('r'))
|
|
|
|
+ # exclusive_group = argparser.add_mutually_exclusive_group(required = False)
|
|
|
|
+ # exclusive_group.add_argument('--exclusive-1', action='store_true')
|
|
|
|
+ # exclusive_group.add_argument('--exclusive-2', action='store_true')
|
|
|
|
+ # subparsers = argparser.add_subparsers(help = None, dest = 'command')
|
|
|
|
+ return argparser
|
|
|
|
+
|
|
|
|
+def main(argv):
|
|
|
|
+
|
|
|
|
+ argparser = _init_argparser()
|
|
|
|
+ argcomplete.autocomplete(argparser)
|
|
|
|
+ args = argparser.parse_args(argv)
|
|
|
|
+
|
|
|
|
+ compute(**vars(args))
|
|
|
|
+
|
|
|
|
+ return 0
|
|
|
|
+
|
|
|
|
+if __name__ == "__main__":
|
|
|
|
+ sys.exit(main(sys.argv[1:]))
|