Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit bb5fbc4

Browse files
committed
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
1 parent 9aa890a commit bb5fbc4

1 file changed

Lines changed: 63 additions & 75 deletions

File tree

Lib/rfc822.py

Lines changed: 63 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,6 @@ def __init__(self, fp, seekable = 1):
9090
fp.tell()
9191
except (AttributeError, IOError):
9292
seekable = 0
93-
else:
94-
seekable = 1
9593
self.fp = fp
9694
self.seekable = seekable
9795
self.startofheaders = None
@@ -134,7 +132,7 @@ def readheaders(self):
134132
"""
135133
self.dict = {}
136134
self.unixfrom = ''
137-
self.headers = list = []
135+
self.headers = lst = []
138136
self.status = ''
139137
headerseen = ""
140138
firstline = 1
@@ -161,7 +159,7 @@ def readheaders(self):
161159
firstline = 0
162160
if headerseen and line[0] in ' \t':
163161
# It's a continuation line.
164-
list.append(line)
162+
lst.append(line)
165163
x = (self.dict[headerseen] + "\n " + line.strip())
166164
self.dict[headerseen] = x.strip()
167165
continue
@@ -174,7 +172,7 @@ def readheaders(self):
174172
headerseen = self.isheader(line)
175173
if headerseen:
176174
# It's a legal header line, save it.
177-
list.append(line)
175+
lst.append(line)
178176
self.dict[headerseen] = line[len(headerseen)+1:].strip()
179177
continue
180178
else:
@@ -202,8 +200,7 @@ def isheader(self, line):
202200
i = line.find(':')
203201
if i > 0:
204202
return line[:i].lower()
205-
else:
206-
return None
203+
return None
207204

208205
def islast(self, line):
209206
"""Determine whether a line is a legal end of RFC 2822 headers.
@@ -235,16 +232,16 @@ def getallmatchingheaders(self, name):
235232
"""
236233
name = name.lower() + ':'
237234
n = len(name)
238-
list = []
235+
lst = []
239236
hit = 0
240237
for line in self.headers:
241238
if line[:n].lower() == name:
242239
hit = 1
243240
elif not line[:1].isspace():
244241
hit = 0
245242
if hit:
246-
list.append(line)
247-
return list
243+
lst.append(line)
244+
return lst
248245

249246
def getfirstmatchingheader(self, name):
250247
"""Get the first header line matching name.
@@ -254,7 +251,7 @@ def getfirstmatchingheader(self, name):
254251
"""
255252
name = name.lower() + ':'
256253
n = len(name)
257-
list = []
254+
lst = []
258255
hit = 0
259256
for line in self.headers:
260257
if hit:
@@ -263,8 +260,8 @@ def getfirstmatchingheader(self, name):
263260
elif line[:n].lower() == name:
264261
hit = 1
265262
if hit:
266-
list.append(line)
267-
return list
263+
lst.append(line)
264+
return lst
268265

269266
def getrawheader(self, name):
270267
"""A higher-level interface to getfirstmatchingheader().
@@ -275,11 +272,11 @@ def getrawheader(self, name):
275272
occur.
276273
"""
277274

278-
list = self.getfirstmatchingheader(name)
279-
if not list:
275+
lst = self.getfirstmatchingheader(name)
276+
if not lst:
280277
return None
281-
list[0] = list[0][len(name) + 1:]
282-
return ''.join(list)
278+
lst[0] = lst[0][len(name) + 1:]
279+
return ''.join(lst)
283280

284281
def getheader(self, name, default=None):
285282
"""Get the header value for a name.
@@ -288,10 +285,7 @@ def getheader(self, name, default=None):
288285
header value for a given header name, or None if it doesn't exist.
289286
This uses the dictionary version which finds the *last* such header.
290287
"""
291-
try:
292-
return self.dict[name.lower()]
293-
except KeyError:
294-
return default
288+
return self.dict.get(name.lower(), default)
295289
get = getheader
296290

297291
def getheaders(self, name):
@@ -399,9 +393,8 @@ def __setitem__(self, name, value):
399393
del self[name] # Won't fail if it doesn't exist
400394
self.dict[name.lower()] = value
401395
text = name + ": " + value
402-
lines = text.split("\n")
403-
for line in lines:
404-
self.headers.append(line + "\n")
396+
self.headers.extend(text.splitlines(True))
397+
self.headers.append('\n')
405398

406399
def __delitem__(self, name):
407400
"""Delete all occurrences of a specific header, if it is present."""
@@ -411,7 +404,7 @@ def __delitem__(self, name):
411404
del self.dict[name]
412405
name = name + ':'
413406
n = len(name)
414-
list = []
407+
lst = []
415408
hit = 0
416409
for i in range(len(self.headers)):
417410
line = self.headers[i]
@@ -420,8 +413,8 @@ def __delitem__(self, name):
420413
elif not line[:1].isspace():
421414
hit = 0
422415
if hit:
423-
list.append(i)
424-
for i in reversed(list):
416+
lst.append(i)
417+
for i in reversed(lst):
425418
del self.headers[i]
426419

427420
def setdefault(self, name, default=""):
@@ -430,9 +423,8 @@ def setdefault(self, name, default=""):
430423
return self.dict[lowername]
431424
else:
432425
text = name + ": " + default
433-
lines = text.split("\n")
434-
for line in lines:
435-
self.headers.append(line + "\n")
426+
self.headers.extend(text.splitlines(True))
427+
self.headers.append('\n')
436428
self.dict[lowername] = default
437429
return default
438430

@@ -473,29 +465,28 @@ def __str__(self):
473465
# XXX The inverses of the parse functions may also be useful.
474466

475467

476-
def unquote(str):
468+
def unquote(s):
477469
"""Remove quotes from a string."""
478-
if len(str) > 1:
479-
if str.startswith('"') and str.endswith('"'):
480-
return str[1:-1].replace('\\\\', '\\').replace('\\"', '"')
481-
if str.startswith('<') and str.endswith('>'):
482-
return str[1:-1]
483-
return str
470+
if len(s) > 1:
471+
if s.startswith('"') and s.endswith('"'):
472+
return s[1:-1].replace('\\\\', '\\').replace('\\"', '"')
473+
if s.startswith('<') and s.endswith('>'):
474+
return s[1:-1]
475+
return s
484476

485477

486-
def quote(str):
478+
def quote(s):
487479
"""Add quotes around a string."""
488-
return str.replace('\\', '\\\\').replace('"', '\\"')
480+
return s.replace('\\', '\\\\').replace('"', '\\"')
489481

490482

491483
def parseaddr(address):
492484
"""Parse an address into a (realname, mailaddr) tuple."""
493485
a = AddressList(address)
494-
list = a.addresslist
495-
if not list:
486+
lst = a.addresslist
487+
if not lst:
496488
return (None, None)
497-
else:
498-
return list[0]
489+
return lst[0]
499490

500491

501492
class AddrlistClass:
@@ -543,12 +534,10 @@ def getaddrlist(self):
543534
Returns a list containing all of the addresses.
544535
"""
545536
result = []
546-
while 1:
537+
ad = self.getaddress()
538+
while ad:
539+
result += ad
547540
ad = self.getaddress()
548-
if ad:
549-
result += ad
550-
else:
551-
break
552541
return result
553542

