forked from pool/python312
		
	Accepting request 1102652 from home:dgarcia:branches:devel:languages:python:Factory
- Refresh all patches
- Drop Revert-gh105127-left-tests.patch, in upstream now
- Update to 3.12.0rc1:
  - Reverted the :mod:`email.utils` security improvement change
    released in 3.12beta4 that unintentionally caused
    :mod:`email.utils.getaddresses` to fail to parse email addresses
    with a comma in the quoted name field. See :gh:`106669`.
  - Start initializing ob_digit during creation of
    :c:type:`PyLongObject` objects. Patch by Illia Volochii.
  - Increase C recursion limit for functions other than the main
    interpreter from 800 to 1500. This should allow functions like
    list.__repr__ and json.dumps to handle all the inputs that they
    could prior to 3.12
  - Fix potential unaligned memory access on C APIs involving returned
    sequences of char * pointers within the :mod:`grp` and
    :mod:`socket` modules. These were revealed using a
    -fsaniziter=alignment build on ARM macOS. Patch by Christopher
    Chavez.
  - Add the exception as the third argument to PY_UNIND callbacks in
    sys.monitoring. This makes the PY_UNWIND callback consistent with
    the other exception hanlding callbacks.
  - Raise a ValueError when a monitoring callback funtion returns
    DISABLE for events that cannot be disabled locally.
  - Add a RERAISE event to sys.monitoring, which occurs when an
    exception is reraised, either explicitly by a plain raise
    statement, or implicitly in an except or finally block.
  - Unsupported modules now always fail to be imported.
  - Fix classmethod-style :func:`super` method calls (i.e., where the
    second argument to :func:`super`, or the implied second argument
    drawn from self/cls in the case of zero-arg super, is a type) when
    the target of the call is not a classmethod.
  - Python no longer crashes due an infrequent race when initialzing
    per-interpreter interned strings. The crash would manifest when
    the interpreter was finalized.
  - Python no longer crashes due to an infrequent race in setting
    Py_FileSystemDefaultEncoding and Py_FileSystemDefaultEncodeErrors
    (both deprecated), when simultaneously initializing two isolated
    subinterpreters. Now they are only set during runtime
    initialization.
  - Fix a segmentation fault caused by a use-after-free bug in
    frame_dealloc when the trashcan delays the deallocation of a
    PyFrameObject.
  - No longer suppress arbitrary errors in the __annotations__ getter
    and setter in the type and module types.
  - Propagate frozen_modules to multiprocessing spawned process
    interpreters.
  - Prevent out-of-bounds memory access during mmap.find() calls.
  - Seems that in some conditions, OpenSSL will return
    SSL_ERROR_SYSCALL instead of SSL_ERROR_SSL when a certification
    verification has failed, but the error parameters will still
    contain ERR_LIB_SSL and SSL_R_CERTIFICATE_VERIFY_FAILED. We are
    now detecting this situation and raising the appropiate
    ssl.SSLCertVerificationError. Patch by Pablo Galindo
  - Fix :func:`types.get_original_bases` to only return
    :attr:`!__orig_bases__` if it is present on cls directly. Patch by
    James Hilton-Balfe.
  - Prevent memory leak and use-after-free when using pointers to
    pointers with ctypes
  - Make :func:`gettext.pgettext` search plural definitions when
    translation is not found.
  - Document behavior of :func:`shutil.disk_usage` for non-mounted
    filesystems on Unix.
  - Do not report MultipartInvariantViolationDefect defect when the
    :class:`email.parser.Parser` class is used to parse emails with
    headersonly=True.
  - Fix invalid result from :meth:`PurePath.relative_to` method when
    attempting to walk a ".." segment in other with walk_up enabled. A
    :exc:`ValueError` exception is now raised in this case.
  - Fix potential missing NULL check of d2i_SSL_SESSION result in
    _ssl.c.
  - Update the bundled copy of pip to version 23.2.1.
  - Fixed several bugs in zipfile.Path, including: in Path.match`,
    Windows separators are no longer honored (and never were meant to
    be); Fixed ``name/suffix/suffixes/stem operations when no filename
    is present and the Path is not at the root of the zipfile;
    Reworked glob for performance and more correct matching behavior.
  - Add __copy__ and __deepcopy__ in :mod:`enum`
  - Revert a change to :func:`colorsys.rgb_to_hls` that caused
    division by zero for certain almost-white inputs. Patch by Terry
    Jan Reedy.
  - Instances of :class:`typing.TypeVar`, :class:`typing.ParamSpec`,
    :class:`typing.ParamSpecArgs`, :class:`typing.ParamSpecKwargs`,
    and :class:`typing.TypeVarTuple` once again support weak
    references, fixing a regression introduced in Python 3.12.0 beta
    1. Patch by Jelle Zijlstra.
  - Detect possible memory allocation failure in the libtommath
    function :c:func:`mp_init` used by the _tkinter module.
  - Fix crash when calling repr with a manually constructed SignalDict
    object. Patch by Charlie Zhao.
  - Change the default return value of
    :meth:`http.client.HTTPConnection.get_proxy_response_headers` to
    be None and not {}.
  - Ensure gettext(msg) retrieve translations even if a plural form
    exists. In other words: gettext(msg) == ngettext(msg, '', 1).
  - Add documentation for :c:type:`PyInterpreterConfig` and
    :c:func:`Py_NewInterpreterFromConfig`. Also clarify some of the
    nearby docs relative to per-interpreter GIL.
  - Document the :mod:`curses` module variables :const:`~curses.LINES`
    and :const:`~curses.COLS`.
  - Add a number of standard external names to nitpick_ignore.
  - Add documentation on how to localize the :mod:`argparse` module.
  - test_logging: Fix test_udp_reconnection() by increasing the
    timeout from 100 ms to 5 minutes (LONG_TIMEOUT). Patch by Victor
    Stinner.
  - test_capi: Fix test_no_FatalError_infinite_loop() to no longer
    write a coredump, by using test.support.SuppressCrashReport. Patch
    by Victor Stinner.
  - Avoid creating a reference to the test object in
    :meth:`~unittest.TestResult.collectedDurations`.
  - Moved tests for zipfile.Path into Lib/test/test_zipfile/_path.
    Made zipfile._path a package.
  - Check for linux/limits.h before including it in
    Modules/posixmodule.c.
  - Detect MPI compilers in :file:`configure`.
  - Add experimental wasi-threads support. Patch by Takashi Yamamoto.
  - Update Windows build to use OpenSSL 3.0.9
  - Update macOS installer to use OpenSSL 3.0.9.
  - Fix bugs in the Argument Clinic destination <name> clear command;
    the destination buffers would never be cleared, and the
    destination directive parser would simply continue to the fault
    handler after processing the command. Patch by Erlend E. Aasland.
  - freeze now fetches CONFIG_ARGS from the original CPython instance
    the Makefile uses to call utility scripts. Patch by Ijtaba
    Hussain.
  - :c:func:`PyModule_AddObjectRef` is now only available in the
    limited API version 3.10 or later.
OBS-URL: https://build.opensuse.org/request/show/1102652
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python312?expand=0&rev=19
			
			
This commit is contained in:
		@@ -29,10 +29,10 @@ Co-authored-by: Lumír Balhar <frenzy.madness@gmail.com>
 | 
			
		||||
 Lib/test/test_sysconfig.py | 17 +++++++++++--
 | 
			
		||||
 3 files changed, 71 insertions(+), 4 deletions(-)
 | 
			
		||||
 | 
			
		||||
Index: Python-3.12.0b1/Lib/site.py
 | 
			
		||||
Index: Python-3.12.0rc1/Lib/site.py
 | 
			
		||||
===================================================================
 | 
			
		||||
--- Python-3.12.0b1.orig/Lib/site.py
 | 
			
		||||
+++ Python-3.12.0b1/Lib/site.py
 | 
			
		||||
--- Python-3.12.0rc1.orig/Lib/site.py
 | 
			
		||||
+++ Python-3.12.0rc1/Lib/site.py
 | 
			
		||||
@@ -377,8 +377,15 @@ def getsitepackages(prefixes=None):
 | 
			
		||||
     return sitepackages
 | 
			
		||||
 
 | 
			
		||||
@@ -50,10 +50,10 @@ Index: Python-3.12.0b1/Lib/site.py
 | 
			
		||||
     for sitedir in getsitepackages(prefixes):
 | 
			
		||||
         if os.path.isdir(sitedir):
 | 
			
		||||
             addsitedir(sitedir, known_paths)
 | 
			
		||||
Index: Python-3.12.0b1/Lib/sysconfig.py
 | 
			
		||||
Index: Python-3.12.0rc1/Lib/sysconfig.py
 | 
			
		||||
===================================================================
 | 
			
		||||
--- Python-3.12.0b1.orig/Lib/sysconfig.py
 | 
			
		||||
+++ Python-3.12.0b1/Lib/sysconfig.py
 | 
			
		||||
--- Python-3.12.0rc1.orig/Lib/sysconfig.py
 | 
			
		||||
+++ Python-3.12.0rc1/Lib/sysconfig.py
 | 
			
		||||
@@ -104,6 +104,11 @@ if os.name == 'nt':
 | 
			
		||||
 else:
 | 
			
		||||
     _INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['posix_venv']
 | 
			
		||||
@@ -128,10 +128,10 @@ Index: Python-3.12.0b1/Lib/sysconfig.py
 | 
			
		||||
     if os.name == 'nt':
 | 
			
		||||
         # On Windows we want to substitute 'lib' for schemes rather
 | 
			
		||||
         # than the native value (without modifying vars, in case it
 | 
			
		||||
Index: Python-3.12.0b1/Lib/test/test_sysconfig.py
 | 
			
		||||
Index: Python-3.12.0rc1/Lib/test/test_sysconfig.py
 | 
			
		||||
===================================================================
 | 
			
		||||
--- Python-3.12.0b1.orig/Lib/test/test_sysconfig.py
 | 
			
		||||
+++ Python-3.12.0b1/Lib/test/test_sysconfig.py
 | 
			
		||||
--- Python-3.12.0rc1.orig/Lib/test/test_sysconfig.py
 | 
			
		||||
+++ Python-3.12.0rc1/Lib/test/test_sysconfig.py
 | 
			
		||||
@@ -110,8 +110,19 @@ class TestSysConfig(unittest.TestCase):
 | 
			
		||||
         for scheme in _INSTALL_SCHEMES:
 | 
			
		||||
             for name in _INSTALL_SCHEMES[scheme]:
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
version https://git-lfs.github.com/spec/v1
 | 
			
		||||
oid sha256:f05710c36aee5850f5c2769be76b80bf212aec351438fdf8adc20c38c8361fac
 | 
			
		||||
size 20244176
 | 
			
		||||
@@ -1,18 +0,0 @@
 | 
			
		||||
-----BEGIN PGP SIGNATURE-----
 | 
			
		||||
 | 
			
		||||
iQKTBAABCgB9FiEEcWlgX2LHUTVtBUomqCHmgOX6YwUFAmStSfVfFIAAAAAALgAo
 | 
			
		||||
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDcx
 | 
			
		||||
Njk2MDVGNjJDNzUxMzU2RDA1NEEyNkE4MjFFNjgwRTVGQTYzMDUACgkQqCHmgOX6
 | 
			
		||||
YwW0RQ//cCsYuhgw+RUslhcDQSNDc+Fuhb0estm7MRzH7VnkUwrrKMTTedWxGp8z
 | 
			
		||||
KrJmsH/PRL1c+AX9+1Hi9sr4enh9jgV1KQuqW7TfqS7w+qhlt9krdaDX7zdHqy2k
 | 
			
		||||
K0KLua5bv62MBPF5hPM6cP71WJcOsZZLw7r2Cx6USapq6hnSuew7XpSB9zqyehLs
 | 
			
		||||
bZOHIAlI1DK6sIdmO42fJr9AZWIO3Z5QhQLglMrHcn9LIp9P/gftVSLt2ZnPQ0qE
 | 
			
		||||
2f8d+XyEP0OG+oErbu+aZxHBroVSTEqp85lEVee/Sr0r8+dOJzgF/vVnpHKzu54M
 | 
			
		||||
csmRXVljhMm+Iy2rzIuSvI3YFqPL7PBUezRuGDeUDFwkapt+XsiO0eMddxX7W7U2
 | 
			
		||||
isinSriLFmAKxHiIy76E8ELkJ/uUxNdN3Hgqey9g5VbfpEYUGSBT6wGoG3FQ3jHq
 | 
			
		||||
gI0XqxSfTqVyM7XBlg2Uyf+3wv4Vhku/6xH3CTPEJYGqiR9ZobR1cv3MMAtRQodx
 | 
			
		||||
5kD0Rhb9MF0Q/LEIAF0W99mJaAhn+wpf0bwP4/U+3LXmH5RsKoe8eGnyAGiejVn7
 | 
			
		||||
RajZUhFRqsC2g+n9sjhXX+vNPcbl4OykTZat94Bfq5jBBRBlm0nx5Qf/bCFzmjzM
 | 
			
		||||
v3s2FWCQ8eM0sgPQkSYn3Zal9pEG+iDXtz7ODrsl998RlkknjrA=
 | 
			
		||||
=aiWo
 | 
			
		||||
-----END PGP SIGNATURE-----
 | 
			
		||||
							
								
								
									
										3
									
								
								Python-3.12.0rc1.tar.xz
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Python-3.12.0rc1.tar.xz
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
version https://git-lfs.github.com/spec/v1
 | 
			
		||||
oid sha256:bd88d516b51474d7facae3ed7ab6a421efb17e583c21c8a749470f293e2575fc
 | 
			
		||||
size 20285264
 | 
			
		||||
							
								
								
									
										18
									
								
								Python-3.12.0rc1.tar.xz.asc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								Python-3.12.0rc1.tar.xz.asc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
-----BEGIN PGP SIGNATURE-----
 | 
			
		||||
 | 
			
		||||
iQKTBAABCgB9FiEEcWlgX2LHUTVtBUomqCHmgOX6YwUFAmTOQCpfFIAAAAAALgAo
 | 
			
		||||
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDcx
 | 
			
		||||
Njk2MDVGNjJDNzUxMzU2RDA1NEEyNkE4MjFFNjgwRTVGQTYzMDUACgkQqCHmgOX6
 | 
			
		||||
YwX5DxAAjL+OpYDuAssAXPIdLU4VlzR+whI1kCquPHIgBn8u+xWqgzVMwEyd8x2i
 | 
			
		||||
OdvQj+206Hh2sspsrys+sBkyPqGzo/mjlRe18CQvHU8FrjPj8IsZgSU6/gpKcfZL
 | 
			
		||||
ZJzUeG6jy6jy2LygM2cmgDEhr8kl6fNQ5hAV/jkpuzLZe0M4oEsKQRCQVC5D8rSE
 | 
			
		||||
5NLV6ZUK8/MeFd6S3BXSsUrx1bgr0Pi2YDlfTAqB++BBWiQiLsclNpwvMHlcu1D4
 | 
			
		||||
z3QM3GXBkUQrh2QAtRKomJdqDILdakIuJg+aKD+ZuRZxzNcdFBVH9PBbSpfObSJ9
 | 
			
		||||
ohBkpVo+MpEDJNq64N9AjnH0xT/cpvGimmsoVZ+zMU26uDm4qyGoDfem2UNgHuaz
 | 
			
		||||
4m+QmDoIUSYbhegsMXzcPRyGFKFb6fOCyWBQbb2YB6oo2vPVYNNpHFsMx21Gi43K
 | 
			
		||||
54vk0eBYzVBChOsY+igEdFZMbwQ7PEkajGbgQ4FiXhGlA7otQp7mx/IxjVcT1SxA
 | 
			
		||||
A07fXAFYF2aZkLlw4V09EeDdkrcO00pCGtTGXhfFCO0KsfyAWm3k8xLGgLFVzDyl
 | 
			
		||||
afMTMo2W5kEeL2Ui8fkxWBBtvF8xrF67XT6vT+kaElk1yrG8dIixG0fEVsoDPpz2
 | 
			
		||||
edbb/Kd5MNyWzjMfJaW9otlH7KjPBPRuQzubgmBXXDBxij5C1UI=
 | 
			
		||||
=rhXA
 | 
			
		||||
-----END PGP SIGNATURE-----
 | 
			
		||||
@@ -1,299 +0,0 @@
 | 
			
		||||
From 4288c623d62cf90d8e4444facb3379fb06d01140 Mon Sep 17 00:00:00 2001
 | 
			
		||||
From: "Gregory P. Smith" <greg@krypto.org>
 | 
			
		||||
Date: Thu, 20 Jul 2023 20:30:52 -0700
 | 
			
		||||
Subject: [PATCH] [3.12] gh-106669: Revert "gh-102988: Detect email address
 | 
			
		||||
 parsing errors ... (GH-105127)" (GH-106733)
 | 
			
		||||
 | 
			
		||||
This reverts commit 18dfbd035775c15533d13a98e56b1d2bf5c65f00.
 | 
			
		||||
Adds a regression test from the issue.
 | 
			
		||||
 | 
			
		||||
See https://github.com/python/cpython/issues/106669..
 | 
			
		||||
(cherry picked from commit a31dea1feb61793e48fa9aa5014f358352205c1d)
 | 
			
		||||
 | 
			
		||||
Co-authored-by: Gregory P. Smith <greg@krypto.org>
 | 
			
		||||
---
 | 
			
		||||
 Doc/library/email.utils.rst                                              |   26 --
 | 
			
		||||
 Doc/whatsnew/3.12.rst                                                    |    8 
 | 
			
		||||
 Lib/email/utils.py                                                       |   63 ------
 | 
			
		||||
 Lib/test/test_email/test_email.py                                        |   96 +---------
 | 
			
		||||
 Misc/NEWS.d/next/Security/2023-06-13-20-52-24.gh-issue-102988.Kei7Vf.rst |    4 
 | 
			
		||||
 5 files changed, 30 insertions(+), 167 deletions(-)
 | 
			
		||||
 create mode 100644 Misc/NEWS.d/next/Security/2023-06-13-20-52-24.gh-issue-102988.Kei7Vf.rst
 | 
			
		||||
 | 
			
		||||
Index: Python-3.12.0b4/Doc/library/email.utils.rst
 | 
			
		||||
===================================================================
 | 
			
		||||
--- Python-3.12.0b4.orig/Doc/library/email.utils.rst
 | 
			
		||||
+++ Python-3.12.0b4/Doc/library/email.utils.rst
 | 
			
		||||
@@ -65,11 +65,6 @@ of the new API.
 | 
			
		||||
    *email address* parts.  Returns a tuple of that information, unless the parse
 | 
			
		||||
    fails, in which case a 2-tuple of ``('', '')`` is returned.
 | 
			
		||||
 
 | 
			
		||||
-   .. versionchanged:: 3.12
 | 
			
		||||
-      For security reasons, addresses that were ambiguous and could parse into
 | 
			
		||||
-      multiple different addresses now cause ``('', '')`` to be returned
 | 
			
		||||
-      instead of only one of the *potential* addresses.
 | 
			
		||||
-
 | 
			
		||||
 
 | 
			
		||||
 .. function:: formataddr(pair, charset='utf-8')
 | 
			
		||||
 
 | 
			
		||||
@@ -92,7 +87,7 @@ of the new API.
 | 
			
		||||
    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:
 | 
			
		||||
+   example that gets all the recipients of a message::
 | 
			
		||||
 
 | 
			
		||||
       from email.utils import getaddresses
 | 
			
		||||
 
 | 
			
		||||
@@ -102,25 +97,6 @@ of the new API.
 | 
			
		||||
       resent_ccs = msg.get_all('resent-cc', [])
 | 
			
		||||
       all_recipients = getaddresses(tos + ccs + resent_tos + resent_ccs)
 | 
			
		||||
 
 | 
			
		||||
-   When parsing fails for a single fieldvalue, a 2-tuple of ``('', '')``
 | 
			
		||||
-   is returned in its place.  Other errors in parsing the list of
 | 
			
		||||
-   addresses such as a fieldvalue seemingly parsing into multiple
 | 
			
		||||
-   addresses may result in a list containing a single empty 2-tuple
 | 
			
		||||
-   ``[('', '')]`` being returned rather than returning potentially
 | 
			
		||||
-   invalid output.
 | 
			
		||||
-
 | 
			
		||||
-   Example malformed input parsing:
 | 
			
		||||
-
 | 
			
		||||
-   .. doctest::
 | 
			
		||||
-
 | 
			
		||||
-      >>> from email.utils import getaddresses
 | 
			
		||||
-      >>> getaddresses(['alice@example.com <bob@example.com>', 'me@example.com'])
 | 
			
		||||
-      [('', '')]
 | 
			
		||||
-
 | 
			
		||||
-   .. versionchanged:: 3.12
 | 
			
		||||
-      The 2-tuple of ``('', '')`` in the returned values when parsing
 | 
			
		||||
-      fails were added as to address a security issue.
 | 
			
		||||
-
 | 
			
		||||
 
 | 
			
		||||
 .. function:: parsedate(date)
 | 
			
		||||
 
 | 
			
		||||
Index: Python-3.12.0b4/Doc/whatsnew/3.12.rst
 | 
			
		||||
===================================================================
 | 
			
		||||
--- Python-3.12.0b4.orig/Doc/whatsnew/3.12.rst
 | 
			
		||||
+++ Python-3.12.0b4/Doc/whatsnew/3.12.rst
 | 
			
		||||
@@ -570,14 +570,6 @@ dis
 | 
			
		||||
   :data:`~dis.hasarg` collection instead.
 | 
			
		||||
   (Contributed by Irit Katriel in :gh:`94216`.)
 | 
			
		||||
 
 | 
			
		||||
-email
 | 
			
		||||
------
 | 
			
		||||
-
 | 
			
		||||
-* :func:`email.utils.getaddresses` and :func:`email.utils.parseaddr` now return
 | 
			
		||||
-  ``('', '')`` 2-tuples in more situations where invalid email addresses are
 | 
			
		||||
-  encountered instead of potentially inaccurate values.
 | 
			
		||||
-  (Contributed by Thomas Dwyer for :gh:`102988` to ameliorate CVE-2023-27043.)
 | 
			
		||||
-
 | 
			
		||||
 fractions
 | 
			
		||||
 ---------
 | 
			
		||||
 
 | 
			
		||||
Index: Python-3.12.0b4/Lib/email/utils.py
 | 
			
		||||
===================================================================
 | 
			
		||||
--- Python-3.12.0b4.orig/Lib/email/utils.py
 | 
			
		||||
+++ Python-3.12.0b4/Lib/email/utils.py
 | 
			
		||||
@@ -106,54 +106,12 @@ def formataddr(pair, charset='utf-8'):
 | 
			
		||||
     return address
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
-def _pre_parse_validation(email_header_fields):
 | 
			
		||||
-    accepted_values = []
 | 
			
		||||
-    for v in email_header_fields:
 | 
			
		||||
-        s = v.replace('\\(', '').replace('\\)', '')
 | 
			
		||||
-        if s.count('(') != s.count(')'):
 | 
			
		||||
-            v = "('', '')"
 | 
			
		||||
-        accepted_values.append(v)
 | 
			
		||||
-
 | 
			
		||||
-    return accepted_values
 | 
			
		||||
-
 | 
			
		||||
-
 | 
			
		||||
-def _post_parse_validation(parsed_email_header_tuples):
 | 
			
		||||
-    accepted_values = []
 | 
			
		||||
-    # The parser would have parsed a correctly formatted domain-literal
 | 
			
		||||
-    # The existence of an [ after parsing indicates a parsing failure
 | 
			
		||||
-    for v in parsed_email_header_tuples:
 | 
			
		||||
-        if '[' in v[1]:
 | 
			
		||||
-            v = ('', '')
 | 
			
		||||
-        accepted_values.append(v)
 | 
			
		||||
-
 | 
			
		||||
-    return accepted_values
 | 
			
		||||
-
 | 
			
		||||
 
 | 
			
		||||
 def getaddresses(fieldvalues):
 | 
			
		||||
-    """Return a list of (REALNAME, EMAIL) or ('','') for each fieldvalue.
 | 
			
		||||
-
 | 
			
		||||
-    When parsing fails for a fieldvalue, a 2-tuple of ('', '') is returned in
 | 
			
		||||
-    its place.
 | 
			
		||||
-
 | 
			
		||||
-    If the resulting list of parsed address is not the same as the number of
 | 
			
		||||
-    fieldvalues in the input list a parsing error has occurred.  A list
 | 
			
		||||
-    containing a single empty 2-tuple [('', '')] is returned in its place.
 | 
			
		||||
-    This is done to avoid invalid output.
 | 
			
		||||
-    """
 | 
			
		||||
-    fieldvalues = [str(v) for v in fieldvalues]
 | 
			
		||||
-    fieldvalues = _pre_parse_validation(fieldvalues)
 | 
			
		||||
-    all = COMMASPACE.join(v for v in fieldvalues)
 | 
			
		||||
+    """Return a list of (REALNAME, EMAIL) for each fieldvalue."""
 | 
			
		||||
+    all = COMMASPACE.join(str(v) for v in fieldvalues)
 | 
			
		||||
     a = _AddressList(all)
 | 
			
		||||
-    result = _post_parse_validation(a.addresslist)
 | 
			
		||||
-
 | 
			
		||||
-    n = 0
 | 
			
		||||
-    for v in fieldvalues:
 | 
			
		||||
-        n += v.count(',') + 1
 | 
			
		||||
-
 | 
			
		||||
-    if len(result) != n:
 | 
			
		||||
-        return [('', '')]
 | 
			
		||||
-
 | 
			
		||||
-    return result
 | 
			
		||||
+    return a.addresslist
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
 def _format_timetuple_and_zone(timetuple, zone):
 | 
			
		||||
@@ -254,18 +212,9 @@ def parseaddr(addr):
 | 
			
		||||
     Return a tuple of realname and email address, unless the parse fails, in
 | 
			
		||||
     which case return a 2-tuple of ('', '').
 | 
			
		||||
     """
 | 
			
		||||
-    if isinstance(addr, list):
 | 
			
		||||
-        addr = addr[0]
 | 
			
		||||
-
 | 
			
		||||
-    if not isinstance(addr, str):
 | 
			
		||||
-        return ('', '')
 | 
			
		||||
-
 | 
			
		||||
-    addr = _pre_parse_validation([addr])[0]
 | 
			
		||||
-    addrs = _post_parse_validation(_AddressList(addr).addresslist)
 | 
			
		||||
-
 | 
			
		||||
-    if not addrs or len(addrs) > 1:
 | 
			
		||||
-        return ('', '')
 | 
			
		||||
-
 | 
			
		||||
+    addrs = _AddressList(addr).addresslist
 | 
			
		||||
+    if not addrs:
 | 
			
		||||
+        return '', ''
 | 
			
		||||
     return addrs[0]
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
Index: Python-3.12.0b4/Lib/test/test_email/test_email.py
 | 
			
		||||
===================================================================
 | 
			
		||||
--- Python-3.12.0b4.orig/Lib/test/test_email/test_email.py
 | 
			
		||||
+++ Python-3.12.0b4/Lib/test/test_email/test_email.py
 | 
			
		||||
@@ -3319,90 +3319,32 @@ Foo
 | 
			
		||||
            [('Al Person', 'aperson@dom.ain'),
 | 
			
		||||
             ('Bud Person', 'bperson@dom.ain')])
 | 
			
		||||
 
 | 
			
		||||
-    def test_getaddresses_parsing_errors(self):
 | 
			
		||||
-        """Test for parsing errors from CVE-2023-27043"""
 | 
			
		||||
-        eq = self.assertEqual
 | 
			
		||||
-        eq(utils.getaddresses(['alice@example.org(<bob@example.com>']),
 | 
			
		||||
-           [('', '')])
 | 
			
		||||
-        eq(utils.getaddresses(['alice@example.org)<bob@example.com>']),
 | 
			
		||||
-           [('', '')])
 | 
			
		||||
-        eq(utils.getaddresses(['alice@example.org<<bob@example.com>']),
 | 
			
		||||
-           [('', '')])
 | 
			
		||||
-        eq(utils.getaddresses(['alice@example.org><bob@example.com>']),
 | 
			
		||||
-           [('', '')])
 | 
			
		||||
-        eq(utils.getaddresses(['alice@example.org@<bob@example.com>']),
 | 
			
		||||
-           [('', '')])
 | 
			
		||||
-        eq(utils.getaddresses(['alice@example.org,<bob@example.com>']),
 | 
			
		||||
-           [('', 'alice@example.org'), ('', 'bob@example.com')])
 | 
			
		||||
-        eq(utils.getaddresses(['alice@example.org;<bob@example.com>']),
 | 
			
		||||
-           [('', '')])
 | 
			
		||||
-        eq(utils.getaddresses(['alice@example.org:<bob@example.com>']),
 | 
			
		||||
-           [('', '')])
 | 
			
		||||
-        eq(utils.getaddresses(['alice@example.org.<bob@example.com>']),
 | 
			
		||||
-           [('', '')])
 | 
			
		||||
-        eq(utils.getaddresses(['alice@example.org"<bob@example.com>']),
 | 
			
		||||
-           [('', '')])
 | 
			
		||||
-        eq(utils.getaddresses(['alice@example.org[<bob@example.com>']),
 | 
			
		||||
-           [('', '')])
 | 
			
		||||
-        eq(utils.getaddresses(['alice@example.org]<bob@example.com>']),
 | 
			
		||||
-           [('', '')])
 | 
			
		||||
-
 | 
			
		||||
-    def test_parseaddr_parsing_errors(self):
 | 
			
		||||
-        """Test for parsing errors from CVE-2023-27043"""
 | 
			
		||||
-        eq = self.assertEqual
 | 
			
		||||
-        eq(utils.parseaddr(['alice@example.org(<bob@example.com>']),
 | 
			
		||||
-           ('', ''))
 | 
			
		||||
-        eq(utils.parseaddr(['alice@example.org)<bob@example.com>']),
 | 
			
		||||
-           ('', ''))
 | 
			
		||||
-        eq(utils.parseaddr(['alice@example.org<<bob@example.com>']),
 | 
			
		||||
-           ('', ''))
 | 
			
		||||
-        eq(utils.parseaddr(['alice@example.org><bob@example.com>']),
 | 
			
		||||
-           ('', ''))
 | 
			
		||||
-        eq(utils.parseaddr(['alice@example.org@<bob@example.com>']),
 | 
			
		||||
-           ('', ''))
 | 
			
		||||
-        eq(utils.parseaddr(['alice@example.org,<bob@example.com>']),
 | 
			
		||||
-           ('', ''))
 | 
			
		||||
-        eq(utils.parseaddr(['alice@example.org;<bob@example.com>']),
 | 
			
		||||
-           ('', ''))
 | 
			
		||||
-        eq(utils.parseaddr(['alice@example.org:<bob@example.com>']),
 | 
			
		||||
-           ('', ''))
 | 
			
		||||
-        eq(utils.parseaddr(['alice@example.org.<bob@example.com>']),
 | 
			
		||||
-           ('', ''))
 | 
			
		||||
-        eq(utils.parseaddr(['alice@example.org"<bob@example.com>']),
 | 
			
		||||
-           ('', ''))
 | 
			
		||||
-        eq(utils.parseaddr(['alice@example.org[<bob@example.com>']),
 | 
			
		||||
-           ('', ''))
 | 
			
		||||
-        eq(utils.parseaddr(['alice@example.org]<bob@example.com>']),
 | 
			
		||||
-           ('', ''))
 | 
			
		||||
+    def test_getaddresses_comma_in_name(self):
 | 
			
		||||
+        """GH-106669 regression test."""
 | 
			
		||||
+        self.assertEqual(
 | 
			
		||||
+            utils.getaddresses(
 | 
			
		||||
+                [
 | 
			
		||||
+                    '"Bud, Person" <bperson@dom.ain>',
 | 
			
		||||
+                    'aperson@dom.ain (Al Person)',
 | 
			
		||||
+                    '"Mariusz Felisiak" <to@example.com>',
 | 
			
		||||
+                ]
 | 
			
		||||
+            ),
 | 
			
		||||
+            [
 | 
			
		||||
+                ('Bud, Person', 'bperson@dom.ain'),
 | 
			
		||||
+                ('Al Person', 'aperson@dom.ain'),
 | 
			
		||||
+                ('Mariusz Felisiak', 'to@example.com'),
 | 
			
		||||
+            ],
 | 
			
		||||
+        )
 | 
			
		||||
 
 | 
			
		||||
     def test_getaddresses_nasty(self):
 | 
			
		||||
         eq = self.assertEqual
 | 
			
		||||
         eq(utils.getaddresses(['foo: ;']), [('', '')])
 | 
			
		||||
-        eq(utils.getaddresses(['[]*-- =~$']), [('', '')])
 | 
			
		||||
+        eq(utils.getaddresses(
 | 
			
		||||
+           ['[]*-- =~$']),
 | 
			
		||||
+           [('', ''), ('', ''), ('', '*--')])
 | 
			
		||||
         eq(utils.getaddresses(
 | 
			
		||||
            ['foo: ;', '"Jason R. Mastaler" <jason@dom.ain>']),
 | 
			
		||||
            [('', ''), ('Jason R. Mastaler', 'jason@dom.ain')])
 | 
			
		||||
-        eq(utils.getaddresses(
 | 
			
		||||
-           [r'Pete(A nice \) chap) <pete(his account)@silly.test(his host)>']),
 | 
			
		||||
-           [('Pete (A nice ) chap his account his host)', 'pete@silly.test')])
 | 
			
		||||
-        eq(utils.getaddresses(
 | 
			
		||||
-           ['(Empty list)(start)Undisclosed recipients  :(nobody(I know))']),
 | 
			
		||||
-           [('', '')])
 | 
			
		||||
-        eq(utils.getaddresses(
 | 
			
		||||
-           ['Mary <@machine.tld:mary@example.net>, , jdoe@test   . example']),
 | 
			
		||||
-           [('Mary', 'mary@example.net'), ('', ''), ('', 'jdoe@test.example')])
 | 
			
		||||
-        eq(utils.getaddresses(
 | 
			
		||||
-           ['John Doe <jdoe@machine(comment).  example>']),
 | 
			
		||||
-           [('John Doe (comment)', 'jdoe@machine.example')])
 | 
			
		||||
-        eq(utils.getaddresses(
 | 
			
		||||
-           ['"Mary Smith: Personal Account" <smith@home.example>']),
 | 
			
		||||
-           [('Mary Smith: Personal Account', 'smith@home.example')])
 | 
			
		||||
-        eq(utils.getaddresses(
 | 
			
		||||
-           ['Undisclosed recipients:;']),
 | 
			
		||||
-           [('', '')])
 | 
			
		||||
-        eq(utils.getaddresses(
 | 
			
		||||
-           [r'<boss@nil.test>, "Giant; \"Big\" Box" <bob@example.net>']),
 | 
			
		||||
-           [('', 'boss@nil.test'), ('Giant; "Big" Box', 'bob@example.net')])
 | 
			
		||||
 
 | 
			
		||||
     def test_getaddresses_embedded_comment(self):
 | 
			
		||||
         """Test proper handling of a nested comment"""
 | 
			
		||||
Index: Python-3.12.0b4/Misc/NEWS.d/next/Security/2023-06-13-20-52-24.gh-issue-102988.Kei7Vf.rst
 | 
			
		||||
===================================================================
 | 
			
		||||
--- /dev/null
 | 
			
		||||
+++ Python-3.12.0b4/Misc/NEWS.d/next/Security/2023-06-13-20-52-24.gh-issue-102988.Kei7Vf.rst
 | 
			
		||||
@@ -0,0 +1,4 @@
 | 
			
		||||
+Reverted the :mod:`email.utils` security improvement change released in
 | 
			
		||||
+3.12beta4 that unintentionally caused :mod:`email.utils.getaddresses` to fail
 | 
			
		||||
+to parse email addresses with a comma in the quoted name field.
 | 
			
		||||
+See :gh:`106669`.
 | 
			
		||||
@@ -13,10 +13,10 @@ Co-Authored-By: Xavier de Gaye <xdegaye@gmail.com>
 | 
			
		||||
 5 files changed, 34 insertions(+), 9 deletions(-)
 | 
			
		||||
 create mode 100644 Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
 | 
			
		||||
 | 
			
		||||
Index: Python-3.12.0b1/Doc/library/ensurepip.rst
 | 
			
		||||
Index: Python-3.12.0rc1/Doc/library/ensurepip.rst
 | 
			
		||||
===================================================================
 | 
			
		||||
--- Python-3.12.0b1.orig/Doc/library/ensurepip.rst
 | 
			
		||||
+++ Python-3.12.0b1/Doc/library/ensurepip.rst
 | 
			
		||||
--- Python-3.12.0rc1.orig/Doc/library/ensurepip.rst
 | 
			
		||||
+++ Python-3.12.0rc1/Doc/library/ensurepip.rst
 | 
			
		||||
@@ -59,8 +59,9 @@ is at least as recent as the one availab
 | 
			
		||||
 By default, ``pip`` is installed into the current virtual environment
 | 
			
		||||
 (if one is active) or into the system site packages (if there is no
 | 
			
		||||
@@ -55,10 +55,10 @@ Index: Python-3.12.0b1/Doc/library/ensurepip.rst
 | 
			
		||||
    .. audit-event:: ensurepip.bootstrap root ensurepip.bootstrap
 | 
			
		||||
 
 | 
			
		||||
    .. note::
 | 
			
		||||
Index: Python-3.12.0b1/Lib/ensurepip/__init__.py
 | 
			
		||||
Index: Python-3.12.0rc1/Lib/ensurepip/__init__.py
 | 
			
		||||
===================================================================
 | 
			
		||||
--- Python-3.12.0b1.orig/Lib/ensurepip/__init__.py
 | 
			
		||||
+++ Python-3.12.0b1/Lib/ensurepip/__init__.py
 | 
			
		||||
--- Python-3.12.0rc1.orig/Lib/ensurepip/__init__.py
 | 
			
		||||
+++ Python-3.12.0rc1/Lib/ensurepip/__init__.py
 | 
			
		||||
@@ -120,27 +120,27 @@ def _disable_pip_configuration_settings(
 | 
			
		||||
     os.environ['PIP_CONFIG_FILE'] = os.devnull
 | 
			
		||||
 
 | 
			
		||||
@@ -121,10 +121,10 @@ Index: Python-3.12.0b1/Lib/ensurepip/__init__.py
 | 
			
		||||
         upgrade=args.upgrade,
 | 
			
		||||
         user=args.user,
 | 
			
		||||
         verbosity=args.verbosity,
 | 
			
		||||
Index: Python-3.12.0b1/Lib/test/test_ensurepip.py
 | 
			
		||||
Index: Python-3.12.0rc1/Lib/test/test_ensurepip.py
 | 
			
		||||
===================================================================
 | 
			
		||||
--- Python-3.12.0b1.orig/Lib/test/test_ensurepip.py
 | 
			
		||||
+++ Python-3.12.0b1/Lib/test/test_ensurepip.py
 | 
			
		||||
--- Python-3.12.0rc1.orig/Lib/test/test_ensurepip.py
 | 
			
		||||
+++ Python-3.12.0rc1/Lib/test/test_ensurepip.py
 | 
			
		||||
@@ -105,6 +105,17 @@ class TestBootstrap(EnsurepipMixin, unit
 | 
			
		||||
             unittest.mock.ANY,
 | 
			
		||||
         )
 | 
			
		||||
@@ -143,11 +143,11 @@ Index: Python-3.12.0b1/Lib/test/test_ensurepip.py
 | 
			
		||||
     def test_bootstrapping_with_user(self):
 | 
			
		||||
         ensurepip.bootstrap(user=True)
 | 
			
		||||
 
 | 
			
		||||
Index: Python-3.12.0b1/Makefile.pre.in
 | 
			
		||||
Index: Python-3.12.0rc1/Makefile.pre.in
 | 
			
		||||
===================================================================
 | 
			
		||||
--- Python-3.12.0b1.orig/Makefile.pre.in
 | 
			
		||||
+++ Python-3.12.0b1/Makefile.pre.in
 | 
			
		||||
@@ -1908,7 +1908,7 @@ install: @FRAMEWORKINSTALLFIRST@ commoni
 | 
			
		||||
--- Python-3.12.0rc1.orig/Makefile.pre.in
 | 
			
		||||
+++ Python-3.12.0rc1/Makefile.pre.in
 | 
			
		||||
@@ -1909,7 +1909,7 @@ install: @FRAMEWORKINSTALLFIRST@ commoni
 | 
			
		||||
 			install|*) ensurepip="" ;; \
 | 
			
		||||
 		esac; \
 | 
			
		||||
 		$(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \
 | 
			
		||||
@@ -156,7 +156,7 @@ Index: Python-3.12.0b1/Makefile.pre.in
 | 
			
		||||
 	fi
 | 
			
		||||
 
 | 
			
		||||
 .PHONY: altinstall
 | 
			
		||||
@@ -1919,7 +1919,7 @@ altinstall: commoninstall
 | 
			
		||||
@@ -1920,7 +1920,7 @@ altinstall: commoninstall
 | 
			
		||||
 			install|*) ensurepip="--altinstall" ;; \
 | 
			
		||||
 		esac; \
 | 
			
		||||
 		$(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \
 | 
			
		||||
@@ -165,9 +165,9 @@ Index: Python-3.12.0b1/Makefile.pre.in
 | 
			
		||||
 	fi
 | 
			
		||||
 
 | 
			
		||||
 .PHONY: commoninstall
 | 
			
		||||
Index: Python-3.12.0b1/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
 | 
			
		||||
Index: Python-3.12.0rc1/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
 | 
			
		||||
===================================================================
 | 
			
		||||
--- /dev/null
 | 
			
		||||
+++ Python-3.12.0b1/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
 | 
			
		||||
+++ Python-3.12.0rc1/Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
+A directory prefix can now be specified when using :mod:`ensurepip`.
 | 
			
		||||
 
 | 
			
		||||
@@ -3,8 +3,10 @@
 | 
			
		||||
 Misc/NEWS               |    2 +-
 | 
			
		||||
 2 files changed, 1 insertion(+), 3 deletions(-)
 | 
			
		||||
 | 
			
		||||
--- a/Doc/using/configure.rst
 | 
			
		||||
+++ b/Doc/using/configure.rst
 | 
			
		||||
Index: Python-3.12.0rc1/Doc/using/configure.rst
 | 
			
		||||
===================================================================
 | 
			
		||||
--- Python-3.12.0rc1.orig/Doc/using/configure.rst
 | 
			
		||||
+++ Python-3.12.0rc1/Doc/using/configure.rst
 | 
			
		||||
@@ -599,13 +599,11 @@ macOS Options
 | 
			
		||||
 
 | 
			
		||||
 See ``Mac/README.rst``.
 | 
			
		||||
@@ -19,9 +21,11 @@
 | 
			
		||||
 .. cmdoption:: --enable-framework=INSTALLDIR
 | 
			
		||||
 
 | 
			
		||||
    Create a Python.framework rather than a traditional Unix install. Optional
 | 
			
		||||
--- a/Misc/NEWS
 | 
			
		||||
+++ b/Misc/NEWS
 | 
			
		||||
@@ -11318,7 +11318,7 @@ C API
 | 
			
		||||
Index: Python-3.12.0rc1/Misc/NEWS
 | 
			
		||||
===================================================================
 | 
			
		||||
--- Python-3.12.0rc1.orig/Misc/NEWS
 | 
			
		||||
+++ Python-3.12.0rc1/Misc/NEWS
 | 
			
		||||
@@ -11530,7 +11530,7 @@ C API
 | 
			
		||||
 - bpo-40939: Removed documentation for the removed ``PyParser_*`` C API.
 | 
			
		||||
 
 | 
			
		||||
 - bpo-43795: The list in :ref:`limited-api-list` now shows the public name
 | 
			
		||||
 
 | 
			
		||||
@@ -4,9 +4,11 @@ unchanged:
 | 
			
		||||
 Doc/library/turtle.rst |   81 -------------------------------------------------
 | 
			
		||||
 1 file changed, 81 deletions(-)
 | 
			
		||||
 | 
			
		||||
--- a/Doc/library/turtle.rst
 | 
			
		||||
+++ b/Doc/library/turtle.rst
 | 
			
		||||
@@ -251,7 +251,6 @@ Turtle motion
 | 
			
		||||
Index: Python-3.12.0rc1/Doc/library/turtle.rst
 | 
			
		||||
===================================================================
 | 
			
		||||
--- Python-3.12.0rc1.orig/Doc/library/turtle.rst
 | 
			
		||||
+++ Python-3.12.0rc1/Doc/library/turtle.rst
 | 
			
		||||
@@ -441,7 +441,6 @@ Turtle motion
 | 
			
		||||
    turtle is headed.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -14,7 +16,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.position()
 | 
			
		||||
       (0.00,0.00)
 | 
			
		||||
@@ -278,7 +277,6 @@ Turtle motion
 | 
			
		||||
@@ -468,7 +467,6 @@ Turtle motion
 | 
			
		||||
       >>> turtle.goto(0, 0)
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -22,7 +24,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.position()
 | 
			
		||||
       (0.00,0.00)
 | 
			
		||||
@@ -297,13 +295,11 @@ Turtle motion
 | 
			
		||||
@@ -487,13 +485,11 @@ Turtle motion
 | 
			
		||||
    orientation depends on the turtle mode, see :func:`mode`.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -36,7 +38,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.heading()
 | 
			
		||||
       22.0
 | 
			
		||||
@@ -322,13 +318,11 @@ Turtle motion
 | 
			
		||||
@@ -512,13 +508,11 @@ Turtle motion
 | 
			
		||||
    orientation depends on the turtle mode, see :func:`mode`.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -50,7 +52,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.heading()
 | 
			
		||||
       22.0
 | 
			
		||||
@@ -351,13 +345,11 @@ Turtle motion
 | 
			
		||||
@@ -541,13 +535,11 @@ Turtle motion
 | 
			
		||||
    not change the turtle's orientation.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -64,7 +66,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> tp = turtle.pos()
 | 
			
		||||
       >>> tp
 | 
			
		||||
@@ -419,13 +411,11 @@ Turtle motion
 | 
			
		||||
@@ -609,13 +601,11 @@ Turtle motion
 | 
			
		||||
    unchanged.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -78,7 +80,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.position()
 | 
			
		||||
       (0.00,240.00)
 | 
			
		||||
@@ -441,13 +431,11 @@ Turtle motion
 | 
			
		||||
@@ -631,13 +621,11 @@ Turtle motion
 | 
			
		||||
    Set the turtle's second coordinate to *y*, leave first coordinate unchanged.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -92,7 +94,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.position()
 | 
			
		||||
       (0.00,40.00)
 | 
			
		||||
@@ -474,7 +462,6 @@ Turtle motion
 | 
			
		||||
@@ -664,7 +652,6 @@ Turtle motion
 | 
			
		||||
    =================== ====================
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -100,7 +102,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.setheading(90)
 | 
			
		||||
       >>> turtle.heading()
 | 
			
		||||
@@ -487,14 +474,12 @@ Turtle motion
 | 
			
		||||
@@ -677,14 +664,12 @@ Turtle motion
 | 
			
		||||
    its start-orientation (which depends on the mode, see :func:`mode`).
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -115,7 +117,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.heading()
 | 
			
		||||
       90.0
 | 
			
		||||
@@ -526,7 +511,6 @@ Turtle motion
 | 
			
		||||
@@ -716,7 +701,6 @@ Turtle motion
 | 
			
		||||
    calculated automatically.  May be used to draw regular polygons.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -123,7 +125,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.home()
 | 
			
		||||
       >>> turtle.position()
 | 
			
		||||
@@ -555,7 +539,6 @@ Turtle motion
 | 
			
		||||
@@ -745,7 +729,6 @@ Turtle motion
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -131,7 +133,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.home()
 | 
			
		||||
       >>> turtle.dot()
 | 
			
		||||
@@ -573,7 +556,6 @@ Turtle motion
 | 
			
		||||
@@ -763,7 +746,6 @@ Turtle motion
 | 
			
		||||
    it by calling ``clearstamp(stamp_id)``.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -139,7 +141,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.color("blue")
 | 
			
		||||
       >>> stamp_id = turtle.stamp()
 | 
			
		||||
@@ -588,7 +570,6 @@ Turtle motion
 | 
			
		||||
@@ -778,7 +760,6 @@ Turtle motion
 | 
			
		||||
    Delete stamp with given *stampid*.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -147,7 +149,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.position()
 | 
			
		||||
       (150.00,-0.00)
 | 
			
		||||
@@ -626,7 +607,6 @@ Turtle motion
 | 
			
		||||
@@ -816,7 +797,6 @@ Turtle motion
 | 
			
		||||
    undo actions is determined by the size of the undobuffer.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -155,7 +157,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> for i in range(4):
 | 
			
		||||
       ...     turtle.fd(50); turtle.lt(80)
 | 
			
		||||
@@ -659,7 +639,6 @@ Turtle motion
 | 
			
		||||
@@ -849,7 +829,6 @@ Turtle motion
 | 
			
		||||
    turtle turn instantly.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -163,7 +165,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.speed()
 | 
			
		||||
       3
 | 
			
		||||
@@ -680,7 +659,6 @@ Tell Turtle's state
 | 
			
		||||
@@ -870,7 +849,6 @@ Tell Turtle's state
 | 
			
		||||
    Return the turtle's current location (x,y) (as a :class:`Vec2D` vector).
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -171,7 +173,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.pos()
 | 
			
		||||
       (440.00,-0.00)
 | 
			
		||||
@@ -696,7 +674,6 @@ Tell Turtle's state
 | 
			
		||||
@@ -886,7 +864,6 @@ Tell Turtle's state
 | 
			
		||||
    orientation which depends on the mode - "standard"/"world" or "logo".
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -179,7 +181,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.goto(10, 10)
 | 
			
		||||
       >>> turtle.towards(0,0)
 | 
			
		||||
@@ -708,7 +685,6 @@ Tell Turtle's state
 | 
			
		||||
@@ -898,7 +875,6 @@ Tell Turtle's state
 | 
			
		||||
    Return the turtle's x coordinate.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -187,7 +189,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.home()
 | 
			
		||||
       >>> turtle.left(50)
 | 
			
		||||
@@ -724,7 +700,6 @@ Tell Turtle's state
 | 
			
		||||
@@ -914,7 +890,6 @@ Tell Turtle's state
 | 
			
		||||
    Return the turtle's y coordinate.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -195,7 +197,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.home()
 | 
			
		||||
       >>> turtle.left(60)
 | 
			
		||||
@@ -741,7 +716,6 @@ Tell Turtle's state
 | 
			
		||||
@@ -931,7 +906,6 @@ Tell Turtle's state
 | 
			
		||||
    :func:`mode`).
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -203,7 +205,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.home()
 | 
			
		||||
       >>> turtle.left(67)
 | 
			
		||||
@@ -758,7 +732,6 @@ Tell Turtle's state
 | 
			
		||||
@@ -948,7 +922,6 @@ Tell Turtle's state
 | 
			
		||||
    other turtle, in turtle step units.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -211,7 +213,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.home()
 | 
			
		||||
       >>> turtle.distance(30,40)
 | 
			
		||||
@@ -782,7 +755,6 @@ Settings for measurement
 | 
			
		||||
@@ -972,7 +945,6 @@ Settings for measurement
 | 
			
		||||
    Default value is 360 degrees.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -219,7 +221,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.home()
 | 
			
		||||
       >>> turtle.left(90)
 | 
			
		||||
@@ -805,7 +777,6 @@ Settings for measurement
 | 
			
		||||
@@ -995,7 +967,6 @@ Settings for measurement
 | 
			
		||||
    ``degrees(2*math.pi)``.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -227,7 +229,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.home()
 | 
			
		||||
       >>> turtle.left(90)
 | 
			
		||||
@@ -816,7 +787,6 @@ Settings for measurement
 | 
			
		||||
@@ -1006,7 +977,6 @@ Settings for measurement
 | 
			
		||||
       1.5707963267948966
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -235,7 +237,7 @@ unchanged:
 | 
			
		||||
       :hide:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.degrees(360)
 | 
			
		||||
@@ -852,7 +822,6 @@ Drawing state
 | 
			
		||||
@@ -1042,7 +1012,6 @@ Drawing state
 | 
			
		||||
    thickness.  If no argument is given, the current pensize is returned.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -243,7 +245,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.pensize()
 | 
			
		||||
       1
 | 
			
		||||
@@ -884,7 +853,6 @@ Drawing state
 | 
			
		||||
@@ -1074,7 +1043,6 @@ Drawing state
 | 
			
		||||
    attributes in one statement.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -251,7 +253,7 @@ unchanged:
 | 
			
		||||
       :options: +NORMALIZE_WHITESPACE
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.pen(fillcolor="black", pencolor="red", pensize=10)
 | 
			
		||||
@@ -907,7 +875,6 @@ Drawing state
 | 
			
		||||
@@ -1097,7 +1065,6 @@ Drawing state
 | 
			
		||||
    Return ``True`` if pen is down, ``False`` if it's up.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -259,7 +261,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.penup()
 | 
			
		||||
       >>> turtle.isdown()
 | 
			
		||||
@@ -948,7 +915,6 @@ Color control
 | 
			
		||||
@@ -1138,7 +1105,6 @@ Color control
 | 
			
		||||
    newly set pencolor.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -267,7 +269,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> colormode()
 | 
			
		||||
       1.0
 | 
			
		||||
@@ -997,7 +963,6 @@ Color control
 | 
			
		||||
@@ -1187,7 +1153,6 @@ Color control
 | 
			
		||||
    with the newly set fillcolor.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -275,7 +277,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.fillcolor("violet")
 | 
			
		||||
       >>> turtle.fillcolor()
 | 
			
		||||
@@ -1036,7 +1001,6 @@ Color control
 | 
			
		||||
@@ -1226,7 +1191,6 @@ Color control
 | 
			
		||||
    with the newly set colors.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -283,7 +285,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.color("red", "green")
 | 
			
		||||
       >>> turtle.color()
 | 
			
		||||
@@ -1053,7 +1017,6 @@ Filling
 | 
			
		||||
@@ -1243,7 +1207,6 @@ Filling
 | 
			
		||||
 ~~~~~~~
 | 
			
		||||
 
 | 
			
		||||
 .. doctest::
 | 
			
		||||
@@ -291,7 +293,7 @@ unchanged:
 | 
			
		||||
    :hide:
 | 
			
		||||
 
 | 
			
		||||
    >>> turtle.home()
 | 
			
		||||
@@ -1063,7 +1026,6 @@ Filling
 | 
			
		||||
@@ -1253,7 +1216,6 @@ Filling
 | 
			
		||||
    Return fillstate (``True`` if filling, ``False`` else).
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -299,7 +301,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.begin_fill()
 | 
			
		||||
       >>> if turtle.filling():
 | 
			
		||||
@@ -1088,7 +1050,6 @@ Filling
 | 
			
		||||
@@ -1278,7 +1240,6 @@ Filling
 | 
			
		||||
    above may be either all yellow or have some white regions.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -307,7 +309,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.color("black", "red")
 | 
			
		||||
       >>> turtle.begin_fill()
 | 
			
		||||
@@ -1105,7 +1066,6 @@ More drawing control
 | 
			
		||||
@@ -1295,7 +1256,6 @@ More drawing control
 | 
			
		||||
    variables to the default values.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -315,7 +317,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.goto(0,-22)
 | 
			
		||||
       >>> turtle.left(100)
 | 
			
		||||
@@ -1156,7 +1116,6 @@ Visibility
 | 
			
		||||
@@ -1346,7 +1306,6 @@ Visibility
 | 
			
		||||
    drawing observably.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -323,7 +325,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.hideturtle()
 | 
			
		||||
 
 | 
			
		||||
@@ -1167,7 +1126,6 @@ Visibility
 | 
			
		||||
@@ -1357,7 +1316,6 @@ Visibility
 | 
			
		||||
    Make the turtle visible.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -331,7 +333,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.showturtle()
 | 
			
		||||
 
 | 
			
		||||
@@ -1198,7 +1156,6 @@ Appearance
 | 
			
		||||
@@ -1388,7 +1346,6 @@ Appearance
 | 
			
		||||
    deal with shapes see Screen method :func:`register_shape`.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -339,7 +341,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.shape()
 | 
			
		||||
       'classic'
 | 
			
		||||
@@ -1224,7 +1181,6 @@ Appearance
 | 
			
		||||
@@ -1414,7 +1371,6 @@ Appearance
 | 
			
		||||
    ``resizemode("user")`` is called by :func:`shapesize` when used with arguments.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -347,7 +349,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.resizemode()
 | 
			
		||||
       'noresize'
 | 
			
		||||
@@ -1248,7 +1204,6 @@ Appearance
 | 
			
		||||
@@ -1438,7 +1394,6 @@ Appearance
 | 
			
		||||
    of the shape's outline.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -355,7 +357,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.shapesize()
 | 
			
		||||
       (1.0, 1.0, 1)
 | 
			
		||||
@@ -1273,7 +1228,6 @@ Appearance
 | 
			
		||||
@@ -1463,7 +1418,6 @@ Appearance
 | 
			
		||||
    heading of the turtle are sheared.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -363,7 +365,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.shape("circle")
 | 
			
		||||
       >>> turtle.shapesize(5,2)
 | 
			
		||||
@@ -1290,7 +1244,6 @@ Appearance
 | 
			
		||||
@@ -1480,7 +1434,6 @@ Appearance
 | 
			
		||||
    change the turtle's heading (direction of movement).
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -371,7 +373,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.reset()
 | 
			
		||||
       >>> turtle.shape("circle")
 | 
			
		||||
@@ -1336,7 +1289,6 @@ Appearance
 | 
			
		||||
@@ -1526,7 +1479,6 @@ Appearance
 | 
			
		||||
    turtle (its direction of movement).
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -379,7 +381,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.reset()
 | 
			
		||||
       >>> turtle.shape("circle")
 | 
			
		||||
@@ -1365,7 +1317,6 @@ Appearance
 | 
			
		||||
@@ -1555,7 +1507,6 @@ Appearance
 | 
			
		||||
    given matrix.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -387,7 +389,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle = Turtle()
 | 
			
		||||
       >>> turtle.shape("square")
 | 
			
		||||
@@ -1381,7 +1332,6 @@ Appearance
 | 
			
		||||
@@ -1571,7 +1522,6 @@ Appearance
 | 
			
		||||
    can be used to define a new shape or components of a compound shape.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -395,7 +397,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.shape("square")
 | 
			
		||||
       >>> turtle.shapetransform(4, -1, 0, 2)
 | 
			
		||||
@@ -1406,7 +1356,6 @@ Using events
 | 
			
		||||
@@ -1596,7 +1546,6 @@ Using events
 | 
			
		||||
    procedural way:
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -403,7 +405,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> def turn(x, y):
 | 
			
		||||
       ...     left(180)
 | 
			
		||||
@@ -1427,7 +1376,6 @@ Using events
 | 
			
		||||
@@ -1617,7 +1566,6 @@ Using events
 | 
			
		||||
    ``None``, existing bindings are removed.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -411,7 +413,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> class MyTurtle(Turtle):
 | 
			
		||||
       ...     def glow(self,x,y):
 | 
			
		||||
@@ -1455,7 +1403,6 @@ Using events
 | 
			
		||||
@@ -1645,7 +1593,6 @@ Using events
 | 
			
		||||
    mouse-click event on that turtle.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -419,7 +421,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.ondrag(turtle.goto)
 | 
			
		||||
 
 | 
			
		||||
@@ -1483,7 +1430,6 @@ Special Turtle methods
 | 
			
		||||
@@ -1673,7 +1620,6 @@ Special Turtle methods
 | 
			
		||||
    Return the last recorded polygon.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -427,7 +429,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.home()
 | 
			
		||||
       >>> turtle.begin_poly()
 | 
			
		||||
@@ -1503,7 +1449,6 @@ Special Turtle methods
 | 
			
		||||
@@ -1693,7 +1639,6 @@ Special Turtle methods
 | 
			
		||||
    turtle properties.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -435,7 +437,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> mick = Turtle()
 | 
			
		||||
       >>> joe = mick.clone()
 | 
			
		||||
@@ -1516,7 +1461,6 @@ Special Turtle methods
 | 
			
		||||
@@ -1706,7 +1651,6 @@ Special Turtle methods
 | 
			
		||||
    return the "anonymous turtle":
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -443,7 +445,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> pet = getturtle()
 | 
			
		||||
       >>> pet.fd(50)
 | 
			
		||||
@@ -1530,7 +1474,6 @@ Special Turtle methods
 | 
			
		||||
@@ -1720,7 +1664,6 @@ Special Turtle methods
 | 
			
		||||
    TurtleScreen methods can then be called for that object.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -451,7 +453,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> ts = turtle.getscreen()
 | 
			
		||||
       >>> ts
 | 
			
		||||
@@ -1548,7 +1491,6 @@ Special Turtle methods
 | 
			
		||||
@@ -1738,7 +1681,6 @@ Special Turtle methods
 | 
			
		||||
    ``None``, the undobuffer is disabled.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -459,7 +461,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> turtle.setundobuffer(42)
 | 
			
		||||
 
 | 
			
		||||
@@ -1558,7 +1500,6 @@ Special Turtle methods
 | 
			
		||||
@@ -1748,7 +1690,6 @@ Special Turtle methods
 | 
			
		||||
    Return number of entries in the undobuffer.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -467,7 +469,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> while undobufferentries():
 | 
			
		||||
       ...     undo()
 | 
			
		||||
@@ -1581,7 +1522,6 @@ below:
 | 
			
		||||
@@ -1771,7 +1712,6 @@ below:
 | 
			
		||||
    For example:
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -475,7 +477,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> s = Shape("compound")
 | 
			
		||||
       >>> poly1 = ((0,0),(10,-5),(0,10),(-10,-5))
 | 
			
		||||
@@ -1592,7 +1532,6 @@ below:
 | 
			
		||||
@@ -1782,7 +1722,6 @@ below:
 | 
			
		||||
 3. Now add the Shape to the Screen's shapelist and use it:
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -483,7 +485,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> register_shape("myshape", s)
 | 
			
		||||
       >>> shape("myshape")
 | 
			
		||||
@@ -1612,7 +1551,6 @@ Most of the examples in this section ref
 | 
			
		||||
@@ -1802,7 +1741,6 @@ Most of the examples in this section ref
 | 
			
		||||
 ``screen``.
 | 
			
		||||
 
 | 
			
		||||
 .. doctest::
 | 
			
		||||
@@ -491,7 +493,7 @@ unchanged:
 | 
			
		||||
    :hide:
 | 
			
		||||
 
 | 
			
		||||
    >>> screen = Screen()
 | 
			
		||||
@@ -1629,7 +1567,6 @@ Window control
 | 
			
		||||
@@ -1819,7 +1757,6 @@ Window control
 | 
			
		||||
    Set or return background color of the TurtleScreen.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -499,7 +501,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> screen.bgcolor("orange")
 | 
			
		||||
       >>> screen.bgcolor()
 | 
			
		||||
@@ -1721,7 +1658,6 @@ Window control
 | 
			
		||||
@@ -1911,7 +1848,6 @@ Window control
 | 
			
		||||
    distorted.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -507,7 +509,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> screen.reset()
 | 
			
		||||
       >>> screen.setworldcoordinates(-50,-7.5,50,7.5)
 | 
			
		||||
@@ -1732,7 +1668,6 @@ Window control
 | 
			
		||||
@@ -1922,7 +1858,6 @@ Window control
 | 
			
		||||
       ...     left(45); fd(2)   # a regular octagon
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -515,7 +517,7 @@ unchanged:
 | 
			
		||||
       :hide:
 | 
			
		||||
 
 | 
			
		||||
       >>> screen.reset()
 | 
			
		||||
@@ -1754,7 +1689,6 @@ Animation control
 | 
			
		||||
@@ -1944,7 +1879,6 @@ Animation control
 | 
			
		||||
    Optional argument:
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -523,7 +525,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> screen.delay()
 | 
			
		||||
       10
 | 
			
		||||
@@ -1776,7 +1710,6 @@ Animation control
 | 
			
		||||
@@ -1966,7 +1900,6 @@ Animation control
 | 
			
		||||
    :func:`delay`).
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -531,7 +533,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> screen.tracer(8, 25)
 | 
			
		||||
       >>> dist = 2
 | 
			
		||||
@@ -1813,7 +1746,6 @@ Using screen events
 | 
			
		||||
@@ -2003,7 +1936,6 @@ Using screen events
 | 
			
		||||
    must have the focus. (See method :func:`listen`.)
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -539,7 +541,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> def f():
 | 
			
		||||
       ...     fd(50)
 | 
			
		||||
@@ -1834,7 +1766,6 @@ Using screen events
 | 
			
		||||
@@ -2024,7 +1956,6 @@ Using screen events
 | 
			
		||||
    must have focus. (See method :func:`listen`.)
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -547,7 +549,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> def f():
 | 
			
		||||
       ...     fd(50)
 | 
			
		||||
@@ -1859,7 +1790,6 @@ Using screen events
 | 
			
		||||
@@ -2049,7 +1980,6 @@ Using screen events
 | 
			
		||||
    named ``turtle``:
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -555,7 +557,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> screen.onclick(turtle.goto) # Subsequently clicking into the TurtleScreen will
 | 
			
		||||
       >>>                             # make the turtle move to the clicked point.
 | 
			
		||||
@@ -1879,7 +1809,6 @@ Using screen events
 | 
			
		||||
@@ -2069,7 +1999,6 @@ Using screen events
 | 
			
		||||
    Install a timer that calls *fun* after *t* milliseconds.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -563,7 +565,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> running = True
 | 
			
		||||
       >>> def f():
 | 
			
		||||
@@ -1961,7 +1890,6 @@ Settings and special methods
 | 
			
		||||
@@ -2151,7 +2080,6 @@ Settings and special methods
 | 
			
		||||
    ============ ========================= ===================
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -571,7 +573,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> mode("logo")   # resets turtle heading to north
 | 
			
		||||
       >>> mode()
 | 
			
		||||
@@ -1976,7 +1904,6 @@ Settings and special methods
 | 
			
		||||
@@ -2166,7 +2094,6 @@ Settings and special methods
 | 
			
		||||
    values of color triples have to be in the range 0..*cmode*.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -579,7 +581,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> screen.colormode(1)
 | 
			
		||||
       >>> turtle.pencolor(240, 160, 80)
 | 
			
		||||
@@ -1997,7 +1924,6 @@ Settings and special methods
 | 
			
		||||
@@ -2187,7 +2114,6 @@ Settings and special methods
 | 
			
		||||
    do with a Tkinter Canvas.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -587,7 +589,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> cv = screen.getcanvas()
 | 
			
		||||
       >>> cv
 | 
			
		||||
@@ -2009,7 +1935,6 @@ Settings and special methods
 | 
			
		||||
@@ -2199,7 +2125,6 @@ Settings and special methods
 | 
			
		||||
    Return a list of names of all currently available turtle shapes.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -595,7 +597,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> screen.getshapes()
 | 
			
		||||
       ['arrow', 'blank', 'circle', ..., 'turtle']
 | 
			
		||||
@@ -2033,7 +1958,6 @@ Settings and special methods
 | 
			
		||||
@@ -2223,7 +2148,6 @@ Settings and special methods
 | 
			
		||||
        coordinates: Install the corresponding polygon shape.
 | 
			
		||||
 
 | 
			
		||||
        .. doctest::
 | 
			
		||||
@@ -603,7 +605,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
           >>> screen.register_shape("triangle", ((5,-3), (0,5), (-5,-3)))
 | 
			
		||||
 
 | 
			
		||||
@@ -2049,7 +1973,6 @@ Settings and special methods
 | 
			
		||||
@@ -2239,7 +2163,6 @@ Settings and special methods
 | 
			
		||||
    Return the list of turtles on the screen.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -611,7 +613,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> for turtle in screen.turtles():
 | 
			
		||||
       ...     turtle.color("red")
 | 
			
		||||
@@ -2111,7 +2034,6 @@ Methods specific to Screen, not inherite
 | 
			
		||||
@@ -2301,7 +2224,6 @@ Methods specific to Screen, not inherite
 | 
			
		||||
                   center window vertically
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -619,7 +621,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> screen.setup (width=200, height=200, startx=0, starty=0)
 | 
			
		||||
       >>>              # sets window to 200x200 pixels, in upper left of screen
 | 
			
		||||
@@ -2127,7 +2049,6 @@ Methods specific to Screen, not inherite
 | 
			
		||||
@@ -2317,7 +2239,6 @@ Methods specific to Screen, not inherite
 | 
			
		||||
    Set title of turtle window to *titlestring*.
 | 
			
		||||
 
 | 
			
		||||
    .. doctest::
 | 
			
		||||
@@ -627,7 +629,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
       >>> screen.title("Welcome to the turtle zoo!")
 | 
			
		||||
 
 | 
			
		||||
@@ -2198,7 +2119,6 @@ Public classes
 | 
			
		||||
@@ -2388,7 +2309,6 @@ Public classes
 | 
			
		||||
       Example:
 | 
			
		||||
 
 | 
			
		||||
       .. doctest::
 | 
			
		||||
@@ -635,7 +637,7 @@ unchanged:
 | 
			
		||||
 
 | 
			
		||||
          >>> poly = ((0,0),(10,-5),(0,10),(-10,-5))
 | 
			
		||||
          >>> s = Shape("compound")
 | 
			
		||||
@@ -2549,7 +2469,6 @@ Changes since Python 3.0
 | 
			
		||||
@@ -2774,7 +2694,6 @@ Changes since Python 3.0
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
 .. doctest::
 | 
			
		||||
 
 | 
			
		||||
@@ -2,10 +2,10 @@
 | 
			
		||||
 Makefile.pre.in |    7 +++++++
 | 
			
		||||
 1 file changed, 7 insertions(+)
 | 
			
		||||
 | 
			
		||||
Index: Python-3.12.0b1/Makefile.pre.in
 | 
			
		||||
Index: Python-3.12.0rc1/Makefile.pre.in
 | 
			
		||||
===================================================================
 | 
			
		||||
--- Python-3.12.0b1.orig/Makefile.pre.in
 | 
			
		||||
+++ Python-3.12.0b1/Makefile.pre.in
 | 
			
		||||
--- Python-3.12.0rc1.orig/Makefile.pre.in
 | 
			
		||||
+++ Python-3.12.0rc1/Makefile.pre.in
 | 
			
		||||
@@ -1332,11 +1332,18 @@ Modules/getbuildinfo.o: $(PARSER_OBJS) \
 | 
			
		||||
 		$(DTRACE_OBJS) \
 | 
			
		||||
 		$(srcdir)/Modules/getbuildinfo.c
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
Index: Python-3.12.0b1/Lib/site.py
 | 
			
		||||
Index: Python-3.12.0rc1/Lib/site.py
 | 
			
		||||
===================================================================
 | 
			
		||||
--- Python-3.12.0b1.orig/Lib/site.py
 | 
			
		||||
+++ Python-3.12.0b1/Lib/site.py
 | 
			
		||||
--- Python-3.12.0rc1.orig/Lib/site.py
 | 
			
		||||
+++ Python-3.12.0rc1/Lib/site.py
 | 
			
		||||
@@ -76,7 +76,7 @@ import _sitebuiltins
 | 
			
		||||
 import io
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
@@ -2,10 +2,10 @@
 | 
			
		||||
 Lib/test/test_posix.py |    2 +-
 | 
			
		||||
 1 file changed, 1 insertion(+), 1 deletion(-)
 | 
			
		||||
 | 
			
		||||
Index: Python-3.12.0b1/Lib/test/test_posix.py
 | 
			
		||||
Index: Python-3.12.0rc1/Lib/test/test_posix.py
 | 
			
		||||
===================================================================
 | 
			
		||||
--- Python-3.12.0b1.orig/Lib/test/test_posix.py
 | 
			
		||||
+++ Python-3.12.0b1/Lib/test/test_posix.py
 | 
			
		||||
--- Python-3.12.0rc1.orig/Lib/test/test_posix.py
 | 
			
		||||
+++ Python-3.12.0rc1/Lib/test/test_posix.py
 | 
			
		||||
@@ -431,7 +431,7 @@ class PosixTester(unittest.TestCase):
 | 
			
		||||
     def test_posix_fadvise(self):
 | 
			
		||||
         fd = os.open(os_helper.TESTFN, os.O_RDONLY)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,133 @@
 | 
			
		||||
-------------------------------------------------------------------
 | 
			
		||||
Mon Aug  7 07:31:27 UTC 2023 - Daniel Garcia <daniel.garcia@suse.com>
 | 
			
		||||
 | 
			
		||||
- Refresh all patches
 | 
			
		||||
- Drop Revert-gh105127-left-tests.patch, in upstream now
 | 
			
		||||
- Update to 3.12.0rc1:
 | 
			
		||||
  - Reverted the :mod:`email.utils` security improvement change
 | 
			
		||||
    released in 3.12beta4 that unintentionally caused
 | 
			
		||||
    :mod:`email.utils.getaddresses` to fail to parse email addresses
 | 
			
		||||
    with a comma in the quoted name field. See :gh:`106669`.
 | 
			
		||||
  - Start initializing ob_digit during creation of
 | 
			
		||||
    :c:type:`PyLongObject` objects. Patch by Illia Volochii.
 | 
			
		||||
  - Increase C recursion limit for functions other than the main
 | 
			
		||||
    interpreter from 800 to 1500. This should allow functions like
 | 
			
		||||
    list.__repr__ and json.dumps to handle all the inputs that they
 | 
			
		||||
    could prior to 3.12
 | 
			
		||||
  - Fix potential unaligned memory access on C APIs involving returned
 | 
			
		||||
    sequences of char * pointers within the :mod:`grp` and
 | 
			
		||||
    :mod:`socket` modules. These were revealed using a
 | 
			
		||||
    -fsaniziter=alignment build on ARM macOS. Patch by Christopher
 | 
			
		||||
    Chavez.
 | 
			
		||||
  - Add the exception as the third argument to PY_UNIND callbacks in
 | 
			
		||||
    sys.monitoring. This makes the PY_UNWIND callback consistent with
 | 
			
		||||
    the other exception hanlding callbacks.
 | 
			
		||||
  - Raise a ValueError when a monitoring callback funtion returns
 | 
			
		||||
    DISABLE for events that cannot be disabled locally.
 | 
			
		||||
  - Add a RERAISE event to sys.monitoring, which occurs when an
 | 
			
		||||
    exception is reraised, either explicitly by a plain raise
 | 
			
		||||
    statement, or implicitly in an except or finally block.
 | 
			
		||||
  - Unsupported modules now always fail to be imported.
 | 
			
		||||
  - Fix classmethod-style :func:`super` method calls (i.e., where the
 | 
			
		||||
    second argument to :func:`super`, or the implied second argument
 | 
			
		||||
    drawn from self/cls in the case of zero-arg super, is a type) when
 | 
			
		||||
    the target of the call is not a classmethod.
 | 
			
		||||
  - Python no longer crashes due an infrequent race when initialzing
 | 
			
		||||
    per-interpreter interned strings. The crash would manifest when
 | 
			
		||||
    the interpreter was finalized.
 | 
			
		||||
  - Python no longer crashes due to an infrequent race in setting
 | 
			
		||||
    Py_FileSystemDefaultEncoding and Py_FileSystemDefaultEncodeErrors
 | 
			
		||||
    (both deprecated), when simultaneously initializing two isolated
 | 
			
		||||
    subinterpreters. Now they are only set during runtime
 | 
			
		||||
    initialization.
 | 
			
		||||
  - Fix a segmentation fault caused by a use-after-free bug in
 | 
			
		||||
    frame_dealloc when the trashcan delays the deallocation of a
 | 
			
		||||
    PyFrameObject.
 | 
			
		||||
  - No longer suppress arbitrary errors in the __annotations__ getter
 | 
			
		||||
    and setter in the type and module types.
 | 
			
		||||
  - Propagate frozen_modules to multiprocessing spawned process
 | 
			
		||||
    interpreters.
 | 
			
		||||
  - Prevent out-of-bounds memory access during mmap.find() calls.
 | 
			
		||||
  - Seems that in some conditions, OpenSSL will return
 | 
			
		||||
    SSL_ERROR_SYSCALL instead of SSL_ERROR_SSL when a certification
 | 
			
		||||
    verification has failed, but the error parameters will still
 | 
			
		||||
    contain ERR_LIB_SSL and SSL_R_CERTIFICATE_VERIFY_FAILED. We are
 | 
			
		||||
    now detecting this situation and raising the appropiate
 | 
			
		||||
    ssl.SSLCertVerificationError. Patch by Pablo Galindo
 | 
			
		||||
  - Fix :func:`types.get_original_bases` to only return
 | 
			
		||||
    :attr:`!__orig_bases__` if it is present on cls directly. Patch by
 | 
			
		||||
    James Hilton-Balfe.
 | 
			
		||||
  - Prevent memory leak and use-after-free when using pointers to
 | 
			
		||||
    pointers with ctypes
 | 
			
		||||
  - Make :func:`gettext.pgettext` search plural definitions when
 | 
			
		||||
    translation is not found.
 | 
			
		||||
  - Document behavior of :func:`shutil.disk_usage` for non-mounted
 | 
			
		||||
    filesystems on Unix.
 | 
			
		||||
  - Do not report MultipartInvariantViolationDefect defect when the
 | 
			
		||||
    :class:`email.parser.Parser` class is used to parse emails with
 | 
			
		||||
    headersonly=True.
 | 
			
		||||
  - Fix invalid result from :meth:`PurePath.relative_to` method when
 | 
			
		||||
    attempting to walk a ".." segment in other with walk_up enabled. A
 | 
			
		||||
    :exc:`ValueError` exception is now raised in this case.
 | 
			
		||||
  - Fix potential missing NULL check of d2i_SSL_SESSION result in
 | 
			
		||||
    _ssl.c.
 | 
			
		||||
  - Update the bundled copy of pip to version 23.2.1.
 | 
			
		||||
  - Fixed several bugs in zipfile.Path, including: in Path.match`,
 | 
			
		||||
    Windows separators are no longer honored (and never were meant to
 | 
			
		||||
    be); Fixed ``name/suffix/suffixes/stem operations when no filename
 | 
			
		||||
    is present and the Path is not at the root of the zipfile;
 | 
			
		||||
    Reworked glob for performance and more correct matching behavior.
 | 
			
		||||
  - Add __copy__ and __deepcopy__ in :mod:`enum`
 | 
			
		||||
  - Revert a change to :func:`colorsys.rgb_to_hls` that caused
 | 
			
		||||
    division by zero for certain almost-white inputs. Patch by Terry
 | 
			
		||||
    Jan Reedy.
 | 
			
		||||
  - Instances of :class:`typing.TypeVar`, :class:`typing.ParamSpec`,
 | 
			
		||||
    :class:`typing.ParamSpecArgs`, :class:`typing.ParamSpecKwargs`,
 | 
			
		||||
    and :class:`typing.TypeVarTuple` once again support weak
 | 
			
		||||
    references, fixing a regression introduced in Python 3.12.0 beta
 | 
			
		||||
    1. Patch by Jelle Zijlstra.
 | 
			
		||||
  - Detect possible memory allocation failure in the libtommath
 | 
			
		||||
    function :c:func:`mp_init` used by the _tkinter module.
 | 
			
		||||
  - Fix crash when calling repr with a manually constructed SignalDict
 | 
			
		||||
    object. Patch by Charlie Zhao.
 | 
			
		||||
  - Change the default return value of
 | 
			
		||||
    :meth:`http.client.HTTPConnection.get_proxy_response_headers` to
 | 
			
		||||
    be None and not {}.
 | 
			
		||||
  - Ensure gettext(msg) retrieve translations even if a plural form
 | 
			
		||||
    exists. In other words: gettext(msg) == ngettext(msg, '', 1).
 | 
			
		||||
  - Add documentation for :c:type:`PyInterpreterConfig` and
 | 
			
		||||
    :c:func:`Py_NewInterpreterFromConfig`. Also clarify some of the
 | 
			
		||||
    nearby docs relative to per-interpreter GIL.
 | 
			
		||||
  - Document the :mod:`curses` module variables :const:`~curses.LINES`
 | 
			
		||||
    and :const:`~curses.COLS`.
 | 
			
		||||
  - Add a number of standard external names to nitpick_ignore.
 | 
			
		||||
  - Add documentation on how to localize the :mod:`argparse` module.
 | 
			
		||||
  - test_logging: Fix test_udp_reconnection() by increasing the
 | 
			
		||||
    timeout from 100 ms to 5 minutes (LONG_TIMEOUT). Patch by Victor
 | 
			
		||||
    Stinner.
 | 
			
		||||
  - test_capi: Fix test_no_FatalError_infinite_loop() to no longer
 | 
			
		||||
    write a coredump, by using test.support.SuppressCrashReport. Patch
 | 
			
		||||
    by Victor Stinner.
 | 
			
		||||
  - Avoid creating a reference to the test object in
 | 
			
		||||
    :meth:`~unittest.TestResult.collectedDurations`.
 | 
			
		||||
  - Moved tests for zipfile.Path into Lib/test/test_zipfile/_path.
 | 
			
		||||
    Made zipfile._path a package.
 | 
			
		||||
  - Check for linux/limits.h before including it in
 | 
			
		||||
    Modules/posixmodule.c.
 | 
			
		||||
  - Detect MPI compilers in :file:`configure`.
 | 
			
		||||
  - Add experimental wasi-threads support. Patch by Takashi Yamamoto.
 | 
			
		||||
  - Update Windows build to use OpenSSL 3.0.9
 | 
			
		||||
  - Update macOS installer to use OpenSSL 3.0.9.
 | 
			
		||||
  - Fix bugs in the Argument Clinic destination <name> clear command;
 | 
			
		||||
    the destination buffers would never be cleared, and the
 | 
			
		||||
    destination directive parser would simply continue to the fault
 | 
			
		||||
    handler after processing the command. Patch by Erlend E. Aasland.
 | 
			
		||||
  - freeze now fetches CONFIG_ARGS from the original CPython instance
 | 
			
		||||
    the Makefile uses to call utility scripts. Patch by Ijtaba
 | 
			
		||||
    Hussain.
 | 
			
		||||
  - :c:func:`PyModule_AddObjectRef` is now only available in the
 | 
			
		||||
    limited API version 3.10 or later.
 | 
			
		||||
 | 
			
		||||
