|
15 | 15 | # URL für Tabelle als CSV
|
16 | 16 | url = 'https://docs.google.com/spreadsheet/ccc?key=0ApNp0aXSrxXPdHlZYk1GTUtuVTVKVWd4RHpYY1ZPS2c&output=csv&gid=2'
|
17 | 17 |
|
| 18 | +# URL für Tabelle als ODS |
| 19 | +url_ods = 'https://docs.google.com/spreadsheet/ccc?key=0ApNp0aXSrxXPdHlZYk1GTUtuVTVKVWd4RHpYY1ZPS2c&output=ods' |
| 20 | + |
18 | 21 | # Zelle mit dem Lieferdatum
|
19 | 22 | pos_date = (1,0)
|
20 | 23 |
|
@@ -148,6 +151,25 @@ def decode_tuple(t):
|
148 | 151 | orders.append(encode_tuple(supplier, product, customer, price_per_unit, quantity, unit))
|
149 | 152 |
|
150 | 153 |
|
| 154 | +######################################################################## |
| 155 | +def attach_spreadsheet(message, url=url_ods, mime_type=('application', 'vnd.oasis.opendocument.spreadsheet'), filename='foodcoop.ods'): |
| 156 | + from email.MIMEBase import MIMEBase |
| 157 | + from email import Encoders |
| 158 | + |
| 159 | + part = MIMEBase(mime_type[0], mime_type[1]) |
| 160 | + opener = build_opener(HTTPCookieProcessor(CookieJar())) |
| 161 | + f = opener.open(url) |
| 162 | + try: |
| 163 | + part.set_payload(f.read()) |
| 164 | + finally: |
| 165 | + f.close() |
| 166 | + |
| 167 | + Encoders.encode_base64(part) |
| 168 | + part.add_header('Content-Disposition', 'attachment; filename="%s"' % filename) |
| 169 | + |
| 170 | + message.attach(part) |
| 171 | + |
| 172 | + |
151 | 173 | ########################################################################
|
152 | 174 | class FormatHtml(object):
|
153 | 175 | def __init__(self):
|
@@ -397,12 +419,13 @@ def format_output(fmt):
|
397 | 419 | parser.add_argument('--to', type=str, dest='recipient', action='store', metavar='RECIPIENT', help='email recipient')
|
398 | 420 | parser.add_argument('--from', type=str, dest='sender', action='store', metavar='SENDER', help='email sender')
|
399 | 421 | parser.add_argument('--subject', type=str, default='Foodcoop-Bestellung KW %s' % datetime.now().isocalendar()[1], metavar='SUBJECT', action='store', help='email subject')
|
| 422 | +parser.add_argument('--attach', action='store_true', help='attach original spreadsheet to email') |
400 | 423 |
|
401 | 424 | args = parser.parse_args()
|
402 | 425 |
|
403 | 426 | if args.mail:
|
404 |
| - if args.recipient is None or args.sender is None or args.subject is None: |
405 |
| - parser.error('Missing required --to/--from/--subject.') |
| 427 | + if args.recipient is None or args.sender is None: |
| 428 | + parser.error('Missing required --to/--from.') |
406 | 429 |
|
407 | 430 | if args.html:
|
408 | 431 | if args.mail:
|
@@ -430,32 +453,39 @@ def format_output(fmt):
|
430 | 453 | #email.Charset.add_charset('utf-8', email.Charset.QP, email.Charset.QP, 'utf-8')
|
431 | 454 | email.Charset.add_charset('utf-8', 'utf-8', 'utf-8', 'utf-8')
|
432 | 455 |
|
433 |
| - multipart = MIMEMultipart('alternative') |
| 456 | + multipart_root = MIMEMultipart('mixed') |
| 457 | + multipart_alternative = MIMEMultipart('alternative') |
434 | 458 |
|
435 | 459 | if all(ord(c) < 128 for c in args.sender):
|
436 |
| - multipart['From'] = Header(args.sender) |
| 460 | + multipart_root['From'] = Header(args.sender) |
437 | 461 | else:
|
438 |
| - multipart['From'] = Header(args.sender, 'UTF-8').encode() |
| 462 | + multipart_root['From'] = Header(args.sender, 'UTF-8').encode() |
439 | 463 |
|
440 | 464 | if all(ord(c) < 128 for c in args.recipient):
|
441 |
| - multipart['To'] = Header(args.recipient) |
| 465 | + multipart_root['To'] = Header(args.recipient) |
442 | 466 | else:
|
443 |
| - multipart['To'] = Header(args.recipient, 'UTF-8').encode() |
| 467 | + multipart_root['To'] = Header(args.recipient, 'UTF-8').encode() |
444 | 468 |
|
445 | 469 | if all(ord(c) < 128 for c in args.subject):
|
446 |
| - multipart['Subject'] = Header(args.subject) |
| 470 | + multipart_root['Subject'] = Header(args.subject) |
447 | 471 | else:
|
448 |
| - multipart['Subject'] = Header(args.subject, 'UTF-8').encode() |
| 472 | + multipart_root['Subject'] = Header(args.subject, 'UTF-8').encode() |
449 | 473 |
|
450 | 474 | if args.html:
|
451 |
| - multipart.attach(MIMEText(out_plain.out, 'plain', 'UTF-8')) |
452 |
| - multipart.attach(MIMEText(out_html.out, 'html', 'UTF-8')) |
| 475 | + multipart_alternative.attach(MIMEText(out_plain.out, 'plain', 'UTF-8')) |
| 476 | + multipart_alternative.attach(MIMEText(out_html.out, 'html', 'UTF-8')) |
453 | 477 | else:
|
454 |
| - multipart.attach(MIMEText(out.out, 'plain', 'UTF-8')) |
| 478 | + multipart_alternative.attach(MIMEText(out.out, 'plain', 'UTF-8')) |
455 | 479 |
|
| 480 | + |
| 481 | + multipart_root.attach(multipart_alternative) |
| 482 | + |
| 483 | + if args.attach: |
| 484 | + attach_spreadsheet(multipart_root, filename='foodcoop-kw%d.ods' % datetime.now().isocalendar()[1]) |
| 485 | + |
456 | 486 | io = StringIO.StringIO()
|
457 | 487 | g = Generator(io, False)
|
458 |
| - g.flatten(multipart) |
| 488 | + g.flatten(multipart_root) |
459 | 489 |
|
460 | 490 | print(io.getvalue())
|
461 | 491 |
|
|
0 commit comments