email2orgsched.org 3.8 KB

Email2OrgAgenda

Copyright Statement

  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 <http://www.gnu.org/licenses/>.

Code

Imports

  import os, sys, re, fileinput
  from email.parser import Parser as parsemail

We use each library for a purpose:

use-name-as-caption
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

  data = {}
  messagedata = {}
  agendafile = '~/org/emailagenda.org'
  level = 1
  datetype = 'inactive'
  if os.environ['EMAILTOAGENDAFILE']:
     agendafile = os.environ['EMAILTOAGENDAFILE']
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.

use-name-as-caption

Subroutines

  <<Output>>
  
  <<DetermineType>>
  
  <<ParseSubject>>

TODO Output

  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)
use-name-as-caption

TODO Determine Type

  def determineType(datadict):
     if re.match('^SCHEDRQ: .*', datadict['subject']):
        return 'schedrq'
     elif re.match('^Invitation: .*', datadict['subject']):
        return 'gcal'
     else:
        return 'unknown'

TODO Message Muncher

  def munchMessage(datadict):
     ...

Main body

  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()

Final code

  # <<CopyrightStatement>>
  
  <<Imports>>
  
  <<MiscVars>>
  
  <<Subroutines>>
  
  <<Main>>