-------------------------------------------------------------------
 | 
			
		||||
Fri Aug  4 06:37:41 UTC 2023 - Dirk Müller <dmueller@suse.com>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -105,7 +105,7 @@
 | 
			
		||||
%define dynlib() %{sitedir}/lib-dynload/%{1}.cpython-%{abi_tag}-%{archname}-%{_os}%{?_gnu}%{?armsuffix}.so
 | 
			
		||||
%bcond_without profileopt
 | 
			
		||||
Name:           %{python_pkg_name}%{psuffix}
 | 
			
		||||
Version:        3.12.0b4
 | 
			
		||||
Version:        3.12.0rc1
 | 
			
		||||
Release:        0
 | 
			
		||||
Summary:        Python 3 Interpreter
 | 
			
		||||
License:        Python-2.0
 | 
			
		||||
@@ -163,9 +163,6 @@ Patch34:        skip-test_pyobject_freed_is_freed.patch
 | 
			
		||||
# PATCH-FIX-SLE fix_configure_rst.patch bpo#43774 mcepl@suse.com
 | 
			
		||||
# remove duplicate link targets and make documentation with old Sphinx in SLE
 | 
			
		||||
Patch35:        fix_configure_rst.patch
 | 
			
		||||
# PATCH-FIX-UPSTREAM Revert-gh105127-left-tests.patch bsc#1210638 mcepl@suse.com
 | 
			
		||||
