summaryrefslogtreecommitdiffstats
path: root/Lib/email
diff options
context:
space:
mode:
authorR David Murray <rdmurray@bitdance.com>2016-09-10 04:22:25 (GMT)
committerR David Murray <rdmurray@bitdance.com>2016-09-10 04:22:25 (GMT)
commitb067c8fdd1e205bd0411417b6d5e4b832c3773fc (patch)
tree1bd428963f46ae7cec4bceedfc9c3a049ce3102e /Lib/email
parentc7454ff5fcd8d216495990df7db11be73e273a33 (diff)
downloadcpython-b067c8fdd1e205bd0411417b6d5e4b832c3773fc.zip
cpython-b067c8fdd1e205bd0411417b6d5e4b832c3773fc.tar.gz
cpython-b067c8fdd1e205bd0411417b6d5e4b832c3773fc.tar.bz2
#20476: Deal with the message_factory circular import differently.
It turns out we can't depend on email.message getting imported every place message_factory is needed, so to avoid a circular import we need to special case Policy.message_factory=None in the parser instead of using monkey patching. I had a feeling that was a bad idea when I did it.
Diffstat (limited to 'Lib/email')
-rw-r--r--Lib/email/_policybase.py2
-rw-r--r--Lib/email/feedparser.py6
-rw-r--r--Lib/email/message.py3
3 files changed, 6 insertions, 5 deletions
diff --git a/Lib/email/_policybase.py b/Lib/email/_policybase.py
index d699484..df46496 100644
--- a/Lib/email/_policybase.py
+++ b/Lib/email/_policybase.py
@@ -155,6 +155,7 @@ class Policy(_PolicyBase, metaclass=abc.ABCMeta):
serialized by a generator. Default: True.
message_factory -- the class to use to create new message objects.
+ If the value is None, the default is Message.
"""
@@ -163,7 +164,6 @@ class Policy(_PolicyBase, metaclass=abc.ABCMeta):
cte_type = '8bit'
max_line_length = 78
mangle_from_ = False
- # XXX To avoid circular imports, this is set in email.message.
message_factory = None
def handle_defect(self, obj, defect):
diff --git a/Lib/email/feedparser.py b/Lib/email/feedparser.py
index 3d74978..7c07ca8 100644
--- a/Lib/email/feedparser.py
+++ b/Lib/email/feedparser.py
@@ -147,7 +147,11 @@ class FeedParser:
self.policy = policy
self._old_style_factory = False
if _factory is None:
- self._factory = policy.message_factory
+ if policy.message_factory is None:
+ from email.message import Message
+ self._factory = Message
+ else:
+ self._factory = policy.message_factory
else:
self._factory = _factory
try:
diff --git a/Lib/email/message.py b/Lib/email/message.py
index f4380d9..b6512f2 100644
--- a/Lib/email/message.py
+++ b/Lib/email/message.py
@@ -1162,6 +1162,3 @@ class EmailMessage(MIMEPart):
super().set_content(*args, **kw)
if 'MIME-Version' not in self:
self['MIME-Version'] = '1.0'
-
-# Set message_factory on Policy here to avoid a circular import.
-Policy.message_factory = Message