#!/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.*)\s' + ur' *(?P[A-Z]+) (?P\d+,\d+)\s' + ur'( *Zustand: (?P.*)\s)?' + ur' *Verkauft von: (?P.*)', article_text, re.MULTILINE | re.UNICODE ) if article_match is None: sys.stderr.write(repr(article_text)) raise Exception('could not match article') article = article_match.groupdict() article['price_brutto'] = float(article['price_brutto'].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:]))