# Partially revert previous patch
 | 
			
		||||
Patch41:        Revert-gh105127-left-tests.patch
 | 
			
		||||
BuildRequires:  autoconf-archive
 | 
			
		||||
BuildRequires:  automake
 | 
			
		||||
BuildRequires:  fdupes
 | 
			
		||||
@@ -434,7 +431,6 @@ other applications.
 | 
			
		||||
%patch34 -p1
 | 
			
		||||
# %%endif
 | 
			
		||||
%patch35 -p1
 | 
			
		||||
%patch41 -p1
 | 
			
		||||
 | 
			
		||||
# drop Autoconf version requirement
 | 
			
		||||
sed -i 's/^AC_PREREQ/dnl AC_PREREQ/' configure.ac
 | 
			
		||||
 
 | 
			
		||||
@@ -2,8 +2,10 @@
 | 
			
		||||
 Lib/test/test_capi/test_mem.py |    1 +
 | 
			
		||||
 1 file changed, 1 insertion(+)
 | 
			
		||||
 | 
			
		||||
--- a/Lib/test/test_capi/test_mem.py
 | 
			
		||||
+++ b/Lib/test/test_capi/test_mem.py
 | 
			
		||||
Index: Python-3.12.0rc1/Lib/test/test_capi/test_mem.py
 | 
			
		||||
