Vega strike Python Modules doc  0.5.1
Documentation of the " Modules " folder of Vega strike
 All Data Structures Namespaces Files Functions Variables
mhlib Namespace Reference

Data Structures

class  Error
 
class  MH
 
class  Folder
 
class  Message
 
class  SubMessage
 
class  IntSet
 

Functions

def isnumeric
 
def pickline
 
def updateline
 
def test
 

Variables

string MH_PROFILE = '~/.mh_profile'
 
string PATH = '~/Mail'
 
string MH_SEQUENCES = '.mh_sequences'
 
int FOLDER_PROTECT = 0700
 
list __all__ = ["MH","Error","Folder","Message"]
 
tuple numericprog = re.compile('^[1-9][0-9]*$')
 

Detailed Description

MH interface -- purely object-oriented (well, almost)

Executive summary:

import mhlib

mh = mhlib.MH()         # use default mailbox directory and profile
mh = mhlib.MH(mailbox)  # override mailbox location (default from profile)
mh = mhlib.MH(mailbox, profile) # override mailbox and profile

mh.error(format, ...)   # print error message -- can be overridden
s = mh.getprofile(key)  # profile entry (None if not set)
path = mh.getpath()     # mailbox pathname
name = mh.getcontext()  # name of current folder
mh.setcontext(name)     # set name of current folder

list = mh.listfolders() # names of top-level folders
list = mh.listallfolders() # names of all folders, including subfolders
list = mh.listsubfolders(name) # direct subfolders of given folder
list = mh.listallsubfolders(name) # all subfolders of given folder

mh.makefolder(name)     # create new folder
mh.deletefolder(name)   # delete folder -- must have no subfolders

f = mh.openfolder(name) # new open folder object

f.error(format, ...)    # same as mh.error(format, ...)
path = f.getfullname()  # folder's full pathname
path = f.getsequencesfilename() # full pathname of folder's sequences file
path = f.getmessagefilename(n)  # full pathname of message n in folder

list = f.listmessages() # list of messages in folder (as numbers)
n = f.getcurrent()      # get current message
f.setcurrent(n)         # set current message
list = f.parsesequence(seq)     # parse msgs syntax into list of messages
n = f.getlast()         # get last message (0 if no messagse)
f.setlast(n)            # set last message (internal use only)

dict = f.getsequences() # dictionary of sequences in folder {name: list}
f.putsequences(dict)    # write sequences back to folder

f.createmessage(n, fp)  # add message from file f as number n
f.removemessages(list)  # remove messages in list from folder
f.refilemessages(list, tofolder) # move messages in list to other folder
f.movemessage(n, tofolder, ton)  # move one message to a given destination
f.copymessage(n, tofolder, ton)  # copy one message to a given destination

m = f.openmessage(n)    # new open message object (costs a file descriptor)
m is a derived class of mimetools.Message(rfc822.Message), with:
s = m.getheadertext()   # text of message's headers
s = m.getheadertext(pred) # text of message's headers, filtered by pred
s = m.getbodytext()     # text of message's body, decoded
s = m.getbodytext(0)    # text of message's body, not decoded

Function Documentation

def mhlib.isnumeric (   str)

Definition at line 238 of file mhlib.py.

239 def isnumeric(str):
240  return numericprog.match(str) is not None
def mhlib.pickline (   file,
  key,
  casefold = 1 
)

Definition at line 905 of file mhlib.py.

References aifc.open().

906 def pickline(file, key, casefold = 1):
907  try:
908  f = open(file, 'r')
909  except IOError:
910  return None
911  pat = re.escape(key) + ':'
912  prog = re.compile(pat, casefold and re.IGNORECASE)
913  while 1:
914  line = f.readline()
915  if not line: break
916  if prog.match(line):
917  text = line[len(key)+1:]
918  while 1:
919  line = f.readline()
920  if not line or not line[0].isspace():
921  break
922  text = text + line
923  return text.strip()
924  return None
def mhlib.test ( )

Definition at line 959 of file mhlib.py.

960 def test():
961  global mh, f
962  os.system('rm -rf $HOME/Mail/@test')
963  mh = MH()
964  def do(s): print s; print eval(s)
965  do('mh.listfolders()')
966  do('mh.listallfolders()')
967  testfolders = ['@test', '@test/test1', '@test/test2',
968  '@test/test1/test11', '@test/test1/test12',
969  '@test/test1/test11/test111']
970  for t in testfolders: do('mh.makefolder(%s)' % `t`)
971  do('mh.listsubfolders(\'@test\')')
972  do('mh.listallsubfolders(\'@test\')')
973  f = mh.openfolder('@test')
974  do('f.listsubfolders()')
975  do('f.listallsubfolders()')
976  do('f.getsequences()')
977  seqs = f.getsequences()
978  seqs['foo'] = IntSet('1-10 12-20', ' ').tolist()
979  print seqs
980  f.putsequences(seqs)
981  do('f.getsequences()')
982  testfolders.reverse()
983  for t in testfolders: do('mh.deletefolder(%s)' % `t`)
984  do('mh.getcontext()')
985  context = mh.getcontext()
986  f = mh.openfolder(context)
987  do('f.getcurrent()')
988  for seq in ['first', 'last', 'cur', '.', 'prev', 'next',
989  'first:3', 'last:3', 'cur:3', 'cur:-3',
990  'prev:3', 'next:3',
991  '1:3', '1:-3', '100:3', '100:-3', '10000:3', '10000:-3',
992  'all']:
993  try:
994  do('f.parsesequence(%s)' % `seq`)
995  except Error, msg:
996  print "Error:", msg
997  stuff = os.popen("pick %s 2>/dev/null" % `seq`).read()
998  list = map(int, stuff.split())
999  print list, "<-- pick"
1000  do('f.listmessages()')
1001 
def mhlib.updateline (   file,
  key,
  value,
  casefold = 1 
)

Definition at line 925 of file mhlib.py.

References aifc.open().

926 def updateline(file, key, value, casefold = 1):
927  try:
928  f = open(file, 'r')
929  lines = f.readlines()
930  f.close()
931  except IOError:
932  lines = []
933  pat = re.escape(key) + ':(.*)\n'
934  prog = re.compile(pat, casefold and re.IGNORECASE)
935  if value is None:
936  newline = None
937  else:
938  newline = '%s: %s\n' % (key, value)
939  for i in range(len(lines)):
940  line = lines[i]
941  if prog.match(line):
942  if newline is None:
943  del lines[i]
944  else:
945  lines[i] = newline
946  break
947  else:
948  if newline is not None:
949  lines.append(newline)
950  tempfile = file + "~"
951  f = open(tempfile, 'w')
952  for line in lines:
953  f.write(line)
954  f.close()
955  os.rename(tempfile, file)
956 
957 
958 # Test program

Variable Documentation

list __all__ = ["MH","Error","Folder","Message"]

Definition at line 84 of file mhlib.py.

int FOLDER_PROTECT = 0700

Definition at line 70 of file mhlib.py.

string MH_PROFILE = '~/.mh_profile'

Definition at line 67 of file mhlib.py.

string MH_SEQUENCES = '.mh_sequences'

Definition at line 69 of file mhlib.py.

tuple numericprog = re.compile('^[1-9][0-9]*$')

Definition at line 237 of file mhlib.py.

string PATH = '~/Mail'

Definition at line 68 of file mhlib.py.