annotate Lib/mhlib.py @ 4566:6403c94de50d legacy-trunk

Added safeguard against failure in __del__.
author Guido van Rossum <guido@python.org>
date Wed, 27 Nov 1996 19:39:58 +0000
parents 5748d5ee19ed
children 59e8a02a4774
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 # MH interface -- purely object-oriented (well, almost)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 #
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 # Executive summary:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 #
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 # import mhlib
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 #
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 # mh = mhlib.MH() # use default mailbox directory and profile
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 # mh = mhlib.MH(mailbox) # override mailbox location (default from profile)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 # mh = mhlib.MH(mailbox, profile) # override mailbox and profile
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 #
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 # mh.error(format, ...) # print error message -- can be overridden
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 # s = mh.getprofile(key) # profile entry (None if not set)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 # path = mh.getpath() # mailbox pathname
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 # name = mh.getcontext() # name of current folder
3632
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
15 # mh.setcontext(name) # set name of current folder
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 #
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 # list = mh.listfolders() # names of top-level folders
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 # list = mh.listallfolders() # names of all folders, including subfolders
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 # list = mh.listsubfolders(name) # direct subfolders of given folder
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 # list = mh.listallsubfolders(name) # all subfolders of given folder
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 #
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 # mh.makefolder(name) # create new folder
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 # mh.deletefolder(name) # delete folder -- must have no subfolders
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 #
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 # f = mh.openfolder(name) # new open folder object
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 #
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 # f.error(format, ...) # same as mh.error(format, ...)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 # path = f.getfullname() # folder's full pathname
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 # path = f.getsequencesfilename() # full pathname of folder's sequences file
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 # path = f.getmessagefilename(n) # full pathname of message n in folder
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 #
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 # list = f.listmessages() # list of messages in folder (as numbers)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 # n = f.getcurrent() # get current message
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 # f.setcurrent(n) # set current message
3632
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
35 # list = f.parsesequence(seq) # parse msgs syntax into list of messages
2050
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
36 # n = f.getlast() # get last message (0 if no messagse)
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
37 # f.setlast(n) # set last message (internal use only)
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 #
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 # dict = f.getsequences() # dictionary of sequences in folder {name: list}
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 # f.putsequences(dict) # write sequences back to folder
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 #
2050
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
42 # f.removemessages(list) # remove messages in list from folder
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
43 # f.refilemessages(list, tofolder) # move messages in list to other folder
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
44 # f.movemessage(n, tofolder, ton) # move one message to a given destination
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
45 # f.copymessage(n, tofolder, ton) # copy one message to a given destination
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
46 #
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 # m = f.openmessage(n) # new open message object (costs a file descriptor)
1872
32e6c3a671d0 mhlib.py: delay opening of sequences file so we don't overwrite it when
Guido van Rossum <guido@python.org>
parents: 1739
diff changeset
48 # m is a derived class of mimetools.Message(rfc822.Message), with:
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 # s = m.getheadertext() # text of message's headers
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 # s = m.getheadertext(pred) # text of message's headers, filtered by pred
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 # s = m.getbodytext() # text of message's body, decoded
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 # s = m.getbodytext(0) # text of message's body, not decoded
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 #
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 # XXX To do, functionality:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 # - annotate messages
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 # - create, send messages
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 #
2050
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
58 # XXX To do, organization:
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 # - move IntSet to separate file
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 # - move most Message functionality to module mimetools
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
61
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
62
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 # Customizable defaults
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
64
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 MH_PROFILE = '~/.mh_profile'
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 PATH = '~/Mail'
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 MH_SEQUENCES = '.mh_sequences'
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 FOLDER_PROTECT = 0700
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
69
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
70
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 # Imported modules
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
72
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
73 import os
3632
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
74 import sys
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
75 from stat import ST_NLINK
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
76 import regex
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 import string
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
78 import mimetools
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
79 import multifile
2050
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
80 import shutil
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
81
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
82
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
83 # Exported constants
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
84
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
85 Error = 'mhlib.Error'
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
86
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
87
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
88 # Class representing a particular collection of folders.
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
89 # Optional constructor arguments are the pathname for the directory
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
90 # containing the collection, and the MH profile to use.
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
91 # If either is omitted or empty a default is used; the default
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
92 # directory is taken from the MH profile if it is specified there.
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
93
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
94 class MH:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
95
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
96 # Constructor
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
97 def __init__(self, path = None, profile = None):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
98 if not profile: profile = MH_PROFILE
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
99 self.profile = os.path.expanduser(profile)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
100 if not path: path = self.getprofile('Path')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
101 if not path: path = PATH
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
102 if not os.path.isabs(path) and path[0] != '~':
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
103 path = os.path.join('~', path)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
104 path = os.path.expanduser(path)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
105 if not os.path.isdir(path): raise Error, 'MH() path not found'
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
106 self.path = path
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
107
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
108 # String representation
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
109 def __repr__(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
110 return 'MH(%s, %s)' % (`self.path`, `self.profile`)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
111
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
112 # Routine to print an error. May be overridden by a derived class
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
113 def error(self, msg, *args):
3632
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
114 sys.stderr.write('MH error: %s\n' % (msg % args))
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
115
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
116 # Return a profile entry, None if not found
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
117 def getprofile(self, key):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
118 return pickline(self.profile, key)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
119
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
120 # Return the path (the name of the collection's directory)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
121 def getpath(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
122 return self.path
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
123
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
124 # Return the name of the current folder
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
125 def getcontext(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
126 context = pickline(os.path.join(self.getpath(), 'context'),
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
127 'Current-Folder')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
128 if not context: context = 'inbox'
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
129 return context
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
130
3632
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
131 # Set the name of the current folder
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
132 def setcontext(self, context):
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
133 fn = os.path.join(self.getpath(), 'context')
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
134 f = open(fn, "w")
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
135 f.write("Current-Folder: %s\n" % context)
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
136 f.close()
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
137
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
138 # Return the names of the top-level folders
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
139 def listfolders(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
140 folders = []
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
141 path = self.getpath()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
142 for name in os.listdir(path):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
143 if name in (os.curdir, os.pardir): continue
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
144 fullname = os.path.join(path, name)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
145 if os.path.isdir(fullname):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
146 folders.append(name)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
147 folders.sort()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
148 return folders
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
149
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
150 # Return the names of the subfolders in a given folder
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
151 # (prefixed with the given folder name)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
152 def listsubfolders(self, name):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
153 fullname = os.path.join(self.path, name)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
154 # Get the link count so we can avoid listing folders
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
155 # that have no subfolders.
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
156 st = os.stat(fullname)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
157 nlinks = st[ST_NLINK]
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
158 if nlinks <= 2:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
159 return []
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
160 subfolders = []
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
161 subnames = os.listdir(fullname)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
162 for subname in subnames:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
163 if subname in (os.curdir, os.pardir): continue
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
164 fullsubname = os.path.join(fullname, subname)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
165 if os.path.isdir(fullsubname):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
166 name_subname = os.path.join(name, subname)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
167 subfolders.append(name_subname)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
168 # Stop looking for subfolders when
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
169 # we've seen them all
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
170 nlinks = nlinks - 1
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
171 if nlinks <= 2:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
172 break
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
173 subfolders.sort()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
174 return subfolders
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
175
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
176 # Return the names of all folders, including subfolders, recursively
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
177 def listallfolders(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
178 return self.listallsubfolders('')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
179
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
180 # Return the names of subfolders in a given folder, recursively
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
181 def listallsubfolders(self, name):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
182 fullname = os.path.join(self.path, name)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
183 # Get the link count so we can avoid listing folders
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
184 # that have no subfolders.
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
185 st = os.stat(fullname)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
186 nlinks = st[ST_NLINK]
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
187 if nlinks <= 2:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
188 return []
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
189 subfolders = []
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
190 subnames = os.listdir(fullname)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
191 for subname in subnames:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
192 if subname in (os.curdir, os.pardir): continue
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
193 if subname[0] == ',' or isnumeric(subname): continue
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
194 fullsubname = os.path.join(fullname, subname)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
195 if os.path.isdir(fullsubname):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
196 name_subname = os.path.join(name, subname)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
197 subfolders.append(name_subname)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
198 if not os.path.islink(fullsubname):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
199 subsubfolders = self.listallsubfolders(
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
200 name_subname)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
201 subfolders = subfolders + subsubfolders
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
202 # Stop looking for subfolders when
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
203 # we've seen them all
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
204 nlinks = nlinks - 1
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
205 if nlinks <= 2:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
206 break
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
207 subfolders.sort()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
208 return subfolders
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
209
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
210 # Return a new Folder object for the named folder
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
211 def openfolder(self, name):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
212 return Folder(self, name)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
213
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
214 # Create a new folder. This raises os.error if the folder
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
215 # cannot be created
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
216 def makefolder(self, name):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
217 protect = pickline(self.profile, 'Folder-Protect')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
218 if protect and isnumeric(protect):
3632
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
219 mode = string.atoi(protect, 8)
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
220 else:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
221 mode = FOLDER_PROTECT
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
222 os.mkdir(os.path.join(self.getpath(), name), mode)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
223
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
224 # Delete a folder. This removes files in the folder but not
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
225 # subdirectories. If deleting the folder itself fails it
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
226 # raises os.error
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
227 def deletefolder(self, name):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
228 fullname = os.path.join(self.getpath(), name)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
229 for subname in os.listdir(fullname):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
230 if subname in (os.curdir, os.pardir): continue
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
231 fullsubname = os.path.join(fullname, subname)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
232 try:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
233 os.unlink(fullsubname)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
234 except os.error:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
235 self.error('%s not deleted, continuing...' %
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
236 fullsubname)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
237 os.rmdir(fullname)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
238
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
239
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
240 # Class representing a particular folder
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
241
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
242 numericprog = regex.compile('[1-9][0-9]*')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
243 def isnumeric(str):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
244 return numericprog.match(str) == len(str)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
245
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
246 class Folder:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
247
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
248 # Constructor
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
249 def __init__(self, mh, name):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
250 self.mh = mh
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
251 self.name = name
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
252 if not os.path.isdir(self.getfullname()):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
253 raise Error, 'no folder %s' % name
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
254
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
255 # String representation
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
256 def __repr__(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
257 return 'Folder(%s, %s)' % (`self.mh`, `self.name`)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
258
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
259 # Error message handler
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
260 def error(self, *args):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
261 apply(self.mh.error, args)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
262
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
263 # Return the full pathname of the folder
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
264 def getfullname(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
265 return os.path.join(self.mh.path, self.name)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
266
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
267 # Return the full pathname of the folder's sequences file
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
268 def getsequencesfilename(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
269 return os.path.join(self.getfullname(), MH_SEQUENCES)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
270
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
271 # Return the full pathname of a message in the folder
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
272 def getmessagefilename(self, n):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
273 return os.path.join(self.getfullname(), str(n))
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
274
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
275 # Return list of direct subfolders
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
276 def listsubfolders(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
277 return self.mh.listsubfolders(self.name)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
278
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
279 # Return list of all subfolders
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
280 def listallsubfolders(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
281 return self.mh.listallsubfolders(self.name)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
282
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
283 # Return the list of messages currently present in the folder.
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
284 # As a side effect, set self.last to the last message (or 0)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
285 def listmessages(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
286 messages = []
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
287 for name in os.listdir(self.getfullname()):
3632
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
288 if name[0] != "," and \
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
289 numericprog.match(name) == len(name):
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
290 messages.append(string.atoi(name))
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
291 messages.sort()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
292 if messages:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
293 self.last = max(messages)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
294 else:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
295 self.last = 0
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
296 return messages
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
297
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
298 # Return the set of sequences for the folder
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
299 def getsequences(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
300 sequences = {}
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
301 fullname = self.getsequencesfilename()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
302 try:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
303 f = open(fullname, 'r')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
304 except IOError:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
305 return sequences
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
306 while 1:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
307 line = f.readline()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
308 if not line: break
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
309 fields = string.splitfields(line, ':')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
310 if len(fields) <> 2:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
311 self.error('bad sequence in %s: %s' %
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
312 (fullname, string.strip(line)))
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
313 key = string.strip(fields[0])
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
314 value = IntSet(string.strip(fields[1]), ' ').tolist()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
315 sequences[key] = value
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
316 return sequences
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
317
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
318 # Write the set of sequences back to the folder
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
319 def putsequences(self, sequences):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
320 fullname = self.getsequencesfilename()
1872
32e6c3a671d0 mhlib.py: delay opening of sequences file so we don't overwrite it when
Guido van Rossum <guido@python.org>
parents: 1739
diff changeset
321 f = None
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
322 for key in sequences.keys():
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
323 s = IntSet('', ' ')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
324 s.fromlist(sequences[key])
1872
32e6c3a671d0 mhlib.py: delay opening of sequences file so we don't overwrite it when
Guido van Rossum <guido@python.org>
parents: 1739
diff changeset
325 if not f: f = open(fullname, 'w')
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
326 f.write('%s: %s\n' % (key, s.tostring()))
1872
32e6c3a671d0 mhlib.py: delay opening of sequences file so we don't overwrite it when
Guido van Rossum <guido@python.org>
parents: 1739
diff changeset
327 if not f:
32e6c3a671d0 mhlib.py: delay opening of sequences file so we don't overwrite it when
Guido van Rossum <guido@python.org>
parents: 1739
diff changeset
328 try:
32e6c3a671d0 mhlib.py: delay opening of sequences file so we don't overwrite it when
Guido van Rossum <guido@python.org>
parents: 1739
diff changeset
329 os.unlink(fullname)
32e6c3a671d0 mhlib.py: delay opening of sequences file so we don't overwrite it when
Guido van Rossum <guido@python.org>
parents: 1739
diff changeset
330 except os.error:
32e6c3a671d0 mhlib.py: delay opening of sequences file so we don't overwrite it when
Guido van Rossum <guido@python.org>
parents: 1739
diff changeset
331 pass
32e6c3a671d0 mhlib.py: delay opening of sequences file so we don't overwrite it when
Guido van Rossum <guido@python.org>
parents: 1739
diff changeset
332 else:
32e6c3a671d0 mhlib.py: delay opening of sequences file so we don't overwrite it when
Guido van Rossum <guido@python.org>
parents: 1739
diff changeset
333 f.close()
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
334
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
335 # Return the current message. Raise KeyError when there is none
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
336 def getcurrent(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
337 return min(self.getsequences()['cur'])
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
338
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
339 # Set the current message
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
340 def setcurrent(self, n):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
341 updateline(self.getsequencesfilename(), 'cur', str(n), 0)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
342
3632
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
343 # Parse an MH sequence specification into a message list.
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
344 def parsesequence(self, seq):
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
345 if seq == "all":
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
346 return self.listmessages()
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
347 try:
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
348 n = string.atoi(seq, 10)
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
349 except string.atoi_error:
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
350 n = 0
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
351 if n > 0:
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
352 return [n]
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
353 if regex.match("^last:", seq) >= 0:
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
354 try:
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
355 n = string.atoi(seq[5:])
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
356 except string.atoi_error:
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
357 n = 0
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
358 if n > 0:
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
359 return self.listmessages()[-n:]
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
360 if regex.match("^first:", seq) >= 0:
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
361 try:
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
362 n = string.atoi(seq[6:])
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
363 except string.atoi_error:
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
364 n = 0
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
365 if n > 0:
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
366 return self.listmessages()[:n]
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
367 dict = self.getsequences()
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
368 if dict.has_key(seq):
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
369 return dict[seq]
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
370 context = self.mh.getcontext()
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
371 # Complex syntax -- use pick
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
372 pipe = os.popen("pick +%s %s 2>/dev/null" % (self.name, seq))
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
373 data = pipe.read()
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
374 sts = pipe.close()
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
375 self.mh.setcontext(context)
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
376 if sts:
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
377 raise Error, "unparseable sequence %s" % `seq`
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
378 items = string.split(data)
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
379 return map(string.atoi, items)
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
380
1872
32e6c3a671d0 mhlib.py: delay opening of sequences file so we don't overwrite it when
Guido van Rossum <guido@python.org>
parents: 1739
diff changeset
381 # Open a message -- returns a Message object
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
382 def openmessage(self, n):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
383 return Message(self, n)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
384
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
385 # Remove one or more messages -- may raise os.error
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
386 def removemessages(self, list):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
387 errors = []
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
388 deleted = []
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
389 for n in list:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
390 path = self.getmessagefilename(n)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
391 commapath = self.getmessagefilename(',' + str(n))
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
392 try:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
393 os.unlink(commapath)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
394 except os.error:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
395 pass
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
396 try:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
397 os.rename(path, commapath)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
398 except os.error, msg:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
399 errors.append(msg)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
400 else:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
401 deleted.append(n)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
402 if deleted:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
403 self.removefromallsequences(deleted)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
404 if errors:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
405 if len(errors) == 1:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
406 raise os.error, errors[0]
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
407 else:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
408 raise os.error, ('multiple errors:', errors)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
409
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
410 # Refile one or more messages -- may raise os.error.
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
411 # 'tofolder' is an open folder object
3755
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
412 def refilemessages(self, list, tofolder, keepsequences=0):
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
413 errors = []
3755
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
414 refiled = {}
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
415 for n in list:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
416 ton = tofolder.getlast() + 1
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
417 path = self.getmessagefilename(n)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
418 topath = tofolder.getmessagefilename(ton)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
419 try:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
420 os.rename(path, topath)
2050
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
421 except os.error:
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
422 # Try copying
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
423 try:
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
424 shutil.copy2(path, topath)
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
425 os.unlink(path)
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
426 except (IOError, os.error), msg:
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
427 errors.append(msg)
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
428 try:
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
429 os.unlink(topath)
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
430 except os.error:
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
431 pass
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
432 continue
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
433 tofolder.setlast(ton)
3755
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
434 refiled[n] = ton
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
435 if refiled:
3755
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
436 if keepsequences:
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
437 tofolder._copysequences(self, refiled.items())
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
438 self.removefromallsequences(refiled.keys())
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
439 if errors:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
440 if len(errors) == 1:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
441 raise os.error, errors[0]
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
442 else:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
443 raise os.error, ('multiple errors:', errors)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
444
3755
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
445 # Helper for refilemessages() to copy sequences
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
446 def _copysequences(self, fromfolder, refileditems):
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
447 fromsequences = fromfolder.getsequences()
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
448 tosequences = self.getsequences()
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
449 changed = 0
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
450 for name, seq in fromsequences.items():
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
451 try:
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
452 toseq = tosequences[name]
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
453 new = 0
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
454 except:
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
455 toseq = []
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
456 new = 1
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
457 for fromn, ton in refileditems:
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
458 if fromn in seq:
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
459 toseq.append(ton)
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
460 changed = 1
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
461 if new and toseq:
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
462 tosequences[name] = toseq
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
463 if changed:
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
464 self.putsequences(tosequences)
6598a518668f Added option to refilemessages() to keep sequences
Guido van Rossum <guido@python.org>
parents: 3632
diff changeset
465
2050
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
466 # Move one message over a specific destination message,
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
467 # which may or may not already exist.
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
468 def movemessage(self, n, tofolder, ton):
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
469 path = self.getmessagefilename(n)
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
470 # Open it to check that it exists
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
471 f = open(path)
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
472 f.close()
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
473 del f
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
474 topath = tofolder.getmessagefilename(ton)
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
475 backuptopath = tofolder.getmessagefilename(',%d' % ton)
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
476 try:
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
477 os.rename(topath, backuptopath)
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
478 except os.error:
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
479 pass
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
480 try:
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
481 os.rename(path, topath)
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
482 except os.error:
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
483 # Try copying
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
484 ok = 0
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
485 try:
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
486 tofolder.setlast(None)
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
487 shutil.copy2(path, topath)
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
488 ok = 1
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
489 finally:
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
490 if not ok:
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
491 try:
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
492 os.unlink(topath)
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
493 except os.error:
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
494 pass
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
495 os.unlink(path)
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
496 self.removefromallsequences([n])
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
497
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
498 # Copy one message over a specific destination message,
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
499 # which may or may not already exist.
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
500 def copymessage(self, n, tofolder, ton):
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
501 path = self.getmessagefilename(n)
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
502 # Open it to check that it exists
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
503 f = open(path)
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
504 f.close()
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
505 del f
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
506 topath = tofolder.getmessagefilename(ton)
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
507 backuptopath = tofolder.getmessagefilename(',%d' % ton)
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
508 try:
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
509 os.rename(topath, backuptopath)
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
510 except os.error:
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
511 pass
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
512 ok = 0
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
513 try:
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
514 tofolder.setlast(None)
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
515 shutil.copy2(path, topath)
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
516 ok = 1
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
517 finally:
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
518 if not ok:
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
519 try:
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
520 os.unlink(topath)
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
521 except os.error:
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
522 pass
19363f8570a2 * Lib/mhlib.py: added movemessage(), copymessage(), added copy
Guido van Rossum <guido@python.org>
parents: 1872
diff changeset
523
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
524 # Remove one or more messages from all sequeuces (including last)
4541
5748d5ee19ed When removing a messge from all sequences, don't remove from 'cur',
Guido van Rossum <guido@python.org>
parents: 3755
diff changeset
525 # -- but not from 'cur'!!!
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
526 def removefromallsequences(self, list):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
527 if hasattr(self, 'last') and self.last in list:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
528 del self.last
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
529 sequences = self.getsequences()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
530 changed = 0
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
531 for name, seq in sequences.items():
4541
5748d5ee19ed When removing a messge from all sequences, don't remove from 'cur',
Guido van Rossum <guido@python.org>
parents: 3755
diff changeset
532 if name == 'cur':
5748d5ee19ed When removing a messge from all sequences, don't remove from 'cur',
Guido van Rossum <guido@python.org>
parents: 3755
diff changeset
533 continue
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
534 for n in list:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
535 if n in seq:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
536 seq.remove(n)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
537 changed = 1
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
538 if not seq:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
539 del sequences[name]
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
540 if changed:
1739
7831ffdb787b * Lib/mhlib.py (removefromallsequences): call putsequences with
Guido van Rossum <guido@python.org>
parents: 1681
diff changeset
541 self.putsequences(sequences)
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
542
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
543 # Return the last message number
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
544 def getlast(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
545 if not hasattr(self, 'last'):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
546 messages = self.listmessages()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
547 return self.last
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
548
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
549 # Set the last message number
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
550 def setlast(self, last):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
551 if last is None:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
552 if hasattr(self, 'last'):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
553 del self.last
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
554 else:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
555 self.last = last
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
556
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
557 class Message(mimetools.Message):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
558
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
559 # Constructor
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
560 def __init__(self, f, n, fp = None):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
561 self.folder = f
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
562 self.number = n
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
563 if not fp:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
564 path = f.getmessagefilename(n)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
565 fp = open(path, 'r')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
566 mimetools.Message.__init__(self, fp)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
567
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
568 # String representation
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
569 def __repr__(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
570 return 'Message(%s, %s)' % (repr(self.folder), self.number)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
571
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
572 # Return the message's header text as a string. If an
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
573 # argument is specified, it is used as a filter predicate to
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
574 # decide which headers to return (its argument is the header
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
575 # name converted to lower case).
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
576 def getheadertext(self, pred = None):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
577 if not pred:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
578 return string.joinfields(self.headers, '')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
579 headers = []
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
580 hit = 0
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
581 for line in self.headers:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
582 if line[0] not in string.whitespace:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
583 i = string.find(line, ':')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
584 if i > 0:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
585 hit = pred(string.lower(line[:i]))
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
586 if hit: headers.append(line)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
587 return string.joinfields(headers, '')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
588
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
589 # Return the message's body text as string. This undoes a
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
590 # Content-Transfer-Encoding, but does not interpret other MIME
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
591 # features (e.g. multipart messages). To suppress to
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
592 # decoding, pass a 0 as argument
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
593 def getbodytext(self, decode = 1):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
594 self.fp.seek(self.startofbody)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
595 encoding = self.getencoding()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
596 if not decode or encoding in ('7bit', '8bit', 'binary'):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
597 return self.fp.read()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
598 from StringIO import StringIO
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
599 output = StringIO()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
600 mimetools.decode(self.fp, output, encoding)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
601 return output.getvalue()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
602
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
603 # Only for multipart messages: return the message's body as a
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
604 # list of SubMessage objects. Each submessage object behaves
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
605 # (almost) as a Message object.
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
606 def getbodyparts(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
607 if self.getmaintype() != 'multipart':
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
608 raise Error, \
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
609 'Content-Type is not multipart/*'
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
610 bdry = self.getparam('boundary')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
611 if not bdry:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
612 raise Error, 'multipart/* without boundary param'
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
613 self.fp.seek(self.startofbody)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
614 mf = multifile.MultiFile(self.fp)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
615 mf.push(bdry)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
616 parts = []
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
617 while mf.next():
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
618 n = str(self.number) + '.' + `1 + len(parts)`
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
619 part = SubMessage(self.folder, n, mf)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
620 parts.append(part)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
621 mf.pop()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
622 return parts
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
623
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
624 # Return body, either a string or a list of messages
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
625 def getbody(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
626 if self.getmaintype() == 'multipart':
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
627 return self.getbodyparts()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
628 else:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
629 return self.getbodytext()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
630
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
631
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
632 class SubMessage(Message):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
633
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
634 # Constructor
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
635 def __init__(self, f, n, fp):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
636 Message.__init__(self, f, n, fp)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
637 if self.getmaintype() == 'multipart':
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
638 self.body = Message.getbodyparts(self)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
639 else:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
640 self.body = Message.getbodytext(self)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
641 # XXX If this is big, should remember file pointers
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
642
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
643 # String representation
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
644 def __repr__(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
645 f, n, fp = self.folder, self.number, self.fp
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
646 return 'SubMessage(%s, %s, %s)' % (f, n, fp)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
647
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
648 def getbodytext(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
649 if type(self.body) == type(''):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
650 return self.body
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
651
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
652 def getbodyparts(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
653 if type(self.body) == type([]):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
654 return self.body
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
655
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
656 def getbody(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
657 return self.body
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
658
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
659
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
660 # Class implementing sets of integers.
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
661 #
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
662 # This is an efficient representation for sets consisting of several
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
663 # continuous ranges, e.g. 1-100,200-400,402-1000 is represented
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
664 # internally as a list of three pairs: [(1,100), (200,400),
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
665 # (402,1000)]. The internal representation is always kept normalized.
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
666 #
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
667 # The constructor has up to three arguments:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
668 # - the string used to initialize the set (default ''),
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
669 # - the separator between ranges (default ',')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
670 # - the separator between begin and end of a range (default '-')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
671 # The separators may be regular expressions and should be different.
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
672 #
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
673 # The tostring() function yields a string that can be passed to another
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
674 # IntSet constructor; __repr__() is a valid IntSet constructor itself.
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
675 #
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
676 # XXX The default begin/end separator means that negative numbers are
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
677 # not supported very well.
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
678 #
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
679 # XXX There are currently no operations to remove set elements.
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
680
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
681 class IntSet:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
682
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
683 def __init__(self, data = None, sep = ',', rng = '-'):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
684 self.pairs = []
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
685 self.sep = sep
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
686 self.rng = rng
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
687 if data: self.fromstring(data)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
688
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
689 def reset(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
690 self.pairs = []
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
691
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
692 def __cmp__(self, other):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
693 return cmp(self.pairs, other.pairs)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
694
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
695 def __hash__(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
696 return hash(self.pairs)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
697
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
698 def __repr__(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
699 return 'IntSet(%s, %s, %s)' % (`self.tostring()`,
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
700 `self.sep`, `self.rng`)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
701
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
702 def normalize(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
703 self.pairs.sort()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
704 i = 1
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
705 while i < len(self.pairs):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
706 alo, ahi = self.pairs[i-1]
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
707 blo, bhi = self.pairs[i]
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
708 if ahi >= blo-1:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
709 self.pairs[i-1:i+1] = [
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
710 (alo, max(ahi, bhi))]
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
711 else:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
712 i = i+1
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
713
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
714 def tostring(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
715 s = ''
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
716 for lo, hi in self.pairs:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
717 if lo == hi: t = `lo`
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
718 else: t = `lo` + self.rng + `hi`
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
719 if s: s = s + (self.sep + t)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
720 else: s = t
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
721 return s
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
722
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
723 def tolist(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
724 l = []
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
725 for lo, hi in self.pairs:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
726 m = range(lo, hi+1)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
727 l = l + m
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
728 return l
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
729
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
730 def fromlist(self, list):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
731 for i in list:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
732 self.append(i)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
733
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
734 def clone(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
735 new = IntSet()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
736 new.pairs = self.pairs[:]
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
737 return new
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
738
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
739 def min(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
740 return self.pairs[0][0]
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
741
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
742 def max(self):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
743 return self.pairs[-1][-1]
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
744
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
745 def contains(self, x):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
746 for lo, hi in self.pairs:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
747 if lo <= x <= hi: return 1
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
748 return 0
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
749
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
750 def append(self, x):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
751 for i in range(len(self.pairs)):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
752 lo, hi = self.pairs[i]
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
753 if x < lo: # Need to insert before
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
754 if x+1 == lo:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
755 self.pairs[i] = (x, hi)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
756 else:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
757 self.pairs.insert(i, (x, x))
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
758 if i > 0 and x-1 == self.pairs[i-1][1]:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
759 # Merge with previous
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
760 self.pairs[i-1:i+1] = [
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
761 (self.pairs[i-1][0],
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
762 self.pairs[i][1])
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
763 ]
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
764 return
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
765 if x <= hi: # Already in set
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
766 return
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
767 i = len(self.pairs) - 1
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
768 if i >= 0:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
769 lo, hi = self.pairs[i]
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
770 if x-1 == hi:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
771 self.pairs[i] = lo, x
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
772 return
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
773 self.pairs.append((x, x))
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
774
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
775 def addpair(self, xlo, xhi):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
776 if xlo > xhi: return
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
777 self.pairs.append((xlo, xhi))
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
778 self.normalize()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
779
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
780 def fromstring(self, data):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
781 import string, regsub
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
782 new = []
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
783 for part in regsub.split(data, self.sep):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
784 list = []
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
785 for subp in regsub.split(part, self.rng):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
786 s = string.strip(subp)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
787 list.append(string.atoi(s))
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
788 if len(list) == 1:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
789 new.append((list[0], list[0]))
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
790 elif len(list) == 2 and list[0] <= list[1]:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
791 new.append((list[0], list[1]))
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
792 else:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
793 raise ValueError, 'bad data passed to IntSet'
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
794 self.pairs = self.pairs + new
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
795 self.normalize()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
796
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
797
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
798 # Subroutines to read/write entries in .mh_profile and .mh_sequences
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
799
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
800 def pickline(file, key, casefold = 1):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
801 try:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
802 f = open(file, 'r')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
803 except IOError:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
804 return None
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
805 pat = key + ':'
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
806 if casefold:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
807 prog = regex.compile(pat, regex.casefold)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
808 else:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
809 prog = regex.compile(pat)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
810 while 1:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
811 line = f.readline()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
812 if not line: break
2246
1ab35b6f638a fix bogus test for regex match
Guido van Rossum <guido@python.org>
parents: 2050
diff changeset
813 if prog.match(line) >= 0:
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
814 text = line[len(key)+1:]
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
815 while 1:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
816 line = f.readline()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
817 if not line or \
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
818 line[0] not in string.whitespace:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
819 break
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
820 text = text + line
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
821 return string.strip(text)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
822 return None
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
823
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
824 def updateline(file, key, value, casefold = 1):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
825 try:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
826 f = open(file, 'r')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
827 lines = f.readlines()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
828 f.close()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
829 except IOError:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
830 lines = []
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
831 pat = key + ':\(.*\)\n'
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
832 if casefold:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
833 prog = regex.compile(pat, regex.casefold)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
834 else:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
835 prog = regex.compile(pat)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
836 if value is None:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
837 newline = None
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
838 else:
3632
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
839 newline = '%s: %s\n' % (key, value)
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
840 for i in range(len(lines)):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
841 line = lines[i]
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
842 if prog.match(line) == len(line):
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
843 if newline is None:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
844 del lines[i]
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
845 else:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
846 lines[i] = newline
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
847 break
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
848 else:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
849 if newline is not None:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
850 lines.append(newline)
3632
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
851 tempfile = file + "~"
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
852 f = open(tempfile, 'w')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
853 for line in lines:
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
854 f.write(line)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
855 f.close()
3632
44161fb04b7e added setcontext and parsesequence; several small fixes
Guido van Rossum <guido@python.org>
parents: 2246
diff changeset
856 os.rename(tempfile, file)
1681
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
857
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
858
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
859 # Test program
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
860
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
861 def test():
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
862 global mh, f
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
863 os.system('rm -rf $HOME/Mail/@test')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
864 mh = MH()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
865 def do(s): print s; print eval(s)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
866 do('mh.listfolders()')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
867 do('mh.listallfolders()')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
868 testfolders = ['@test', '@test/test1', '@test/test2',
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
869 '@test/test1/test11', '@test/test1/test12',
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
870 '@test/test1/test11/test111']
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
871 for t in testfolders: do('mh.makefolder(%s)' % `t`)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
872 do('mh.listsubfolders(\'@test\')')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
873 do('mh.listallsubfolders(\'@test\')')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
874 f = mh.openfolder('@test')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
875 do('f.listsubfolders()')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
876 do('f.listallsubfolders()')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
877 do('f.getsequences()')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
878 seqs = f.getsequences()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
879 seqs['foo'] = IntSet('1-10 12-20', ' ').tolist()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
880 print seqs
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
881 f.putsequences(seqs)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
882 do('f.getsequences()')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
883 testfolders.reverse()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
884 for t in testfolders: do('mh.deletefolder(%s)' % `t`)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
885 do('mh.getcontext()')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
886 context = mh.getcontext()
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
887 f = mh.openfolder(context)
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
888 do('f.listmessages()')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
889 do('f.getcurrent()')
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
890
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
891
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
892 if __name__ == '__main__':
dc8e1d72d78d mhlib.py: new interface to MH folders and messages
Guido van Rossum <guido@python.org>
parents:
diff changeset
893 test()