554543
def getaddress(self):
@@ -581,11 +570,11 @@ def getaddress(self):
581570
returnlist = []
582571

583572
fieldlen = len(self.field)
584-
self.pos = self.pos + 1
573+
self.pos += 1
585574
while self.pos < len(self.field):
586575
self.gotonext()
587576
if self.pos < fieldlen and self.field[self.pos] == ';':
588-
self.pos = self.pos + 1
577+
self.pos += 1
589578
break
590579
returnlist = returnlist + self.getaddress()
591580

@@ -602,11 +591,11 @@ def getaddress(self):
602591
if plist:
603592
returnlist = [(' '.join(self.commentlist), plist[0])]
604593
elif self.field[self.pos] in self.specials:
605-
self.pos = self.pos + 1
594+
self.pos += 1
606595

607596
self.gotonext()
608597
if self.pos < len(self.field) and self.field[self.pos] == ',':
609-
self.pos = self.pos + 1
598+
self.pos += 1
610599
return returnlist
611600

612601
def getrouteaddr(self):
@@ -618,24 +607,24 @@ def getrouteaddr(self):
618607
return
619608

620609
expectroute = 0
621-
self.pos = self.pos + 1
610+
self.pos += 1
622611
self.gotonext()
623612
adlist = ""
624613
while self.pos < len(self.field):
625614
if expectroute:
626615
self.getdomain()
627616
expectroute = 0
628617
elif self.field[self.pos] == '>':
629-
self.pos = self.pos + 1
618+
self.pos += 1
630619
break
631620
elif self.field[self.pos] == '@':
632-
self.pos = self.pos + 1
621+
self.pos += 1
633622
expectroute = 1
634623
elif self.field[self.pos] == ':':
635-
self.pos = self.pos + 1
624+
self.pos += 1
636625
else:
637626
adlist = self.getaddrspec()
638-
self.pos = self.pos + 1
627+
self.pos += 1
639628
break
640629
self.gotonext()
641630