===================================================================
 | 
			
		||||
--- Python-3.12.0rc1.orig/Lib/test/test_capi/test_mem.py
 | 
			
		||||
+++ Python-3.12.0rc1/Lib/test/test_capi/test_mem.py
 | 
			
		||||
@@ -110,6 +110,7 @@ class PyMemDebugTests(unittest.TestCase)
 | 
			
		||||
     def test_pyobject_forbidden_bytes_is_freed(self):
 | 
			
		||||
         self.check_pyobject_is_freed('check_pyobject_forbidden_bytes_is_freed')
 | 
			
		||||
 
 | 
			
		||||
@@ -2,8 +2,10 @@
 | 
			
		||||
 Lib/test/test_subprocess.py |    3 ++-
 | 
			
		||||
 1 file changed, 2 insertions(+), 1 deletion(-)
 | 
			
		||||
 | 
			
		||||
--- a/Lib/test/test_subprocess.py
 | 
			
		||||
+++ b/Lib/test/test_subprocess.py
 | 
			
		||||
Index: Python-3.12.0rc1/Lib/test/test_subprocess.py
 | 
			
		||||
===================================================================
 | 
			
		||||
--- Python-3.12.0rc1.orig/Lib/test/test_subprocess.py
 | 
			
		||||
+++ Python-3.12.0rc1/Lib/test/test_subprocess.py
 | 
			
		||||
@@ -280,7 +280,8 @@ class ProcessTestCase(BaseTestCase):
 | 
			
		||||
                      "time.sleep(3600)"],
 | 
			
		||||
                     # Some heavily loaded buildbots (sparc Debian 3.x) require
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user