[Python-checkins] CVS: python/dist/src/Lib mailbox.py,1.19,1.20 shlex.py,1.8,1.9
Fred L. Drake
python-dev@python.org
Sun, 9 Jul 2000 09:44:29 -0700
Update of /cvsroot/python/python/dist/src/Lib
In directory slayer.i.sourceforge.net:/tmp/cvs-serv26713
Modified Files:
mailbox.py shlex.py
Log Message:
Make tabnanny happy.
mailbox.py: Convert to 4-space indents.
Index: mailbox.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/mailbox.py,v
retrieving revision 1.19
retrieving revision 1.20
diff -C2 -r1.19 -r1.20
*** mailbox.py 2000/04/04 03:31:39 1.19
--- mailbox.py 2000/07/09 16:44:26 1.20
***************
*** 8,279 ****
class _Mailbox:
! def __init__(self, fp):
! self.fp = fp
! self.seekp = 0
!
! def seek(self, pos, whence=0):
! if whence==1: # Relative to current position
! self.pos = self.pos + pos
! if whence==2: # Relative to file's end
! self.pos = self.stop + pos
! else: # Default - absolute position
! self.pos = self.start + pos
!
! def next(self):
! while 1:
! self.fp.seek(self.seekp)
! try:
! self._search_start()
! except EOFError:
! self.seekp = self.fp.tell()
! return None
! start = self.fp.tell()
! self._search_end()
! self.seekp = stop = self.fp.tell()
! if start <> stop:
! break
! return rfc822.Message(_Subfile(self.fp, start, stop))
class _Subfile:
! def __init__(self, fp, start, stop):
! self.fp = fp
! self.start = start
! self.stop = stop
! self.pos = self.start
!
! def read(self, length = None):
! if self.pos >= self.stop:
! return ''
! remaining = self.stop - self.pos
! if length is None or length < 0:
! length = remaining
! elif length > remaining:
! length = remaining
! self.fp.seek(self.pos)
! data = self.fp.read(length)
! self.pos = self.fp.tell()
! return data
!
! def readline(self, length = None):
! if self.pos >= self.stop:
! return ''
! if length is None:
! length = self.stop - self.pos
! self.fp.seek(self.pos)
! data = self.fp.readline(length)
! self.pos = self.fp.tell()
! return data
!
! def readlines(self, sizehint = -1):
! lines = []
! while 1:
! line = self.readline()
! if not line:
! break
! lines.append(line)
! if sizehint >= 0:
! sizehint = sizehint - len(line)
! if sizehint <= 0:
! break
! return lines
!
! def tell(self):
! return self.pos - self.start
!
! def seek(self, pos, whence=0):
! if whence == 0:
! self.pos = self.start + pos
! elif whence == 1:
! self.pos = self.pos + pos
! elif whence == 2:
! self.pos = self.stop + pos
! def close(self):
! del self.fp
class UnixMailbox(_Mailbox):
! def _search_start(self):
! while 1:
! pos = self.fp.tell()
! line = self.fp.readline()
! if not line:
! raise EOFError
! if line[:5] == 'From ' and self._isrealfromline(line):
! self.fp.seek(pos)
! return
!
! def _search_end(self):
! self.fp.readline() # Throw away header line
! while 1:
! pos = self.fp.tell()
! line = self.fp.readline()
! if not line:
! return
! if line[:5] == 'From ' and self._isrealfromline(line):
! self.fp.seek(pos)
! return
!
! # An overridable mechanism to test for From-line-ness.
! # You can either specify a different regular expression
! # or define a whole new _isrealfromline() method.
! # Note that this only gets called for lines starting with
! # the 5 characters "From ".
!
! _fromlinepattern = r"From \s*[^\s]+\s+\w\w\w\s+\w\w\w\s+\d?\d\s+" \
! r"\d?\d:\d\d(:\d\d)?(\s+[^\s]+)?\s+\d\d\d\d\s*$"
! _regexp = None
!
! def _isrealfromline(self, line):
! if not self._regexp:
! import re
! self._regexp = re.compile(self._fromlinepattern)
! return self._regexp.match(line)
class MmdfMailbox(_Mailbox):
- def _search_start(self):
- while 1:
- line = self.fp.readline()
- if not line:
- raise EOFError
- if line[:5] == '\001\001\001\001\n':
- return
-
- def _search_end(self):
- while 1:
- pos = self.fp.tell()
- line = self.fp.readline()
- if not line:
- return
- if line == '\001\001\001\001\n':
- self.fp.seek(pos)
- return
class MHMailbox:
- def __init__(self, dirname):
- import re
- pat = re.compile('^[0-9][0-9]*$')
- self.dirname = dirname
- files = os.listdir(self.dirname)
- self.boxes = []
- for f in files:
- if pat.match(f):
- self.boxes.append(f)
-
- def next(self):
- if not self.boxes:
- return None
- fn = self.boxes[0]
- del self.boxes[0]
- fp = open(os.path.join(self.dirname, fn))
- return rfc822.Message(fp)
class Maildir:
! # Qmail directory mailbox
- def __init__(self, dirname):
- import string
- self.dirname = dirname
- self.boxes = []
-
- # check for new mail
- newdir = os.path.join(self.dirname, 'new')
- for file in os.listdir(newdir):
- if len(string.split(file, '.')) > 2:
- self.boxes.append(os.path.join(newdir, file))
-
- # Now check for current mail in this maildir
- curdir = os.path.join(self.dirname, 'cur')
- for file in os.listdir(curdir):
- if len(string.split(file, '.')) > 2:
- self.boxes.append(os.path.join(curdir, file))
-
- def next(self):
- if not self.boxes:
- return None
- fn = self.boxes[0]
- del self.boxes[0]
- fp = open(os.path.join(self.dirname, fn))
- return rfc822.Message(fp)
class BabylMailbox(_Mailbox):
! def _search_start(self):
! while 1:
! line = self.fp.readline()
! if not line:
! raise EOFError
! if line == '*** EOOH ***\n':
! return
!
! def _search_end(self):
! while 1:
! pos = self.fp.tell()
! line = self.fp.readline()
! if not line:
! return
! if line == '\037\014\n':
! self.fp.seek(pos)
! return
def _test():
! import time
! import sys
! import string
! import os
!
! args = sys.argv[1:]
! if not args:
! for key in 'MAILDIR', 'MAIL', 'LOGNAME', 'USER':
! if os.environ.has_key(key):
! mbox = os.environ[key]
! break
! else:
! print "$MAIL, $LOGNAME nor $USER set -- who are you?"
! return
else:
! mbox = args[0]
! if mbox[:1] == '+':
! mbox = os.environ['HOME'] + '/Mail/' + mbox[1:]
! elif not '/' in mbox:
! mbox = '/usr/mail/' + mbox
! if os.path.isdir(mbox):
! if os.path.isdir(os.path.join(mbox, 'cur')):
! mb = Maildir(mbox)
! else:
! mb = MHMailbox(mbox)
! else:
! fp = open(mbox, 'r')
! mb = UnixMailbox(fp)
!
! msgs = []
! while 1:
! msg = mb.next()
! if msg is None:
! break
! msgs.append(msg)
! if len(args) <= 1:
! msg.fp = None
! if len(args) > 1:
! num = string.atoi(args[1])
! print 'Message %d body:'%num
! msg = msgs[num-1]
! msg.rewindbody()
! sys.stdout.write(msg.fp.read())
else:
! print 'Mailbox',mbox,'has',len(msgs),'messages:'
! for msg in msgs:
! f = msg.getheader('from') or ""
! s = msg.getheader('subject') or ""
! d = msg.getheader('date') or ""
! print '%20.20s %18.18s %-30.30s'%(f, d[5:], s)
if __name__ == '__main__':
! _test()
--- 8,278 ----
class _Mailbox:
+ def __init__(self, fp):
+ self.fp = fp
+ self.seekp = 0
+
+ def seek(self, pos, whence=0):
+ if whence==1: # Relative to current position
+ self.pos = self.pos + pos
+ if whence==2: # Relative to file's end
+ self.pos = self.stop + pos
+ else: # Default - absolute position
+ self.pos = self.start + pos
! def next(self):
! while 1:
! self.fp.seek(self.seekp)
! try:
! self._search_start()
! except EOFError:
! self.seekp = self.fp.tell()
! return None
! start = self.fp.tell()
! self._search_end()
! self.seekp = stop = self.fp.tell()
! if start <> stop:
! break
! return rfc822.Message(_Subfile(self.fp, start, stop))
!
class _Subfile:
+ def __init__(self, fp, start, stop):
+ self.fp = fp
+ self.start = start
+ self.stop = stop
+ self.pos = self.start
+
+ def read(self, length = None):
+ if self.pos >= self.stop:
+ return ''
+ remaining = self.stop - self.pos
+ if length is None or length < 0:
+ length = remaining
+ elif length > remaining:
+ length = remaining
+ self.fp.seek(self.pos)
+ data = self.fp.read(length)
+ self.pos = self.fp.tell()
+ return data
+
+ def readline(self, length = None):
+ if self.pos >= self.stop:
+ return ''
+ if length is None:
+ length = self.stop - self.pos
+ self.fp.seek(self.pos)
+ data = self.fp.readline(length)
+ self.pos = self.fp.tell()
+ return data
! def readlines(self, sizehint = -1):
! lines = []
! while 1:
! line = self.readline()
! if not line:
! break
! lines.append(line)
! if sizehint >= 0:
! sizehint = sizehint - len(line)
! if sizehint <= 0:
! break
! return lines
!
! def tell(self):
! return self.pos - self.start
!
! def seek(self, pos, whence=0):
! if whence == 0:
! self.pos = self.start + pos
! elif whence == 1:
! self.pos = self.pos + pos
! elif whence == 2:
! self.pos = self.stop + pos
! def close(self):
! del self.fp
+
class UnixMailbox(_Mailbox):
+ def _search_start(self):
+ while 1:
+ pos = self.fp.tell()
+ line = self.fp.readline()
+ if not line:
+ raise EOFError
+ if line[:5] == 'From ' and self._isrealfromline(line):
+ self.fp.seek(pos)
+ return
! def _search_end(self):
! self.fp.readline() # Throw away header line
! while 1:
! pos = self.fp.tell()
! line = self.fp.readline()
! if not line:
! return
! if line[:5] == 'From ' and self._isrealfromline(line):
! self.fp.seek(pos)
! return
!
! # An overridable mechanism to test for From-line-ness.
! # You can either specify a different regular expression
! # or define a whole new _isrealfromline() method.
! # Note that this only gets called for lines starting with
! # the 5 characters "From ".
!
! _fromlinepattern = r"From \s*[^\s]+\s+\w\w\w\s+\w\w\w\s+\d?\d\s+" \
! r"\d?\d:\d\d(:\d\d)?(\s+[^\s]+)?\s+\d\d\d\d\s*$"
! _regexp = None
!
! def _isrealfromline(self, line):
! if not self._regexp:
! import re
! self._regexp = re.compile(self._fromlinepattern)
! return self._regexp.match(line)
!
class MmdfMailbox(_Mailbox):
+ def _search_start(self):
+ while 1:
+ line = self.fp.readline()
+ if not line:
+ raise EOFError
+ if line[:5] == '\001\001\001\001\n':
+ return
+
+ def _search_end(self):
+ while 1:
+ pos = self.fp.tell()
+ line = self.fp.readline()
+ if not line:
+ return
+ if line == '\001\001\001\001\n':
+ self.fp.seek(pos)
+ return
class MHMailbox:
+ def __init__(self, dirname):
+ import re
+ pat = re.compile('^[0-9][0-9]*$')
+ self.dirname = dirname
+ files = os.listdir(self.dirname)
+ self.boxes = []
+ for f in files:
+ if pat.match(f):
+ self.boxes.append(f)
+
+ def next(self):
+ if not self.boxes:
+ return None
+ fn = self.boxes[0]
+ del self.boxes[0]
+ fp = open(os.path.join(self.dirname, fn))
+ return rfc822.Message(fp)
class Maildir:
+ # Qmail directory mailbox
+
+ def __init__(self, dirname):
+ import string
+ self.dirname = dirname
+ self.boxes = []
! # check for new mail
! newdir = os.path.join(self.dirname, 'new')
! for file in os.listdir(newdir):
! if len(string.split(file, '.')) > 2:
! self.boxes.append(os.path.join(newdir, file))
!
! # Now check for current mail in this maildir
! curdir = os.path.join(self.dirname, 'cur')
! for file in os.listdir(curdir):
! if len(string.split(file, '.')) > 2:
! self.boxes.append(os.path.join(curdir, file))
!
! def next(self):
! if not self.boxes:
! return None
! fn = self.boxes[0]
! del self.boxes[0]
! fp = open(os.path.join(self.dirname, fn))
! return rfc822.Message(fp)
class BabylMailbox(_Mailbox):
+ def _search_start(self):
+ while 1:
+ line = self.fp.readline()
+ if not line:
+ raise EOFError
+ if line == '*** EOOH ***\n':
+ return
! def _search_end(self):
! while 1:
! pos = self.fp.tell()
! line = self.fp.readline()
! if not line:
! return
! if line == '\037\014\n':
! self.fp.seek(pos)
! return
def _test():
! import time
! import sys
! import string
! import os
!
! args = sys.argv[1:]
! if not args:
! for key in 'MAILDIR', 'MAIL', 'LOGNAME', 'USER':
! if os.environ.has_key(key):
! mbox = os.environ[key]
! break
else:
! print "$MAIL, $LOGNAME nor $USER set -- who are you?"
! return
! else:
! mbox = args[0]
! if mbox[:1] == '+':
! mbox = os.environ['HOME'] + '/Mail/' + mbox[1:]
! elif not '/' in mbox:
! mbox = '/usr/mail/' + mbox
! if os.path.isdir(mbox):
! if os.path.isdir(os.path.join(mbox, 'cur')):
! mb = Maildir(mbox)
else:
! mb = MHMailbox(mbox)
! else:
! fp = open(mbox, 'r')
! mb = UnixMailbox(fp)
!
! msgs = []
! while 1:
! msg = mb.next()
! if msg is None:
! break
! msgs.append(msg)
! if len(args) <= 1:
! msg.fp = None
! if len(args) > 1:
! num = string.atoi(args[1])
! print 'Message %d body:'%num
! msg = msgs[num-1]
! msg.rewindbody()
! sys.stdout.write(msg.fp.read())
! else:
! print 'Mailbox',mbox,'has',len(msgs),'messages:'
! for msg in msgs:
! f = msg.getheader('from') or ""
! s = msg.getheader('subject') or ""
! d = msg.getheader('date') or ""
! print '%20.20s %18.18s %-30.30s'%(f, d[5:], s)
if __name__ == '__main__':
! _test()
Index: shlex.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/shlex.py,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -r1.8 -r1.9
*** shlex.py 2000/07/03 09:56:23 1.8
--- shlex.py 2000/07/09 16:44:26 1.9
***************
*** 18,22 ****
self.infile = None
self.commenters = '#'
! self.wordchars = 'abcdfeghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'
self.whitespace = ' \t\r\n'
self.quotes = '\'"'
--- 18,23 ----
self.infile = None
self.commenters = '#'
! self.wordchars = ('abcdfeghijklmnopqrstuvwxyz'
! 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_')
self.whitespace = ' \t\r\n'
self.quotes = '\'"'
***************
*** 26,30 ****
self.debug = 0
self.token = ''
! self.filestack = []
self.source = None
if self.debug:
--- 27,31 ----
self.debug = 0
self.token = ''
! self.filestack = []
self.source = None
if self.debug:
***************
*** 46,50 ****
print "shlex: popping token " + `tok`
return tok
! # No pushback. Get a token.
raw = self.read_token()
# Handle inclusions
--- 47,51 ----
print "shlex: popping token " + `tok`
return tok
! # No pushback. Get a token.
raw = self.read_token()
# Handle inclusions
***************
*** 89,98 ****
print "shlex: in state", repr(self.state), \
"I see character:", repr(nextchar)
! if self.state == None:
! self.token = ''; # past end of file
break
elif self.state == ' ':
if not nextchar:
! self.state = None; # end of file
break
elif nextchar in self.whitespace:
--- 90,99 ----
print "shlex: in state", repr(self.state), \
"I see character:", repr(nextchar)
! if self.state is None:
! self.token = ''; # past end of file
break
elif self.state == ' ':
if not nextchar:
! self.state = None; # end of file
break
elif nextchar in self.whitespace:
***************
*** 100,104 ****
print "shlex: I see whitespace in whitespace state"
if self.token:
! break # emit current token
else:
continue
--- 101,105 ----
print "shlex: I see whitespace in whitespace state"
if self.token:
! break # emit current token
else:
continue
***************
*** 115,119 ****
self.token = nextchar
if self.token:
! break # emit current token
else:
continue
--- 116,120 ----
self.token = nextchar
if self.token:
! break # emit current token
else:
continue
***************
*** 125,129 ****
elif self.state == 'a':
if not nextchar:
! self.state = None; # end of file
break
elif nextchar in self.whitespace:
--- 126,130 ----
elif self.state == 'a':
if not nextchar:
! self.state = None; # end of file
break
elif nextchar in self.whitespace:
***************
*** 132,136 ****
self.state = ' '
if self.token:
! break # emit current token
else:
continue
--- 133,137 ----
self.state = ' '
if self.token:
! break # emit current token
else:
continue
***************
*** 146,150 ****
self.state = ' '
if self.token:
! break # emit current token
else:
continue
--- 147,151 ----
self.state = ' '
if self.token:
! break # emit current token
else:
continue