[Python-checkins] CVS: python/dist/src/Lib httplib.py,1.13,1.14 mailbox.py,1.17,1.18 mimetypes.py,1.10,1.11 rfc822.py,1.45,1.46 shelve.py,1.12,1.13 stringold.py,1.43,1.44 urllib2.py,1.2,1.3 whichdb.py,1.5,1.6
Fred L. Drake
fdrake@weyr.cnri.reston.va.us
Thu, 10 Feb 2000 12:17:17 -0500 (EST)
Update of /projects/cvsroot/python/dist/src/Lib
In directory weyr:/home/fdrake/projects/python/Lib
Modified Files:
httplib.py mailbox.py mimetypes.py rfc822.py shelve.py
stringold.py urllib2.py whichdb.py
Log Message:
Untabify to pass the -tt test.
Index: httplib.py
===================================================================
RCS file: /projects/cvsroot/python/dist/src/Lib/httplib.py,v
retrieving revision 1.13
retrieving revision 1.14
diff -C2 -r1.13 -r1.14
*** httplib.py 1999/12/07 21:35:20 1.13
--- httplib.py 2000/02/10 17:17:13 1.14
***************
*** 45,69 ****
class FakeSocket:
def __init__(self, sock, ssl):
! self.__sock = sock
! self.__ssl = ssl
! return
! def makefile(self, mode): # hopefully, never have to write
! msgbuf = ""
! while 1:
! try:
! msgbuf = msgbuf + self.__ssl.read()
! except socket.sslerror, msg:
! break
! return StringIO(msgbuf)
def send(self, stuff, flags = 0):
! return self.__ssl.write(stuff)
def recv(self, len = 1024, flags = 0):
! return self.__ssl.read(len)
def __getattr__(self, attr):
! return getattr(self.__sock, attr)
class HTTP:
--- 45,69 ----
class FakeSocket:
def __init__(self, sock, ssl):
! self.__sock = sock
! self.__ssl = ssl
! return
! def makefile(self, mode): # hopefully, never have to write
! msgbuf = ""
! while 1:
! try:
! msgbuf = msgbuf + self.__ssl.read()
! except socket.sslerror, msg:
! break
! return StringIO(msgbuf)
def send(self, stuff, flags = 0):
! return self.__ssl.write(stuff)
def recv(self, len = 1024, flags = 0):
! return self.__ssl.read(len)
def __getattr__(self, attr):
! return getattr(self.__sock, attr)
class HTTP:
Index: mailbox.py
===================================================================
RCS file: /projects/cvsroot/python/dist/src/Lib/mailbox.py,v
retrieving revision 1.17
retrieving revision 1.18
diff -C2 -r1.17 -r1.18
*** mailbox.py 1999/12/14 22:18:37 1.17
--- mailbox.py 2000/02/10 17:17:13 1.18
***************
*** 9,276 ****
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:
! line = self.fp.readline()
! if not line:
! raise EOFError
! if line[:5] == 'From ' and self._isrealfromline(line):
! return
!
! def _search_end(self):
! 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()
--- 9,276 ----
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:
! line = self.fp.readline()
! if not line:
! raise EOFError
! if line[:5] == 'From ' and self._isrealfromline(line):
! return
!
! def _search_end(self):
! 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: mimetypes.py
===================================================================
RCS file: /projects/cvsroot/python/dist/src/Lib/mimetypes.py,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -r1.10 -r1.11
*** mimetypes.py 1999/05/20 12:52:04 1.10
--- mimetypes.py 2000/02/10 17:17:13 1.11
***************
*** 31,36 ****
"/usr/local/etc/httpd/conf/mime.types",
"/usr/local/lib/netscape/mime.types",
! "/usr/local/etc/httpd/conf/mime.types", # Apache 1.2
! "/usr/local/etc/mime.types", # Apache 1.3
]
--- 31,36 ----
"/usr/local/etc/httpd/conf/mime.types",
"/usr/local/lib/netscape/mime.types",
! "/usr/local/etc/httpd/conf/mime.types", # Apache 1.2
! "/usr/local/etc/mime.types", # Apache 1.3
]
***************
*** 57,78 ****
scheme, url = urllib.splittype(url)
if scheme == 'data':
! # syntax of data URLs:
! # dataurl := "data:" [ mediatype ] [ ";base64" ] "," data
! # mediatype := [ type "/" subtype ] *( ";" parameter )
! # data := *urlchar
! # parameter := attribute "=" value
! # type/subtype defaults to "text/plain"
! comma = string.find(url, ',')
! if comma < 0:
! # bad data URL
! return None, None
! semi = string.find(url, ';', 0, comma)
! if semi >= 0:
! type = url[:semi]
! else:
! type = url[:comma]
! if '=' in type or '/' not in type:
! type = 'text/plain'
! return type, None # never compressed, so encoding is None
base, ext = posixpath.splitext(url)
while suffix_map.has_key(ext):
--- 57,78 ----
scheme, url = urllib.splittype(url)
if scheme == 'data':
! # syntax of data URLs:
! # dataurl := "data:" [ mediatype ] [ ";base64" ] "," data
! # mediatype := [ type "/" subtype ] *( ";" parameter )
! # data := *urlchar
! # parameter := attribute "=" value
! # type/subtype defaults to "text/plain"
! comma = string.find(url, ',')
! if comma < 0:
! # bad data URL
! return None, None
! semi = string.find(url, ';', 0, comma)
! if semi >= 0:
! type = url[:semi]
! else:
! type = url[:comma]
! if '=' in type or '/' not in type:
! type = 'text/plain'
! return type, None # never compressed, so encoding is None
base, ext = posixpath.splitext(url)
while suffix_map.has_key(ext):
Index: rfc822.py
===================================================================
RCS file: /projects/cvsroot/python/dist/src/Lib/rfc822.py,v
retrieving revision 1.45
retrieving revision 1.46
diff -C2 -r1.45 -r1.46
*** rfc822.py 2000/01/17 14:11:04 1.45
--- rfc822.py 2000/02/10 17:17:14 1.46
***************
*** 333,341 ****
raw = []
for h in self.getallmatchingheaders(name):
! if h[0] in ' \t':
! raw.append(h)
! else:
! if raw:
! raw.append(', ')
i = string.find(h, ':')
if i > 0:
--- 333,341 ----
raw = []
for h in self.getallmatchingheaders(name):
! if h[0] in ' \t':
! raw.append(h)
! else:
! if raw:
! raw.append(', ')
i = string.find(h, ':')
if i > 0:
***************
*** 787,791 ****
_monthnames = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul',
'aug', 'sep', 'oct', 'nov', 'dec',
! 'january', 'february', 'march', 'april', 'may', 'june', 'july',
'august', 'september', 'october', 'november', 'december']
_daynames = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun']
--- 787,791 ----
_monthnames = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul',
'aug', 'sep', 'oct', 'nov', 'dec',
! 'january', 'february', 'march', 'april', 'may', 'june', 'july',
'august', 'september', 'october', 'november', 'december']
_daynames = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun']
***************
*** 838,851 ****
if mm > 12: mm = mm - 12
if dd[-1] == ',':
! dd = dd[:-1]
i = string.find(yy, ':')
if i > 0:
! yy, tm = tm, yy
if yy[-1] == ',':
! yy = yy[:-1]
if yy[0] not in string.digits:
! yy, tz = tz, yy
if tm[-1] == ',':
! tm = tm[:-1]
tm = string.splitfields(tm, ':')
if len(tm) == 2:
--- 838,851 ----
if mm > 12: mm = mm - 12
if dd[-1] == ',':
! dd = dd[:-1]
i = string.find(yy, ':')
if i > 0:
! yy, tm = tm, yy
if yy[-1] == ',':
! yy = yy[:-1]
if yy[0] not in string.digits:
! yy, tz = tz, yy
if tm[-1] == ',':
! tm = tm[:-1]
tm = string.splitfields(tm, ':')
if len(tm) == 2:
Index: shelve.py
===================================================================
RCS file: /projects/cvsroot/python/dist/src/Lib/shelve.py,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -r1.12 -r1.13
*** shelve.py 1999/08/11 01:54:05 1.12
--- shelve.py 2000/02/10 17:17:14 1.13
***************
*** 11,27 ****
object):
! import shelve
! d = shelve.open(filename) # open, with (g)dbm filename -- no suffix
! d[key] = data # store data at key (overwrites old data if
! # using an existing key)
! data = d[key] # retrieve data at key (raise KeyError if no
! # such key)
! del d[key] # delete data stored at key (raises KeyError
! # if no such key)
! flag = d.has_key(key) # true if the key exists
! list = d.keys() # a list of all existing keys (slow!)
! d.close() # close it
Dependent on the implementation, closing a persistent dictionary may
--- 11,27 ----
object):
! import shelve
! d = shelve.open(filename) # open, with (g)dbm filename -- no suffix
! d[key] = data # store data at key (overwrites old data if
! # using an existing key)
! data = d[key] # retrieve data at key (raise KeyError if no
! # such key)
! del d[key] # delete data stored at key (raises KeyError
! # if no such key)
! flag = d.has_key(key) # true if the key exists
! list = d.keys() # a list of all existing keys (slow!)
! d.close() # close it
Dependent on the implementation, closing a persistent dictionary may
***************
*** 32,157 ****
try:
! from cPickle import Pickler, Unpickler
except ImportError:
! from pickle import Pickler, Unpickler
try:
! from cStringIO import StringIO
except ImportError:
! from StringIO import StringIO
class Shelf:
! """Base class for shelf implementations.
! This is initialized with a dictionary-like object.
! See the module's __doc__ string for an overview of the interface.
! """
!
! def __init__(self, dict):
! self.dict = dict
!
! def keys(self):
! return self.dict.keys()
!
! def __len__(self):
! return len(self.dict)
!
! def has_key(self, key):
! return self.dict.has_key(key)
!
! def get(self, key, default=None):
! if self.dict.has_key(key):
! return self[key]
! return default
!
! def __getitem__(self, key):
! f = StringIO(self.dict[key])
! return Unpickler(f).load()
!
! def __setitem__(self, key, value):
! f = StringIO()
! p = Pickler(f)
! p.dump(value)
! self.dict[key] = f.getvalue()
!
! def __delitem__(self, key):
! del self.dict[key]
!
! def close(self):
! try:
! self.dict.close()
! except:
! pass
! self.dict = 0
!
! def __del__(self):
! self.close()
!
! def sync(self):
! if hasattr(self.dict, 'sync'):
! self.dict.sync()
!
class BsdDbShelf(Shelf):
! """Shelf implementation using the "BSD" db interface.
! This adds methods first(), next(), previous(), last() and
! set_location() that have no counterpart in [g]dbm databases.
! The actual database must be opened using one of the "bsddb"
! modules "open" routines (i.e. bsddb.hashopen, bsddb.btopen or
! bsddb.rnopen) and passed to the constructor.
!
! See the module's __doc__ string for an overview of the interface.
! """
!
! def __init__(self, dict):
! Shelf.__init__(self, dict)
!
! def set_location(self, key):
! (key, value) = self.dict.set_location(key)
! f = StringIO(value)
! return (key, Unpickler(f).load())
!
! def next(self):
! (key, value) = self.dict.next()
! f = StringIO(value)
! return (key, Unpickler(f).load())
!
! def previous(self):
! (key, value) = self.dict.previous()
! f = StringIO(value)
! return (key, Unpickler(f).load())
!
! def first(self):
! (key, value) = self.dict.first()
! f = StringIO(value)
! return (key, Unpickler(f).load())
!
! def last(self):
! (key, value) = self.dict.last()
! f = StringIO(value)
! return (key, Unpickler(f).load())
class DbfilenameShelf(Shelf):
! """Shelf implementation using the "anydbm" generic dbm interface.
! This is initialized with the filename for the dbm database.
! See the module's __doc__ string for an overview of the interface.
! """
!
! def __init__(self, filename, flag='c'):
! import anydbm
! Shelf.__init__(self, anydbm.open(filename, flag))
def open(filename, flag='c'):
! """Open a persistent dictionary for reading and writing.
! Argument is the filename for the dbm database.
! See the module's __doc__ string for an overview of the interface.
! """
!
! return DbfilenameShelf(filename, flag)
--- 32,157 ----
try:
! from cPickle import Pickler, Unpickler
except ImportError:
! from pickle import Pickler, Unpickler
try:
! from cStringIO import StringIO
except ImportError:
! from StringIO import StringIO
class Shelf:
! """Base class for shelf implementations.
! This is initialized with a dictionary-like object.
! See the module's __doc__ string for an overview of the interface.
! """
!
! def __init__(self, dict):
! self.dict = dict
!
! def keys(self):
! return self.dict.keys()
!
! def __len__(self):
! return len(self.dict)
!
! def has_key(self, key):
! return self.dict.has_key(key)
!
! def get(self, key, default=None):
! if self.dict.has_key(key):
! return self[key]
! return default
!
! def __getitem__(self, key):
! f = StringIO(self.dict[key])
! return Unpickler(f).load()
!
! def __setitem__(self, key, value):
! f = StringIO()
! p = Pickler(f)
! p.dump(value)
! self.dict[key] = f.getvalue()
!
! def __delitem__(self, key):
! del self.dict[key]
!
! def close(self):
! try:
! self.dict.close()
! except:
! pass
! self.dict = 0
!
! def __del__(self):
! self.close()
!
! def sync(self):
! if hasattr(self.dict, 'sync'):
! self.dict.sync()
!
class BsdDbShelf(Shelf):
! """Shelf implementation using the "BSD" db interface.
! This adds methods first(), next(), previous(), last() and
! set_location() that have no counterpart in [g]dbm databases.
! The actual database must be opened using one of the "bsddb"
! modules "open" routines (i.e. bsddb.hashopen, bsddb.btopen or
! bsddb.rnopen) and passed to the constructor.
!
! See the module's __doc__ string for an overview of the interface.
! """
!
! def __init__(self, dict):
! Shelf.__init__(self, dict)
!
! def set_location(self, key):
! (key, value) = self.dict.set_location(key)
! f = StringIO(value)
! return (key, Unpickler(f).load())
!
! def next(self):
! (key, value) = self.dict.next()
! f = StringIO(value)
! return (key, Unpickler(f).load())
!
! def previous(self):
! (key, value) = self.dict.previous()
! f = StringIO(value)
! return (key, Unpickler(f).load())
!
! def first(self):
! (key, value) = self.dict.first()
! f = StringIO(value)
! return (key, Unpickler(f).load())
!
! def last(self):
! (key, value) = self.dict.last()
! f = StringIO(value)
! return (key, Unpickler(f).load())
class DbfilenameShelf(Shelf):
! """Shelf implementation using the "anydbm" generic dbm interface.
! This is initialized with the filename for the dbm database.
! See the module's __doc__ string for an overview of the interface.
! """
!
! def __init__(self, filename, flag='c'):
! import anydbm
! Shelf.__init__(self, anydbm.open(filename, flag))
def open(filename, flag='c'):
! """Open a persistent dictionary for reading and writing.
! Argument is the filename for the dbm database.
! See the module's __doc__ string for an overview of the interface.
! """
!
! return DbfilenameShelf(filename, flag)
Index: stringold.py
===================================================================
RCS file: /projects/cvsroot/python/dist/src/Lib/stringold.py,v
retrieving revision 1.43
retrieving revision 1.44
diff -C2 -r1.43 -r1.44
*** stringold.py 1999/10/12 19:54:40 1.43
--- stringold.py 2000/02/10 17:17:14 1.44
***************
*** 200,207 ****
"""
if type(s) == _StringType:
! return _float(s)
else:
! raise TypeError('argument 1: expected string, %s found' %
! type(s).__name__)
# Convert string to integer
--- 200,207 ----
"""
if type(s) == _StringType:
! return _float(s)
else:
! raise TypeError('argument 1: expected string, %s found' %
! type(s).__name__)
# Convert string to integer
***************
*** 218,233 ****
"""
try:
! s = args[0]
except IndexError:
! raise TypeError('function requires at least 1 argument: %d given' %
! len(args))
# Don't catch type error resulting from too many arguments to int(). The
# error message isn't compatible but the error type is, and this function
# is complicated enough already.
if type(s) == _StringType:
! return _apply(_int, args)
else:
! raise TypeError('argument 1: expected string, %s found' %
! type(s).__name__)
--- 218,233 ----
"""
try:
! s = args[0]
except IndexError:
! raise TypeError('function requires at least 1 argument: %d given' %
! len(args))
# Don't catch type error resulting from too many arguments to int(). The
# error message isn't compatible but the error type is, and this function
# is complicated enough already.
if type(s) == _StringType:
! return _apply(_int, args)
else:
! raise TypeError('argument 1: expected string, %s found' %
! type(s).__name__)
***************
*** 246,261 ****
"""
try:
! s = args[0]
except IndexError:
! raise TypeError('function requires at least 1 argument: %d given' %
! len(args))
# Don't catch type error resulting from too many arguments to long(). The
# error message isn't compatible but the error type is, and this function
# is complicated enough already.
if type(s) == _StringType:
! return _apply(_long, args)
else:
! raise TypeError('argument 1: expected string, %s found' %
! type(s).__name__)
--- 246,261 ----
"""
try:
! s = args[0]
except IndexError:
! raise TypeError('function requires at least 1 argument: %d given' %
! len(args))
# Don't catch type error resulting from too many arguments to long(). The
# error message isn't compatible but the error type is, and this function
# is complicated enough already.
if type(s) == _StringType:
! return _apply(_long, args)
else:
! raise TypeError('argument 1: expected string, %s found' %
! type(s).__name__)
***************
*** 299,304 ****
half = n/2
if n%2 and width%2:
! # This ensures that center(center(s, i), j) = center(s, j)
! half = half+1
return ' '*half + s + ' '*(n-half)
--- 299,304 ----
half = n/2
if n%2 and width%2:
! # This ensures that center(center(s, i), j) = center(s, j)
! half = half+1
return ' '*half + s + ' '*(n-half)
***************
*** 319,323 ****
sign = ''
if s[0] in ('-', '+'):
! sign, s = s[0], s[1:]
return sign + '0'*(width-n) + s
--- 319,323 ----
sign = ''
if s[0] in ('-', '+'):
! sign, s = s[0], s[1:]
return sign + '0'*(width-n) + s
***************
*** 334,343 ****
res = line = ''
for c in s:
! if c == '\t':
! c = ' '*(tabsize - len(line) % tabsize)
! line = line + c
! if c == '\n':
! res = res + line
! line = ''
return res + line
--- 334,343 ----
res = line = ''
for c in s:
! if c == '\t':
! c = ' '*(tabsize - len(line) % tabsize)
! line = line + c
! if c == '\n':
! res = res + line
! line = ''
return res + line
***************
*** 388,399 ****
"""
if len(fromstr) != len(tostr):
! raise ValueError, "maketrans arguments must have same length"
global _idmapL
if not _idmapL:
! _idmapL = map(None, _idmap)
L = _idmapL[:]
fromstr = map(ord, fromstr)
for i in range(len(fromstr)):
! L[fromstr[i]] = tostr[i]
return joinfields(L, "")
--- 388,399 ----
"""
if len(fromstr) != len(tostr):
! raise ValueError, "maketrans arguments must have same length"
global _idmapL
if not _idmapL:
! _idmapL = map(None, _idmap)
L = _idmapL[:]
fromstr = map(ord, fromstr)
for i in range(len(fromstr)):
! L[fromstr[i]] = tostr[i]
return joinfields(L, "")
***************
*** 429,431 ****
letters = lowercase + uppercase
except ImportError:
! pass # Use the original versions
--- 429,431 ----
letters = lowercase + uppercase
except ImportError:
! pass # Use the original versions
Index: urllib2.py
===================================================================
RCS file: /projects/cvsroot/python/dist/src/Lib/urllib2.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -r1.2 -r1.3
*** urllib2.py 2000/02/04 15:28:42 1.2
--- urllib2.py 2000/02/10 17:17:14 1.3
***************
*** 149,156 ****
# the implementation. need to override __init__ and __str__
def __init__(self, reason):
! self.reason = reason
def __str__(self):
! return '<urlopen error %s>' % self.reason
class HTTPError(URLError, addinfourl):
--- 149,156 ----
# the implementation. need to override __init__ and __str__
[...1256 lines suppressed...]
! return 1
p = CustomProxy('http', at_cnri, 'proxy.cnri.reston.va.us')
ph = CustomProxyHandler(p)
***************
*** 1053,1059 ****
f = urlopen(url, req)
except IOError, err:
! print "IOError:", err
! except socket.error, err:
! print "socket.error:", err
else:
buf = f.read()
--- 1053,1059 ----
f = urlopen(url, req)
except IOError, err:
! print "IOError:", err
! except socket.error, err:
! print "socket.error:", err
else:
buf = f.read()
Index: whichdb.py
===================================================================
RCS file: /projects/cvsroot/python/dist/src/Lib/whichdb.py,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -r1.5 -r1.6
*** whichdb.py 1999/06/08 13:13:16 1.5
--- whichdb.py 2000/02/10 17:17:14 1.6
***************
*** 57,61 ****
# BSD hash v2 has a 12-byte NULL pad in front of the file type
try:
! (magic,) = struct.unpack("=l", s16[-4:])
except struct.error:
return ""
--- 57,61 ----
# BSD hash v2 has a 12-byte NULL pad in front of the file type
try:
! (magic,) = struct.unpack("=l", s16[-4:])
except struct.error:
return ""