annotate Lib/mailbox.py @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents 5454fe4925d3
children 24da035ceb6e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4573
73758db2f464 /usr/local/bin/python -> /usr/bin/env python
Guido van Rossum <guido@python.org>
parents: 4316
diff changeset
1 #! /usr/bin/env python
4316
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
2
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
3 """Classes to handle Unix style, MMDF style, and MH style mailboxes."""
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
4
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
5
1596
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 import rfc822
3230
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
7 import os
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
8 import regex
1596
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
9
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 class _Mailbox:
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 def __init__(self, fp):
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 self.fp = fp
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 self.seekp = 0
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
14
3360
e0ef009b2702 support 'whence' arg to seek()
Guido van Rossum <guido@python.org>
parents: 3230
diff changeset
15 def seek(self, pos, whence=0):
e0ef009b2702 support 'whence' arg to seek()
Guido van Rossum <guido@python.org>
parents: 3230
diff changeset
16 if whence==1: # Relative to current position
e0ef009b2702 support 'whence' arg to seek()
Guido van Rossum <guido@python.org>
parents: 3230
diff changeset
17 self.pos = self.pos + pos
e0ef009b2702 support 'whence' arg to seek()
Guido van Rossum <guido@python.org>
parents: 3230
diff changeset
18 if whence==2: # Relative to file's end
e0ef009b2702 support 'whence' arg to seek()
Guido van Rossum <guido@python.org>
parents: 3230
diff changeset
19 self.pos = self.stop + pos
e0ef009b2702 support 'whence' arg to seek()
Guido van Rossum <guido@python.org>
parents: 3230
diff changeset
20 else: # Default - absolute position
e0ef009b2702 support 'whence' arg to seek()
Guido van Rossum <guido@python.org>
parents: 3230
diff changeset
21 self.pos = self.start + pos
1596
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
22
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 def next(self):
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 while 1:
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 self.fp.seek(self.seekp)
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 try:
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 self._search_start()
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 except EOFError:
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 self.seekp = self.fp.tell()
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 return None
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 start = self.fp.tell()
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 self._search_end()
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 self.seekp = stop = self.fp.tell()
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 if start <> stop:
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 break
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 return rfc822.Message(_Subfile(self.fp, start, stop))
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
37
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 class _Subfile:
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 def __init__(self, fp, start, stop):
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 self.fp = fp
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 self.start = start
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 self.stop = stop
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 self.pos = self.start
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
44
1618
7f891f32864c Changes to use default argument values where possible
Guido van Rossum <guido@python.org>
parents: 1596
diff changeset
45 def read(self, length = None):
1596
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 if self.pos >= self.stop:
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 return ''
1618
7f891f32864c Changes to use default argument values where possible
Guido van Rossum <guido@python.org>
parents: 1596
diff changeset
48 if length is None:
1596
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 length = self.stop - self.pos
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 self.fp.seek(self.pos)
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 self.pos = self.pos + length
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 return self.fp.read(length)
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
53
1618
7f891f32864c Changes to use default argument values where possible
Guido van Rossum <guido@python.org>
parents: 1596
diff changeset
54 def readline(self, length = None):
1596
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 if self.pos >= self.stop:
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 return ''
1618
7f891f32864c Changes to use default argument values where possible
Guido van Rossum <guido@python.org>
parents: 1596
diff changeset
57 if length is None:
1596
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 length = self.stop - self.pos
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 self.fp.seek(self.pos)
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 data = self.fp.readline(length)
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 if len(data) < length:
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 length = len(data)
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 self.pos = self.pos + length
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 return data
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
65
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 def tell(self):
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 return self.pos - self.start
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
68
3230
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
69 def seek(self, pos, whence=0):
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
70 if whence == 0:
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
71 self.pos = self.start + pos
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
72 elif whence == 1:
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
73 self.pos = self.pos + pos
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
74 elif whence == 2:
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
75 self.pos = self.stop + pos
1596
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
76
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 def close(self):
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
78 pass
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
79
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
80 class UnixMailbox(_Mailbox):
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
81 def _search_start(self):
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
82 while 1:
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
83 line = self.fp.readline()
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
84 if not line:
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
85 raise EOFError
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
86 if line[:5] == 'From ':
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
87 return
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
88
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
89 def _search_end(self):
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
90 while 1:
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
91 pos = self.fp.tell()
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
92 line = self.fp.readline()
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
93 if not line:
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
94 return
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
95 if line[:5] == 'From ':
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
96 self.fp.seek(pos)
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
97 return
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
98
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
99 class MmdfMailbox(_Mailbox):
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
100 def _search_start(self):
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
101 while 1:
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
102 line = self.fp.readline()
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
103 if not line:
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
104 raise EOFError
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
105 if line[:5] == '\001\001\001\001\n':
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
106 return
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
107
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
108 def _search_end(self):
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
109 while 1:
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
110 pos = self.fp.tell()
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
111 line = self.fp.readline()
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
112 if not line:
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
113 return
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
114 if line == '\001\001\001\001\n':
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
115 self.fp.seek(pos)
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
116 return
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
117
3230
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
118 class MHMailbox:
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
119 def __init__(self, dirname):
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
120 pat = regex.compile('^[0-9][0-9]*$')
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
121 self.dirname = dirname
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
122 files = os.listdir(self.dirname)
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
123 self.boxes = []
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
124 for f in files:
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
125 if pat.match(f) == len(f):
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
126 self.boxes.append(f)
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
127
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
128 def next(self):
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
129 if not self.boxes:
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
130 return None
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
131 fn = self.boxes[0]
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
132 del self.boxes[0]
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
133 fp = open(os.path.join(self.dirname, fn))
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
134 return rfc822.Message(fp)
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
135
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
136
5531
5454fe4925d3 Added BabylMailbox class by Fred Lundh (untested).
Guido van Rossum <guido@python.org>
parents: 5443
diff changeset
137 class BabylMailbox(_Mailbox):
5454fe4925d3 Added BabylMailbox class by Fred Lundh (untested).
Guido van Rossum <guido@python.org>
parents: 5443
diff changeset
138 def _search_start(self):
5454fe4925d3 Added BabylMailbox class by Fred Lundh (untested).
Guido van Rossum <guido@python.org>
parents: 5443
diff changeset
139 while 1:
5454fe4925d3 Added BabylMailbox class by Fred Lundh (untested).
Guido van Rossum <guido@python.org>
parents: 5443
diff changeset
140 line = self.fp.readline()
5454fe4925d3 Added BabylMailbox class by Fred Lundh (untested).
Guido van Rossum <guido@python.org>
parents: 5443
diff changeset
141 if not line:
5454fe4925d3 Added BabylMailbox class by Fred Lundh (untested).
Guido van Rossum <guido@python.org>
parents: 5443
diff changeset
142 raise EOFError
5454fe4925d3 Added BabylMailbox class by Fred Lundh (untested).
Guido van Rossum <guido@python.org>
parents: 5443
diff changeset
143 if line == '*** EOOH ***\n':
5454fe4925d3 Added BabylMailbox class by Fred Lundh (untested).
Guido van Rossum <guido@python.org>
parents: 5443
diff changeset
144 return
5454fe4925d3 Added BabylMailbox class by Fred Lundh (untested).
Guido van Rossum <guido@python.org>
parents: 5443
diff changeset
145
5454fe4925d3 Added BabylMailbox class by Fred Lundh (untested).
Guido van Rossum <guido@python.org>
parents: 5443
diff changeset
146 def _search_end(self):
5454fe4925d3 Added BabylMailbox class by Fred Lundh (untested).
Guido van Rossum <guido@python.org>
parents: 5443
diff changeset
147 while 1:
5454fe4925d3 Added BabylMailbox class by Fred Lundh (untested).
Guido van Rossum <guido@python.org>
parents: 5443
diff changeset
148 pos = self.fp.tell()
5454fe4925d3 Added BabylMailbox class by Fred Lundh (untested).
Guido van Rossum <guido@python.org>
parents: 5443
diff changeset
149 line = self.fp.readline()
5454fe4925d3 Added BabylMailbox class by Fred Lundh (untested).
Guido van Rossum <guido@python.org>
parents: 5443
diff changeset
150 if not line:
5454fe4925d3 Added BabylMailbox class by Fred Lundh (untested).
Guido van Rossum <guido@python.org>
parents: 5443
diff changeset
151 return
5454fe4925d3 Added BabylMailbox class by Fred Lundh (untested).
Guido van Rossum <guido@python.org>
parents: 5443
diff changeset
152 if line == '\037\014\n':
5454fe4925d3 Added BabylMailbox class by Fred Lundh (untested).
Guido van Rossum <guido@python.org>
parents: 5443
diff changeset
153 self.fp.seek(pos)
5454fe4925d3 Added BabylMailbox class by Fred Lundh (untested).
Guido van Rossum <guido@python.org>
parents: 5443
diff changeset
154 return
5454fe4925d3 Added BabylMailbox class by Fred Lundh (untested).
Guido van Rossum <guido@python.org>
parents: 5443
diff changeset
155
5454fe4925d3 Added BabylMailbox class by Fred Lundh (untested).
Guido van Rossum <guido@python.org>
parents: 5443
diff changeset
156
4316
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
157 def _test():
1596
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
158 import time
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
159 import sys
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
160 import string
4316
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
161 import os
3230
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
162
4316
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
163 args = sys.argv[1:]
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
164 if not args:
5443
8868e9f13657 Improve getting the mailbox from the environment.
Guido van Rossum <guido@python.org>
parents: 4573
diff changeset
165 for key in 'MAIL', 'LOGNAME', 'USER':
8868e9f13657 Improve getting the mailbox from the environment.
Guido van Rossum <guido@python.org>
parents: 4573
diff changeset
166 if os.environ.has_key(key):
8868e9f13657 Improve getting the mailbox from the environment.
Guido van Rossum <guido@python.org>
parents: 4573
diff changeset
167 mbox = os.environ[key]
8868e9f13657 Improve getting the mailbox from the environment.
Guido van Rossum <guido@python.org>
parents: 4573
diff changeset
168 break
4316
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
169 else:
5443
8868e9f13657 Improve getting the mailbox from the environment.
Guido van Rossum <guido@python.org>
parents: 4573
diff changeset
170 print "$MAIL, $LOGNAME nor $USER set -- who are you?"
4316
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
171 return
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
172 else:
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
173 mbox = args[0]
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
174 if mbox[:1] == '+':
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
175 mbox = os.environ['HOME'] + '/Mail/' + mbox[1:]
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
176 elif not '/' in mbox:
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
177 mbox = '/usr/mail/' + mbox
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
178 if os.path.isdir(mbox):
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
179 mb = MHMailbox(mbox)
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
180 else:
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
181 fp = open(mbox, 'r')
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
182 mb = UnixMailbox(fp)
3230
118c063df453 Added class MHMailbox
Jack Jansen <jack.jansen@cwi.nl>
parents: 1618
diff changeset
183
1596
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
184 msgs = []
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
185 while 1:
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
186 msg = mb.next()
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
187 if not msg:
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
188 break
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
189 msgs.append(msg)
4316
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
190 if len(args) > 1:
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
191 num = string.atoi(args[1])
1596
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
192 print 'Message %d body:'%num
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
193 msg = msgs[num-1]
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
194 msg.rewindbody()
2197dd241d8d Jack's module for parsing UNIX mailbox files
Guido van Rossum <guido@python.org>
parents:
diff changeset
195 sys.stdout.write(msg.fp.read())
4316
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
196 else:
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
197 print 'Mailbox',mbox,'has',len(msgs),'messages:'
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
198 for msg in msgs:
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
199 f = msg.getheader('from')
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
200 s = msg.getheader('subject')
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
201 d = (msg.getheader('date'))
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
202 print '%20.20s %18.18s %-30.30s'%(f, d[5:], s)
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
203
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
204
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
205 if __name__ == '__main__':
772828c1b1f6 Revamped test case and updated doc string.
Guido van Rossum <guido@python.org>
parents: 3360
diff changeset
206 _test()