#+Title: Email2OrgAgenda #+Author: Sam Flint #+PROPERTY: noweb tangle * Copyright Statement #+Name: CopyrightStatement #+begin_src text Copyright FlintFam Systems Management, 2013. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . #+end_src #+Caption: Copyright Notice (CopyrightStatement) * Code ** Imports #+Name: Imports #+BEGIN_SRC python import os, sys, re, fileinput from email.parser import Parser as parsemail #+END_SRC #+CAPTION: use-name-as-caption We use each library for a purpose: - os :: this is used to access environment variables - sys :: is used to access arguments, input - re :: used for matching and extraction - fileinput :: used to read message from standard input - Parser as parsemail from email.parser :: This is use to parse email messages from standard input ** Variables #+Name: MiscVars #+BEGIN_SRC python data = {} messagedata = {} agendafile = '~/org/emailagenda.org' level = 1 datetype = 'inactive' if os.environ['EMAILTOAGENDAFILE']: agendafile = os.environ['EMAILTOAGENDAFILE'] #+END_SRC #+CAPTION: use-name-as-caption - data :: a dictionary used to store data for output - agendafile :: this is set by default to =~/org/emailagenda.org=. if the environment variable =EMAILTOAGENDAFILE= is defined that is used - level :: this is the level you want the heading to be, defaults to level 1, the top. - datetype :: this is the type of timestamp to be generated, either =active= or =inactive=, defaults to =inactive=. ** Subroutines #+Name: Subroutines #+BEGIN_SRC python <> <> <> #+END_SRC #+CAPTION: use-name-as-caption *** TODO Output #+Name: Output #+BEGIN_SRC python def output(datadict, outputfile): headingstart = '*' * level date = datadict['date'] person = datadict['person'] subject = datadict['subject'] notes = datadict['notes'] if datetype == 'inactive': fdate = '[%s]' % date elif datetype == 'active': fdate = '<%s>' % date else: fdate = '[%s]' % date header = '\n{1} {2} {3}, {4}\n{5}\n' % (headingstart, date, person, subject, notes) outputfile.write(header) #+END_SRC #+CAPTION: use-name-as-caption *** TODO Determine Type #+Name: DetermineType #+BEGIN_SRC python def determineType(datadict): if re.match('^SCHEDRQ: .*', datadict['subject']): return 'schedrq' elif re.match('^Invitation: .*', datadict['subject']): return 'gcal' else: return 'unknown' #+END_SRC #+CAPTION: use-name-as-caption *** TODO Message Muncher #+Name: ParseSubject #+BEGIN_SRC python def munchMessage(datadict): ... #+END_SRC #+CAPTION: use-name-as-caption ** Main body #+Name: Main #+BEGIN_SRC python for line in fileinput.input(): message = message + line data = parsemail.parsestr(message) data['type'] = determineType(data) messagedata = munchMessage(data) ofile = open(agendafile, 'a') output(data, ofile) ofile.close() #+END_SRC #+CAPTION: use-name-as-caption ** Final code #+Name: FinalCode #+BEGIN_SRC python :tangle email2orgagenda.py :shebang "#!/usr/bin/python" # <> <> <> <> <
> #+END_SRC #+CAPTION: use-name-as-caption