Milter.utils.parse_header returns string, other py3 fixes

This commit is contained in:
Stuart D. Gathman
2020-06-25 19:47:38 -04:00
parent 7ea839cfb1
commit f37090371b
5 changed files with 15 additions and 8 deletions
+5 -3
View File
@@ -34,7 +34,8 @@ class MilterConfigParser(ConfigParser):
if q.startswith('file:'): if q.startswith('file:'):
domain = q[5:].lower() domain = q[5:].lower()
fname = os.path.join(dir,domain) fname = os.path.join(dir,domain)
d[domain] = d.setdefault(domain,[]) + open(fname,'r').read().split() with open(fname,'r') as fp:
d[domain] = d.setdefault(domain,[]) + fp.read().split()
else: else:
user,domain = q.split('@') user,domain = q.split('@')
d.setdefault(domain.lower(),[]).append(user) d.setdefault(domain.lower(),[]).append(user)
@@ -52,8 +53,9 @@ class MilterConfigParser(ConfigParser):
addr = addr.strip() addr = addr.strip()
if addr.startswith('file:'): if addr.startswith('file:'):
fname = os.path.join(dir,addr[5:]) fname = os.path.join(dir,addr[5:])
for a in open(fname,'r').read().split(): with open(fname,'r') as fp:
d[a] = q for a in fp.read().split():
d[a] = q
else: else:
d[addr] = q d[addr] = q
return d return d
+1 -1
View File
@@ -64,7 +64,7 @@ class TestBase(object):
def getsymval(self,name): def getsymval(self,name):
stage = self._stage stage = self._stage
if stage >= 0: if stage is not None and stage >= 0:
syms = self._symlist[stage] syms = self._symlist[stage]
if syms is not None and name not in syms: if syms is not None and name not in syms:
return None return None
+2 -1
View File
@@ -216,7 +216,8 @@ def parse_header(val):
u.append(s.decode()) u.append(s.decode())
else: else:
u.append(s.decode()) u.append(s.decode())
u = u''.join(u) u = ''.join(u)
if type(u) is str: return u
for enc in ('us-ascii','iso-8859-1','utf-8'): for enc in ('us-ascii','iso-8859-1','utf-8'):
try: try:
return u.encode(enc) return u.encode(enc)
+3 -2
View File
@@ -108,10 +108,11 @@ import email
from email.message import Message from email.message import Message
try: try:
from email.generator import BytesGenerator from email.generator import BytesGenerator
from email import message_from_binary_file from email import message_from_binary_file, encoders
except: except:
from email.generator import Generator as BytesGenerator from email.generator import Generator as BytesGenerator
from email import message_from_file as message_from_binary_file from email import message_from_file as message_from_binary_file
from email import Encoders as encoders
from email.utils import quote from email.utils import quote
if not getattr(Message,'as_bytes',None): if not getattr(Message,'as_bytes',None):
@@ -534,7 +535,7 @@ def check_html(msg,savname=None):
if htmlfilter.modified: if htmlfilter.modified:
msg.set_payload(out) # remove embedded scripts msg.set_payload(out) # remove embedded scripts
del msg["content-transfer-encoding"] del msg["content-transfer-encoding"]
email.Encoders.encode_quopri(msg) encoders.encode_quopri(msg)
return Milter.CONTINUE return Milter.CONTINUE
if __name__ == '__main__': if __name__ == '__main__':
+4 -1
View File
@@ -43,7 +43,10 @@ class AddrCacheTestCase(unittest.TestCase):
def testParseHeader(self): def testParseHeader(self):
s='=?UTF-8?B?TGFzdCBGZXcgQ29sZHBsYXkgQWxidW0gQXJ0d29ya3MgQXZhaWxhYmxlAA?=' s='=?UTF-8?B?TGFzdCBGZXcgQ29sZHBsYXkgQWxidW0gQXJ0d29ya3MgQXZhaWxhYmxlAA?='
h = Milter.utils.parse_header(s) h = Milter.utils.parse_header(s)
self.assertEqual(h,b'Last Few Coldplay Album Artworks Available\x00') self.assertEqual(h,'Last Few Coldplay Album Artworks Available\x00')
s='=?iso-8859-1?Q?Peter_=D8rum?= <orum@ditas.dk>'
h = Milter.utils.parse_header(s)
self.assertEqual(h,'Peter \xd8rum <orum@ditas.dk>')
@unittest.expectedFailure @unittest.expectedFailure
def testParseAddress(self): def testParseAddress(self):