Skip to content

[WIP] gh-112535: Implement fallback implementation of _Py_ThreadId() #113094

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 39 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
7015d7f
gh-112535: Implement fallback implementation of _Py_ThreadId()
corona10 Dec 14, 2023
1775bc0
Update
corona10 Dec 14, 2023
e811144
Change declaration
corona10 Dec 14, 2023
bc19e2b
Remove empty enter
corona10 Dec 14, 2023
1595b21
Update
corona10 Dec 14, 2023
c791052
nit
corona10 Dec 14, 2023
59bcb6c
gh-113086: Add tests for os.chmod() and os.lchmod() (GH-113087)
serhiy-storchaka Dec 14, 2023
0776d9f
gh-90890: Reorder mailbox.Maildir method documentation (GH-113071)
gildea Dec 14, 2023
43fea31
gh-111049: Fix crash during garbage collection of the BytesIO buffer …
serhiy-storchaka Dec 14, 2023
3689390
Fixing typo in DocTestRunner docs (GH-112326)
dwysocki Dec 14, 2023
daa8577
gh-112205: Update textio module to use `@getter` as possible. (gh-113…
corona10 Dec 14, 2023
6d16217
gh-113090: Fix test.support.os_support.can_chmod() on Windows (GH-113…
serhiy-storchaka Dec 14, 2023
4f84b76
gh-59616: Support os.chmod(follow_symlinks=True) and os.lchmod() on W…
serhiy-storchaka Dec 14, 2023
1ca9c3e
gh-112730: Update docs for colour env vars (#112837)
hugovk Dec 14, 2023
1d20b1f
gh-112716: Fix SystemError when __builtins__ is not a dict (GH-112770)
serhiy-storchaka Dec 14, 2023
f62d371
gh-101100: Fix Sphinx nitpicks in `library/inspect.rst` and `referenc…
AlexWaygood Dec 14, 2023
20757d7
gh-101100: Fix Sphinx nitpicks in `library/traceback.rst` (#113106)
AlexWaygood Dec 14, 2023
de28ab3
GH-112354: Treat _EXIT_TRACE like an unconditional side exit (GH-113104)
markshannon Dec 14, 2023
7a7211e
gh-86179: Avoid making case-only changes when calculating realpath() …
zooba Dec 14, 2023
8e691c3
gh-113113: doc: use less ambiguously named variable (gh-113114)
jeremy-dolan Dec 14, 2023
e6dc5af
GH-111485: Sort metadata tables for easier checking of future diffs (…
markshannon Dec 14, 2023
62fbe10
bpo-36796: Clean the error handling in _testcapimodule.c (GH-13085)
ZackerySpytz Dec 14, 2023
9b62a4e
gh-105912: document gotcha with using os.fork on macOS (#112871)
ronaldoussoren Dec 14, 2023
96ffc38
Add recipe for totient() to demonstrate unique_justseen() and factor(…
rhettinger Dec 14, 2023
adb433e
gh-101100: Fix Sphinx nitpicks in `library/collections.abc.rst` (#113…
AlexWaygood Dec 14, 2023
056266b
Remove itertool recipe with low pedagogical value (gh-113138)
rhettinger Dec 14, 2023
f64e3fa
gh-101100: Fix Sphinx warnings in `whatsnew/2.3.rst` (#112373)
hugovk Dec 14, 2023
a7a2e40
gh-101100: Cleanup `mailbox` docs (#113124)
AlexWaygood Dec 14, 2023
79066a0
Optimize unique_justseen() recipe for a common case. (gh-113147)
rhettinger Dec 14, 2023
eb9bc91
gh-112535: Update _Py_ThreadId() to support RISC-V (gh-113084)
furkanonder Dec 14, 2023
ca0d2a3
gh-101100: Fix Sphinx nitpicks in `library/rlcompleter.rst` (#113125)
AlexWaygood Dec 15, 2023
44368f8
gh-112720: Move dis's cache output code to the Formatter, labels look…
iritkatriel Dec 15, 2023
0f5b1c8
GH-111485: Mark some instructions as `TIER_ONE_ONLY` (GH-113155)
brandtbucher Dec 15, 2023
9df6e0f
gh-61648: Detect line numbers of properties in doctests (GH-113161)
serhiy-storchaka Dec 15, 2023
ddcd546
gh-112278: Add retry in WMI tests in case of slow initialization (GH-…
aisk Dec 15, 2023
837690e
gh-113009: Fix multiprocessing Process.terminate() on Windows (#113128)
vstinner Dec 15, 2023
89b533f
[CVE-2023-27043] gh-102988: Reject malformed addresses in email.parse…
vstinner Dec 15, 2023
6d731a3
gh-113172: Fix compiler warnings in Modules/_xxinterpqueuesmodule.c (…
serhiy-storchaka Dec 15, 2023
e3e3973
Address code review
corona10 Dec 15, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions Doc/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,11 @@
# be resolved, as the method is currently undocumented. For context, see
# https://github.com/python/cpython/pull/103289.
('py:meth', '_SubParsersAction.add_parser'),
# Attributes/methods/etc. that definitely should be documented better,
# but are deferred for now:
('py:attr', '__annotations__'),
('py:attr', '__wrapped__'),
('py:meth', 'index'), # list.index, tuple.index, etc.
]

# gh-106948: Copy standard C types declared in the "c:type" domain to the
Expand Down
80 changes: 41 additions & 39 deletions Doc/library/collections.abc.rst
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

This module provides :term:`abstract base classes <abstract base class>` that
can be used to test whether a class provides a particular interface; for
example, whether it is :term:`hashable` or whether it is a mapping.
example, whether it is :term:`hashable` or whether it is a :term:`mapping`.

An :func:`issubclass` or :func:`isinstance` test for an interface works in one
of three ways.
Expand Down Expand Up @@ -73,7 +73,7 @@ of the API:
>>> isinstance(D(), Sequence)
True

In this example, class :class:`D` does not need to define
In this example, class :class:`!D` does not need to define
``__contains__``, ``__iter__``, and ``__reversed__`` because the
:ref:`in-operator <comparisons>`, the :term:`iteration <iterable>`
logic, and the :func:`reversed` function automatically fall back to
Expand Down Expand Up @@ -183,14 +183,14 @@ ABC Inherits from Abstract Methods Mi

.. rubric:: Footnotes

.. [1] These ABCs override :meth:`object.__subclasshook__` to support
.. [1] These ABCs override :meth:`~abc.ABCMeta.__subclasshook__` to support
testing an interface by verifying the required methods are present
and have not been set to :const:`None`. This only works for simple
interfaces. More complex interfaces require registration or direct
subclassing.

.. [2] Checking ``isinstance(obj, Iterable)`` detects classes that are
registered as :class:`Iterable` or that have an :meth:`__iter__`
registered as :class:`Iterable` or that have an :meth:`~container.__iter__`
method, but it does not detect classes that iterate with the
:meth:`~object.__getitem__` method. The only reliable way to determine
whether an object is :term:`iterable` is to call ``iter(obj)``.
Expand All @@ -202,26 +202,27 @@ Collections Abstract Base Classes -- Detailed Descriptions

.. class:: Container

ABC for classes that provide the :meth:`__contains__` method.
ABC for classes that provide the :meth:`~object.__contains__` method.

.. class:: Hashable

ABC for classes that provide the :meth:`__hash__` method.
ABC for classes that provide the :meth:`~object.__hash__` method.

.. class:: Sized

ABC for classes that provide the :meth:`__len__` method.
ABC for classes that provide the :meth:`~object.__len__` method.

.. class:: Callable

ABC for classes that provide the :meth:`__call__` method.
ABC for classes that provide the :meth:`~object.__call__` method.

.. class:: Iterable

ABC for classes that provide the :meth:`__iter__` method.
ABC for classes that provide the :meth:`~container.__iter__` method.

Checking ``isinstance(obj, Iterable)`` detects classes that are registered
as :class:`Iterable` or that have an :meth:`__iter__` method, but it does
as :class:`Iterable` or that have an :meth:`~container.__iter__` method,
but it does
not detect classes that iterate with the :meth:`~object.__getitem__` method.
The only reliable way to determine whether an object is :term:`iterable`
is to call ``iter(obj)``.
Expand All @@ -240,17 +241,17 @@ Collections Abstract Base Classes -- Detailed Descriptions

.. class:: Reversible

ABC for iterable classes that also provide the :meth:`__reversed__`
ABC for iterable classes that also provide the :meth:`~object.__reversed__`
method.

.. versionadded:: 3.6

.. class:: Generator

ABC for generator classes that implement the protocol defined in
:pep:`342` that extends iterators with the :meth:`~generator.send`,
ABC for :term:`generator` classes that implement the protocol defined in
:pep:`342` that extends :term:`iterators <iterator>` with the
:meth:`~generator.send`,
:meth:`~generator.throw` and :meth:`~generator.close` methods.
See also the definition of :term:`generator`.

.. versionadded:: 3.5

Expand All @@ -261,7 +262,7 @@ Collections Abstract Base Classes -- Detailed Descriptions
ABCs for read-only and mutable :term:`sequences <sequence>`.

Implementation note: Some of the mixin methods, such as
:meth:`__iter__`, :meth:`__reversed__` and :meth:`index`, make
:meth:`~container.__iter__`, :meth:`~object.__reversed__` and :meth:`index`, make
repeated calls to the underlying :meth:`~object.__getitem__` method.
Consequently, if :meth:`~object.__getitem__` is implemented with constant
access speed, the mixin methods will have linear performance;
Expand All @@ -282,7 +283,7 @@ Collections Abstract Base Classes -- Detailed Descriptions
.. class:: Set
MutableSet

ABCs for read-only and mutable sets.
ABCs for read-only and mutable :ref:`sets <types-set>`.

.. class:: Mapping
MutableMapping
Expand All @@ -299,42 +300,42 @@ Collections Abstract Base Classes -- Detailed Descriptions
.. class:: Awaitable

ABC for :term:`awaitable` objects, which can be used in :keyword:`await`
expressions. Custom implementations must provide the :meth:`__await__`
method.
expressions. Custom implementations must provide the
:meth:`~object.__await__` method.

:term:`Coroutine <coroutine>` objects and instances of the
:class:`~collections.abc.Coroutine` ABC are all instances of this ABC.

.. note::
In CPython, generator-based coroutines (generators decorated with
:func:`types.coroutine`) are
*awaitables*, even though they do not have an :meth:`__await__` method.
In CPython, generator-based coroutines (:term:`generators <generator>`
decorated with :func:`@types.coroutine <types.coroutine>`) are
*awaitables*, even though they do not have an :meth:`~object.__await__` method.
Using ``isinstance(gencoro, Awaitable)`` for them will return ``False``.
Use :func:`inspect.isawaitable` to detect them.

.. versionadded:: 3.5

.. class:: Coroutine

ABC for coroutine compatible classes. These implement the
ABC for :term:`coroutine` compatible classes. These implement the
following methods, defined in :ref:`coroutine-objects`:
:meth:`~coroutine.send`, :meth:`~coroutine.throw`, and
:meth:`~coroutine.close`. Custom implementations must also implement
:meth:`__await__`. All :class:`Coroutine` instances are also instances of
:class:`Awaitable`. See also the definition of :term:`coroutine`.
:meth:`~object.__await__`. All :class:`Coroutine` instances are also
instances of :class:`Awaitable`.

.. note::
In CPython, generator-based coroutines (generators decorated with
:func:`types.coroutine`) are
*awaitables*, even though they do not have an :meth:`__await__` method.
In CPython, generator-based coroutines (:term:`generators <generator>`
decorated with :func:`@types.coroutine <types.coroutine>`) are
*awaitables*, even though they do not have an :meth:`~object.__await__` method.
Using ``isinstance(gencoro, Coroutine)`` for them will return ``False``.
Use :func:`inspect.isawaitable` to detect them.

.. versionadded:: 3.5

.. class:: AsyncIterable

ABC for classes that provide ``__aiter__`` method. See also the
ABC for classes that provide an ``__aiter__`` method. See also the
definition of :term:`asynchronous iterable`.

.. versionadded:: 3.5
Expand All @@ -348,7 +349,7 @@ Collections Abstract Base Classes -- Detailed Descriptions

.. class:: AsyncGenerator

ABC for asynchronous generator classes that implement the protocol
ABC for :term:`asynchronous generator` classes that implement the protocol
defined in :pep:`525` and :pep:`492`.

.. versionadded:: 3.6
Expand All @@ -373,9 +374,9 @@ particular functionality, for example::
Several of the ABCs are also useful as mixins that make it easier to develop
classes supporting container APIs. For example, to write a class supporting
the full :class:`Set` API, it is only necessary to supply the three underlying
abstract methods: :meth:`__contains__`, :meth:`__iter__`, and :meth:`__len__`.
The ABC supplies the remaining methods such as :meth:`__and__` and
:meth:`isdisjoint`::
abstract methods: :meth:`~object.__contains__`, :meth:`~container.__iter__`, and
:meth:`~object.__len__`. The ABC supplies the remaining methods such as
:meth:`!__and__` and :meth:`~frozenset.isdisjoint`::

class ListBasedSet(collections.abc.Set):
''' Alternate set implementation favoring space over speed
Expand Down Expand Up @@ -403,23 +404,24 @@ Notes on using :class:`Set` and :class:`MutableSet` as a mixin:

(1)
Since some set operations create new sets, the default mixin methods need
a way to create new instances from an iterable. The class constructor is
a way to create new instances from an :term:`iterable`. The class constructor is
assumed to have a signature in the form ``ClassName(iterable)``.
That assumption is factored-out to an internal classmethod called
:meth:`_from_iterable` which calls ``cls(iterable)`` to produce a new set.
That assumption is factored-out to an internal :class:`classmethod` called
:meth:`!_from_iterable` which calls ``cls(iterable)`` to produce a new set.
If the :class:`Set` mixin is being used in a class with a different
constructor signature, you will need to override :meth:`_from_iterable`
constructor signature, you will need to override :meth:`!_from_iterable`
with a classmethod or regular method that can construct new instances from
an iterable argument.

(2)
To override the comparisons (presumably for speed, as the
semantics are fixed), redefine :meth:`__le__` and :meth:`__ge__`,
semantics are fixed), redefine :meth:`~object.__le__` and
:meth:`~object.__ge__`,
then the other operations will automatically follow suit.

(3)
The :class:`Set` mixin provides a :meth:`_hash` method to compute a hash value
for the set; however, :meth:`__hash__` is not defined because not all sets
The :class:`Set` mixin provides a :meth:`!_hash` method to compute a hash value
for the set; however, :meth:`~object.__hash__` is not defined because not all sets
are :term:`hashable` or immutable. To add set hashability using mixins,
inherit from both :meth:`Set` and :meth:`Hashable`, then define
``__hash__ = Set._hash``.
Expand Down
2 changes: 1 addition & 1 deletion Doc/library/doctest.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1502,7 +1502,7 @@ DocTestRunner objects
:attr:`failures` and :attr:`skips` attributes. The :meth:`run` and
:meth:`summarize` methods return a :class:`TestResults` instance.

:class:`DocTestParser` defines the following methods:
:class:`DocTestRunner` defines the following methods:


.. method:: report_start(out, test, example)
Expand Down
19 changes: 15 additions & 4 deletions Doc/library/email.utils.rst
Original file line number Diff line number Diff line change
Expand Up @@ -58,13 +58,18 @@ of the new API.
begins with angle brackets, they are stripped off.


.. function:: parseaddr(address)
.. function:: parseaddr(address, *, strict=True)

Parse address -- which should be the value of some address-containing field such
as :mailheader:`To` or :mailheader:`Cc` -- into its constituent *realname* and
*email address* parts. Returns a tuple of that information, unless the parse
fails, in which case a 2-tuple of ``('', '')`` is returned.

If *strict* is true, use a strict parser which rejects malformed inputs.

.. versionchanged:: 3.13
Add *strict* optional parameter and reject malformed inputs by default.


.. function:: formataddr(pair, charset='utf-8')

Expand All @@ -82,12 +87,15 @@ of the new API.
Added the *charset* option.


.. function:: getaddresses(fieldvalues)
.. function:: getaddresses(fieldvalues, *, strict=True)

This method returns a list of 2-tuples of the form returned by ``parseaddr()``.
*fieldvalues* is a sequence of header field values as might be returned by
:meth:`Message.get_all <email.message.Message.get_all>`. Here's a simple
example that gets all the recipients of a message::
:meth:`Message.get_all <email.message.Message.get_all>`.

If *strict* is true, use a strict parser which rejects malformed inputs.

Here's a simple example that gets all the recipients of a message::

from email.utils import getaddresses

Expand All @@ -97,6 +105,9 @@ of the new API.
resent_ccs = msg.get_all('resent-cc', [])
all_recipients = getaddresses(tos + ccs + resent_tos + resent_ccs)

.. versionchanged:: 3.13
Add *strict* optional parameter and reject malformed inputs by default.


.. function:: parsedate(date)

Expand Down
2 changes: 1 addition & 1 deletion Doc/library/exceptions.rst
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ Exception context
__suppress_context__ (exception attribute)

Three attributes on exception objects provide information about the context in
which an the exception was raised:
which the exception was raised:

.. attribute:: BaseException.__context__
BaseException.__cause__
Expand Down
Loading