]> granicus.if.org Git - python/commitdiff
Wholistic code cleanup / modernization:
authorRaymond Hettinger <python@rcn.com>
Tue, 8 Feb 2005 08:05:13 +0000 (08:05 +0000)
committerRaymond Hettinger <python@rcn.com>
Tue, 8 Feb 2005 08:05:13 +0000 (08:05 +0000)
* 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

Lib/rfc822.py

index 18277d6dff4dbe080e9902d65e961623b1f8e354..4448e7d542c6f8a45815971807155ae4270e0e98 100644 (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.
@@ -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)