diff options
author | R David Murray <rdmurray@bitdance.com> | 2016-09-10 04:22:25 (GMT) |
---|---|---|
committer | R David Murray <rdmurray@bitdance.com> | 2016-09-10 04:22:25 (GMT) |
commit | b067c8fdd1e205bd0411417b6d5e4b832c3773fc (patch) | |
tree | 1bd428963f46ae7cec4bceedfc9c3a049ce3102e /Lib/email | |
parent | c7454ff5fcd8d216495990df7db11be73e273a33 (diff) | |
download | cpython-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.py | 2 | ||||
-rw-r--r-- | Lib/email/feedparser.py | 6 | ||||
-rw-r--r-- | Lib/email/message.py | 3 |
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 |