summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/library/email.policy.rst4
-rw-r--r--Lib/email/_policybase.py2
-rw-r--r--Lib/email/feedparser.py6
-rw-r--r--Lib/email/message.py3
-rw-r--r--Lib/test/test_email/test_policy.py2
5 files changed, 9 insertions, 8 deletions
diff --git a/Doc/library/email.policy.rst b/Doc/library/email.policy.rst
index b345683..8a41877 100644
--- a/Doc/library/email.policy.rst
+++ b/Doc/library/email.policy.rst
@@ -224,8 +224,8 @@ added matters. To illustrate::
.. attribute:: message_factory
A factory function for constructing a new empty message object. Used
- by the parser when building messages. Defaults to
- :class:`~email.message.Message`.
+ by the parser when building messages. Defaults to ``None``, in
+ which case :class:`~email.message.Message` is used.
.. versionadded:: 3.6
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
diff --git a/Lib/test/test_email/test_policy.py b/Lib/test/test_email/test_policy.py
index 1d95d03..8fecb8a 100644
--- a/Lib/test/test_email/test_policy.py
+++ b/Lib/test/test_email/test_policy.py
@@ -24,7 +24,7 @@ class PolicyAPITests(unittest.TestCase):
'cte_type': '8bit',
'raise_on_defect': False,
'mangle_from_': True,
- 'message_factory': email.message.Message,
+ 'message_factory': None,
}
# These default values are the ones set on email.policy.default.
# If any of these defaults change, the docs must be updated.