upgrade to Jython 2.5.0

This commit is contained in:
Dmitry Jemerov
2009-07-30 19:38:38 +04:00
parent f221494a43
commit bb24ece14b
487 changed files with 155647 additions and 18427 deletions
+84 -87
View File
@@ -90,8 +90,6 @@ class Message:
fp.tell()
except (AttributeError, IOError):
seekable = 0
else:
seekable = 1
self.fp = fp
self.seekable = seekable
self.startofheaders = None
@@ -134,7 +132,7 @@ class Message:
"""
self.dict = {}
self.unixfrom = ''
self.headers = list = []
self.headers = lst = []
self.status = ''
headerseen = ""
firstline = 1
@@ -161,7 +159,7 @@ class Message:
firstline = 0
if headerseen and line[0] in ' \t':
# It's a continuation line.
list.append(line)
lst.append(line)
x = (self.dict[headerseen] + "\n " + line.strip())
self.dict[headerseen] = x.strip()
continue
@@ -174,7 +172,7 @@ class Message:
headerseen = self.isheader(line)
if headerseen:
# It's a legal header line, save it.
list.append(line)
lst.append(line)
self.dict[headerseen] = line[len(headerseen)+1:].strip()
continue
else:
@@ -202,8 +200,7 @@ class Message:
i = line.find(':')
if i > 0:
return line[:i].lower()
else:
return None
return None
def islast(self, line):
"""Determine whether a line is a legal end of RFC 2822 headers.
@@ -222,7 +219,7 @@ class Message:
data in RFC 2822-like formats that support embedded comments or
free-text data.
"""
return None
return False
def getallmatchingheaders(self, name):
"""Find all header lines matching a given header name.
@@ -235,7 +232,7 @@ class Message:
"""
name = name.lower() + ':'
n = len(name)
list = []
lst = []
hit = 0
for line in self.headers:
if line[:n].lower() == name:
@@ -243,8 +240,8 @@ class Message:
elif not line[:1].isspace():
hit = 0
if hit:
list.append(line)
return list
lst.append(line)
return lst
def getfirstmatchingheader(self, name):
"""Get the first header line matching name.
@@ -254,7 +251,7 @@ class Message:
"""
name = name.lower() + ':'
n = len(name)
list = []
lst = []
hit = 0
for line in self.headers:
if hit:
@@ -263,8 +260,8 @@ class Message:
elif line[:n].lower() == name:
hit = 1
if hit:
list.append(line)
return list
lst.append(line)
return lst
def getrawheader(self, name):
"""A higher-level interface to getfirstmatchingheader().
@@ -275,11 +272,11 @@ class Message:
occur.
"""
list = self.getfirstmatchingheader(name)
if not list:
lst = self.getfirstmatchingheader(name)
if not lst:
return None
list[0] = list[0][len(name) + 1:]
return ''.join(list)
lst[0] = lst[0][len(name) + 1:]
return ''.join(lst)
def getheader(self, name, default=None):
"""Get the header value for a name.
@@ -288,10 +285,7 @@ class Message:
header value for a given header name, or None if it doesn't exist.
This uses the dictionary version which finds the *last* such header.
"""
try:
return self.dict[name.lower()]
except KeyError:
return default
return self.dict.get(name.lower(), default)
get = getheader
def getheaders(self, name):
@@ -351,8 +345,8 @@ class Message:
addr = h[i+1:]
raw.append(addr)
alladdrs = ''.join(raw)
a = AddrlistClass(alladdrs)
return a.getaddrlist()
a = AddressList(alladdrs)
return a.addresslist
def getdate(self, name):
"""Retrieve a date field from a header.
@@ -399,19 +393,18 @@ class Message:
del self[name] # Won't fail if it doesn't exist
self.dict[name.lower()] = value
text = name + ": " + value
lines = text.split("\n")
for line in lines:
for line in text.split("\n"):
self.headers.append(line + "\n")
def __delitem__(self, name):
"""Delete all occurrences of a specific header, if it is present."""
name = name.lower()
if not self.dict.has_key(name):
if not name in self.dict:
return
del self.dict[name]
name = name + ':'
n = len(name)
list = []
lst = []
hit = 0
for i in range(len(self.headers)):
line = self.headers[i]
@@ -420,26 +413,31 @@ class Message:
elif not line[:1].isspace():
hit = 0
if hit:
list.append(i)
list.reverse()
for i in list:
lst.append(i)
for i in reversed(lst):
del self.headers[i]
def setdefault(self, name, default=""):
lowername = name.lower()
if self.dict.has_key(lowername):
if lowername in self.dict:
return self.dict[lowername]
else:
text = name + ": " + default
lines = text.split("\n")
for line in lines:
for line in text.split("\n"):
self.headers.append(line + "\n")
self.dict[lowername] = default
return default
def has_key(self, name):
"""Determine whether a message contains the named header."""
return self.dict.has_key(name.lower())
return name.lower() in self.dict
def __contains__(self, name):
"""Determine whether a message contains the named header."""
return name.lower() in self.dict
def __iter__(self):
return iter(self.dict)
def keys(self):
"""Get all of a message's header field names."""
@@ -457,10 +455,7 @@ class Message:
return self.dict.items()
def __str__(self):
str = ''
for hdr in self.headers:
str = str + hdr
return str
return ''.join(self.headers)
# Utility functions
@@ -470,29 +465,28 @@ class Message:
# XXX The inverses of the parse functions may also be useful.
def unquote(str):
def unquote(s):
"""Remove quotes from a string."""
if len(str) > 1:
if str[0] == '"' and str[-1:] == '"':
return str[1:-1]
if str[0] == '<' and str[-1:] == '>':
return str[1:-1]
return str
if len(s) > 1:
if s.startswith('"') and s.endswith('"'):
return s[1:-1].replace('\\\\', '\\').replace('\\"', '"')
if s.startswith('<') and s.endswith('>'):
return s[1:-1]
return s
def quote(str):
def quote(s):
"""Add quotes around a string."""
return str.replace('\\', '\\\\').replace('"', '\\"')
return s.replace('\\', '\\\\').replace('"', '\\"')
def parseaddr(address):
"""Parse an address into a (realname, mailaddr) tuple."""
a = AddressList(address)
list = a.addresslist
if not list:
lst = a.addresslist
if not lst:
return (None, None)
else:
return list[0]
return lst[0]
class AddrlistClass:
@@ -540,12 +534,10 @@ class AddrlistClass:
Returns a list containing all of the addresses.
"""
result = []
while 1:
ad = self.getaddress()
while ad:
result += ad
ad = self.getaddress()
if ad:
result += ad
else:
break
return result
def getaddress(self):
@@ -578,11 +570,11 @@ class AddrlistClass:
returnlist = []
fieldlen = len(self.field)
self.pos = self.pos + 1
self.pos += 1
while self.pos < len(self.field):
self.gotonext()
if self.pos < fieldlen and self.field[self.pos] == ';':
self.pos = self.pos + 1
self.pos += 1
break
returnlist = returnlist + self.getaddress()
@@ -599,11 +591,11 @@ class AddrlistClass:
if plist:
returnlist = [(' '.join(self.commentlist), plist[0])]
elif self.field[self.pos] in self.specials:
self.pos = self.pos + 1
self.pos += 1
self.gotonext()
if self.pos < len(self.field) and self.field[self.pos] == ',':
self.pos = self.pos + 1
self.pos += 1
return returnlist
def getrouteaddr(self):
@@ -615,7 +607,7 @@ class AddrlistClass:
return
expectroute = 0
self.pos = self.pos + 1
self.pos += 1
self.gotonext()
adlist = ""
while self.pos < len(self.field):
@@ -623,16 +615,16 @@ class AddrlistClass:
self.getdomain()
expectroute = 0
elif self.field[self.pos] == '>':
self.pos = self.pos + 1
self.pos += 1
break
elif self.field[self.pos] == '@':
self.pos = self.pos + 1
self.pos += 1
expectroute = 1
elif self.field[self.pos] == ':':
self.pos = self.pos + 1
self.pos += 1
else:
adlist = self.getaddrspec()
self.pos = self.pos + 1
self.pos += 1
break
self.gotonext()
@@ -646,7 +638,7 @@ class AddrlistClass:
while self.pos < len(self.field):
if self.field[self.pos] == '.':
aslist.append('.')
self.pos = self.pos + 1
self.pos += 1
elif self.field[self.pos] == '"':
aslist.append('"%s"' % self.getquote())
elif self.field[self.pos] in self.atomends:
@@ -658,7 +650,7 @@ class AddrlistClass:
return ''.join(aslist)
aslist.append('@')
self.pos = self.pos + 1
self.pos += 1
self.gotonext()
return ''.join(aslist) + self.getdomain()
@@ -667,13 +659,13 @@ class AddrlistClass:
sdlist = []
while self.pos < len(self.field):
if self.field[self.pos] in self.LWS:
self.pos = self.pos + 1
self.pos += 1
elif self.field[self.pos] == '(':
self.commentlist.append(self.getcomment())
elif self.field[self.pos] == '[':
sdlist.append(self.getdomainliteral())
elif self.field[self.pos] == '.':
self.pos = self.pos + 1
self.pos += 1
sdlist.append('.')
elif self.field[self.pos] in self.atomends:
break
@@ -698,21 +690,22 @@ class AddrlistClass:
slist = ['']
quote = 0
self.pos = self.pos + 1
self.pos += 1
while self.pos < len(self.field):
if quote == 1:
slist.append(self.field[self.pos])
quote = 0
elif self.field[self.pos] in endchars:
self.pos = self.pos + 1
self.pos += 1
break
elif allowcomments and self.field[self.pos] == '(':
slist.append(self.getcomment())
continue # have already advanced pos from getcomment
elif self.field[self.pos] == '\\':
quote = 1
else:
slist.append(self.field[self.pos])
self.pos = self.pos + 1
self.pos += 1
return ''.join(slist)
@@ -743,7 +736,7 @@ class AddrlistClass:
if self.field[self.pos] in atomends:
break
else: atomlist.append(self.field[self.pos])
self.pos = self.pos + 1
self.pos += 1
return ''.join(atomlist)
@@ -758,7 +751,7 @@ class AddrlistClass:
while self.pos < len(self.field):
if self.field[self.pos] in self.LWS:
self.pos = self.pos + 1
self.pos += 1
elif self.field[self.pos] == '"':
plist.append(self.getquote())
elif self.field[self.pos] == '(':
@@ -861,6 +854,11 @@ def parsedate_tz(data):
if data[0][-1] in (',', '.') or data[0].lower() in _daynames:
# There's a dayname here. Skip it
del data[0]
else:
# no space after the "weekday,"?
i = data[0].rfind(',')
if i >= 0:
data[0] = data[0][i+1:]
if len(data) == 3: # RFC 850 date, deprecated
stuff = data[0].split('-')
if len(stuff) == 3:
@@ -912,7 +910,7 @@ def parsedate_tz(data):
return None
tzoffset = None
tz = tz.upper()
if _timezones.has_key(tz):
if tz in _timezones:
tzoffset = _timezones[tz]
else:
try:
@@ -927,16 +925,15 @@ def parsedate_tz(data):
else:
tzsign = 1
tzoffset = tzsign * ( (tzoffset//100)*3600 + (tzoffset % 100)*60)
tuple = (yy, mm, dd, thh, tmm, tss, 0, 0, 0, tzoffset)
return tuple
return (yy, mm, dd, thh, tmm, tss, 0, 1, 0, tzoffset)
def parsedate(data):
"""Convert a time string to a time tuple."""
t = parsedate_tz(data)
if type(t) == type( () ):
return t[:9]
else: return t
if t is None:
return t
return t[:9]
def mktime_tz(data):
@@ -962,10 +959,10 @@ def formatdate(timeval=None):
timeval = time.time()
timeval = time.gmtime(timeval)
return "%s, %02d %s %04d %02d:%02d:%02d GMT" % (
["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"][timeval[6]],
("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")[timeval[6]],
timeval[2],
["Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][timeval[1]-1],
("Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec")[timeval[1]-1],
timeval[0], timeval[3], timeval[4], timeval[5])
@@ -999,12 +996,12 @@ if __name__ == '__main__':
m.rewindbody()
n = 0
while f.readline():
n = n + 1
n += 1
print 'Lines:', n
print '-'*70
print 'len =', len(m)
if m.has_key('Date'): print 'Date =', m['Date']
if m.has_key('X-Nonsense'): pass
if 'Date' in m: print 'Date =', m['Date']
if 'X-Nonsense' in m: pass
print 'keys =', m.keys()
print 'values =', m.values()
print 'items =', m.items()