summaryrefslogtreecommitdiffstats
path: root/Lib/rfc822.py
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2005-02-08 08:05:13 (GMT)
committerRaymond Hettinger <python@rcn.com>2005-02-08 08:05:13 (GMT)
commitbb5fbc4af9ee68428c26a3a2e2b1f6747a787473 (patch)
tree96859e3051f7f1a06a245740c0eb60dea1b4f132 /Lib/rfc822.py
parent9aa890a14933f7dc8adf625513ea34116911f758 (diff)
downloadcpython-bb5fbc4af9ee68428c26a3a2e2b1f6747a787473.zip
cpython-bb5fbc4af9ee68428c26a3a2e2b1f6747a787473.tar.gz
cpython-bb5fbc4af9ee68428c26a3a2e2b1f6747a787473.tar.bz2
Wholistic code cleanup / modernization:
* Use += * Replace loop logic with str.splitlines equivalent * Don't use variable names that shadow tuple, list, and str * Use dict.get instead of equivalent try/except * Minor loop logic simplications
Diffstat (limited to 'Lib/rfc822.py')
-rw-r--r--Lib/rfc822.py138
1 files changed, 63 insertions, 75 deletions
diff --git a/Lib/rfc822.py b/Lib/rfc822.py
index 18277d6..4448e7d 100644
--- a/Lib/rfc822.py
+++ b/Lib/rfc822.py
@@ -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.
@@ -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):
@@ -399,9 +393,8 @@ 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:
- self.headers.append(line + "\n")
+ self.headers.extend(text.splitlines(True))
+ self.headers.append('\n')
def __delitem__(self, name):
"""Delete all occurrences of a specific header, if it is present."""
@@ -411,7 +404,7 @@ class Message:
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,8 +413,8 @@ class Message:
elif not line[:1].isspace():
hit = 0
if hit:
- list.append(i)
- for i in reversed(list):
+ lst.append(i)
+ for i in reversed(lst):
del self.headers[i]
def setdefault(self, name, default=""):
@@ -430,9 +423,8 @@ class Message:
return self.dict[lowername]
else:
text = name + ": " + default
- lines = text.split("\n")
- for line in lines:
- self.headers.append(line + "\n")
+ self.headers.extend(text.splitlines(True))
+ self.headers.append('\n')
self.dict[lowername] = default
return default
@@ -473,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.startswith('"') and str.endswith('"'):
- return str[1:-1].replace('\\\\', '\\').replace('\\"', '"')
- if str.startswith('<') and str.endswith('>'):
- 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:
@@ -543,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):
@@ -581,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()
@@ -602,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):
@@ -618,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):
@@ -626,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()
@@ -649,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:
@@ -661,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()
@@ -670,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
@@ -701,13 +690,13 @@ 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())
@@ -715,7 +704,7 @@ class AddrlistClass:
quote = 1
else:
slist.append(self.field[self.pos])
- self.pos = self.pos + 1
+ self.pos += 1
return ''.join(slist)
@@ -746,7 +735,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)
@@ -761,7 +750,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] == '(':
@@ -930,16 +919,15 @@ def parsedate_tz(data):
else:
tzsign = 1
tzoffset = tzsign * ( (tzoffset//100)*3600 + (tzoffset % 100)*60)
- tuple = (yy, mm, dd, thh, tmm, tss, 0, 1, 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):
@@ -965,10 +953,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])
@@ -1002,7 +990,7 @@ if __name__ == '__main__':
m.rewindbody()
n = 0
while f.readline():
- n = n + 1
+ n += 1
print 'Lines:', n
print '-'*70
print 'len =', len(m)