@@ -649,7 +638,7 @@ def getaddrspec(self):
649638
while self.pos < len(self.field):
650639
if self.field[self.pos] == '.':
651640
aslist.append('.')
652-
self.pos = self.pos + 1
641+
self.pos += 1
653642
elif self.field[self.pos] == '"':
654643
aslist.append('"%s"' % self.getquote())
655644
elif self.field[self.pos] in self.atomends:
@@ -661,7 +650,7 @@ def getaddrspec(self):
661650
return ''.join(aslist)
662651

663652
aslist.append('@')
664-
self.pos = self.pos + 1
653+
self.pos += 1
665654
self.gotonext()
666655
return ''.join(aslist) + self.getdomain()
667656

@@ -670,13 +659,13 @@ def getdomain(self):
670659
sdlist = []
671660
while self.pos < len(self.field):
672661
if self.field[self.pos] in self.LWS:
673-
self.pos = self.pos + 1
662+
self.pos += 1
674663
elif self.field[self.pos] == '(':
675664
self.commentlist.append(self.getcomment())
676665
elif self.field[self.pos] == '[':
677666
sdlist.append(self.getdomainliteral())
678667
elif self.field[self.pos] == '.':
679-
self.pos = self.pos + 1
668+
self.pos += 1
680669
sdlist.append('.')
681670
elif self.field[self.pos] in self.atomends:
682671
break
@@ -701,21 +690,21 @@ def getdelimited(self, beginchar, endchars, allowcomments = 1):
701690

702691
slist = ['']
703692
quote = 0
704-
self.pos = self.pos + 1
693+
self.pos += 1
705694
while self.pos < len(self.field):
706695
if quote == 1:
707696
slist.append(self.field[self.pos])
708697
quote = 0
709698
elif self.field[self.pos] in endchars:
710-
self.pos = self.pos + 1
699+
self.pos += 1
711700
break
712701
elif allowcomments and self.field[self.pos] == '(':
713702
slist.append(self.getcomment())
714703
elif self.field[self.pos] == '\\':
715704
quote = 1
716705
else:
717706
slist.append(self.field[self.pos])
718-
self.pos = self.pos + 1
707+
self.pos += 1
719708

720709
return ''.join(slist)
721710

@@ -746,7 +735,7 @@ def getatom(self, atomends=None):
746735
if self.field[self.pos] in atomends:
747736
break
748737
else: atomlist.append(self.field[self.pos])
749-
self.pos = self.pos + 1
738+
self.pos += 1
750739

751740
return ''.join(atomlist)
752741

@@ -761,7 +750,7 @@ def getphraselist(self):
761750

762751
while self.pos < len(self.field):
763752
if self.field[self.pos] in self.LWS:
764-
self.pos = self.pos + 1
753+
self.pos += 1
765754
elif self.field[self.pos] == '"':
766755
plist.append(self.getquote())
767756
elif self.field[self.pos] == '(':
@@ -930,16 +919,15 @@ def parsedate_tz(data):
930919
else:
931920
tzsign = 1
932921
tzoffset = tzsign * ( (tzoffset//100)*3600 + (tzoffset % 100)*60)
933-
tuple = (yy, mm, dd, thh, tmm, tss, 0, 1, 0, tzoffset)
934-
return tuple
922+
return (yy, mm, dd, thh, tmm, tss, 0, 1, 0, tzoffset)
935923

936924

937925
def parsedate(data):
938926
"""Convert a time string to a time tuple."""
939927
t = parsedate_tz(data)
940-
if type(t) == type( () ):
941-
return t[:9]
942-
else: return t
928+
if t is None:
929+
return t
930+
return t[:9]
943931

944932

945933
def mktime_tz(data):
@@ -965,10 +953,10 @@ def formatdate(timeval=None):
965953
timeval = time.time()
966954
timeval = time.gmtime(timeval)
967955
return "%s, %02d %s %04d %02d:%02d:%02d GMT" % (
968-
["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"][timeval[6]],
956+
("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")[timeval[6]],
969957
timeval[2],
970-
["Jan", "Feb", "Mar", "Apr", "May", "Jun",
971-
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][timeval[1]-1],
958+
("Jan", "Feb", "Mar", "Apr", "May", "Jun",
959+
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec")[timeval[1]-1],
972960
timeval[0], timeval[3], timeval[4], timeval[5])
973961

974962

@@ -1002,7 +990,7 @@ def formatdate(timeval=None):
1002990
m.rewindbody()
1003991
n = 0
1004992
while f.readline():
1005-
n = n + 1
993+
n += 1
1006994
print 'Lines:', n
1007995
print '-'*70
1008996
print 'len =', len(m)

0 commit comments

Comments
 (0)