mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
#11731: simplify/enhance parser/generator API by introducing policy objects.
This new interface will also allow for future planned enhancements in control over the parser/generator without requiring any additional complexity in the parser/generator API. Patch reviewed by Éric Araujo and Barry Warsaw.
This commit is contained in:
parent
ce16be91dc
commit
3edd22ac95
13 changed files with 912 additions and 81 deletions
|
@ -58,12 +58,18 @@ list of defects that it can find.
|
|||
Here is the API for the :class:`FeedParser`:
|
||||
|
||||
|
||||
.. class:: FeedParser(_factory=email.message.Message)
|
||||
.. class:: FeedParser(_factory=email.message.Message, *, policy=policy.default)
|
||||
|
||||
Create a :class:`FeedParser` instance. Optional *_factory* is a no-argument
|
||||
callable that will be called whenever a new message object is needed. It
|
||||
defaults to the :class:`email.message.Message` class.
|
||||
|
||||
The *policy* keyword specifies a :mod:`~email.policy` object that controls a
|
||||
number of aspects of the parser's operation. The default policy maintains
|
||||
backward compatibility.
|
||||
|
||||
.. versionchanged:: 3.3 Added the *policy* keyword.
|
||||
|
||||
.. method:: feed(data)
|
||||
|
||||
Feed the :class:`FeedParser` some more data. *data* should be a string
|
||||
|
@ -104,7 +110,7 @@ have the same API as the :class:`Parser` and :class:`BytesParser` classes.
|
|||
.. versionadded:: 3.3 BytesHeaderParser
|
||||
|
||||
|
||||
.. class:: Parser(_class=email.message.Message)
|
||||
.. class:: Parser(_class=email.message.Message, *, policy=policy.default)
|
||||
|
||||
The constructor for the :class:`Parser` class takes an optional argument
|
||||
*_class*. This must be a callable factory (such as a function or a class), and
|
||||
|
@ -112,8 +118,13 @@ have the same API as the :class:`Parser` and :class:`BytesParser` classes.
|
|||
:class:`~email.message.Message` (see :mod:`email.message`). The factory will
|
||||
be called without arguments.
|
||||
|
||||
.. versionchanged:: 3.2
|
||||
Removed the *strict* argument that was deprecated in 2.4.
|
||||
The *policy* keyword specifies a :mod:`~email.policy` object that controls a
|
||||
number of aspects of the parser's operation. The default policy maintains
|
||||
backward compatibility.
|
||||
|
||||
.. versionchanged:: 3.3
|
||||
Removed the *strict* argument that was deprecated in 2.4. Added the
|
||||
*policy* keyword.
|
||||
|
||||
The other public :class:`Parser` methods are:
|
||||
|
||||
|
@ -144,12 +155,18 @@ have the same API as the :class:`Parser` and :class:`BytesParser` classes.
|
|||
the entire contents of the file.
|
||||
|
||||
|
||||
.. class:: BytesParser(_class=email.message.Message, strict=None)
|
||||
.. class:: BytesParser(_class=email.message.Message, *, policy=policy.default)
|
||||
|
||||
This class is exactly parallel to :class:`Parser`, but handles bytes input.
|
||||
The *_class* and *strict* arguments are interpreted in the same way as for
|
||||
the :class:`Parser` constructor. *strict* is supported only to make porting
|
||||
code easier; it is deprecated.
|
||||
the :class:`Parser` constructor.
|
||||
|
||||
The *policy* keyword specifies a :mod:`~email.policy` object that
|
||||
controls a number of aspects of the parser's operation. The default
|
||||
policy maintains backward compatibility.
|
||||
|
||||
.. versionchanged:: 3.3
|
||||
Removed the *strict* argument. Added the *policy* keyword.
|
||||
|
||||
.. method:: parse(fp, headeronly=False)
|
||||
|
||||
|
@ -187,12 +204,15 @@ in the top-level :mod:`email` package namespace.
|
|||
|
||||
.. currentmodule:: email
|
||||
|
||||
.. function:: message_from_string(s, _class=email.message.Message, strict=None)
|
||||
.. function:: message_from_string(s, _class=email.message.Message, *, \
|
||||
policy=policy.default)
|
||||
|
||||
Return a message object structure from a string. This is exactly equivalent to
|
||||
``Parser().parsestr(s)``. Optional *_class* and *strict* are interpreted as
|
||||
``Parser().parsestr(s)``. *_class* and *policy* are interpreted as
|
||||
with the :class:`Parser` class constructor.
|
||||
|
||||
.. versionchanged:: removed *strict*, added *policy*
|
||||
|
||||
.. function:: message_from_bytes(s, _class=email.message.Message, strict=None)
|
||||
|
||||
Return a message object structure from a byte string. This is exactly
|
||||
|
@ -200,21 +220,27 @@ in the top-level :mod:`email` package namespace.
|
|||
*strict* are interpreted as with the :class:`Parser` class constructor.
|
||||
|
||||
.. versionadded:: 3.2
|
||||
.. versionchanged:: 3.3 removed *strict*, added *policy*
|
||||
|
||||
.. function:: message_from_file(fp, _class=email.message.Message, strict=None)
|
||||
.. function:: message_from_file(fp, _class=email.message.Message, *, \
|
||||
policy=policy.default)
|
||||
|
||||
Return a message object structure tree from an open :term:`file object`.
|
||||
This is exactly equivalent to ``Parser().parse(fp)``. Optional *_class*
|
||||
and *strict* are interpreted as with the :class:`Parser` class constructor.
|
||||
This is exactly equivalent to ``Parser().parse(fp)``. *_class*
|
||||
and *policy* are interpreted as with the :class:`Parser` class constructor.
|
||||
|
||||
.. function:: message_from_binary_file(fp, _class=email.message.Message, strict=None)
|
||||
.. versionchanged:: 3.3 removed *strict*, added *policy*
|
||||
|
||||
.. function:: message_from_binary_file(fp, _class=email.message.Message, *, \
|
||||
policy=policy.default)
|
||||
|
||||
Return a message object structure tree from an open binary :term:`file
|
||||
object`. This is exactly equivalent to ``BytesParser().parse(fp)``.
|
||||
Optional *_class* and *strict* are interpreted as with the :class:`Parser`
|
||||
*_class* and *policy* are interpreted as with the :class:`Parser`
|
||||
class constructor.
|
||||
|
||||
.. versionadded:: 3.2
|
||||
.. versionchanged:: 3.3 removed *strict*, added *policy*
|
||||
|
||||
Here's an example of how you might use this at an interactive Python prompt::
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue