forked from pool/python312
Accepting request 1102750 from devel:languages:python:Factory
OBS-URL: https://build.opensuse.org/request/show/1102750 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python312?expand=0&rev=6
This commit is contained in:
commit
1ff7c3b41f
@ -29,10 +29,10 @@ Co-authored-by: Lumír Balhar <frenzy.madness@gmail.com>
|
|||||||
Lib/test/test_sysconfig.py | 17 +++++++++++--
|
Lib/test/test_sysconfig.py | 17 +++++++++++--
|
||||||
3 files changed, 71 insertions(+), 4 deletions(-)
|
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.0rc1.orig/Lib/site.py
|
||||||
+++ Python-3.12.0b1/Lib/site.py
|
+++ Python-3.12.0rc1/Lib/site.py
|
||||||
@@ -377,8 +377,15 @@ def getsitepackages(prefixes=None):
|
@@ -377,8 +377,15 @@ def getsitepackages(prefixes=None):
|
||||||
return sitepackages
|
return sitepackages
|
||||||
|
|
||||||
@ -50,10 +50,10 @@ Index: Python-3.12.0b1/Lib/site.py
|
|||||||
for sitedir in getsitepackages(prefixes):
|
for sitedir in getsitepackages(prefixes):
|
||||||
if os.path.isdir(sitedir):
|
if os.path.isdir(sitedir):
|
||||||
addsitedir(sitedir, known_paths)
|
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.0rc1.orig/Lib/sysconfig.py
|
||||||
+++ Python-3.12.0b1/Lib/sysconfig.py
|
+++ Python-3.12.0rc1/Lib/sysconfig.py
|
||||||
@@ -104,6 +104,11 @@ if os.name == 'nt':
|
@@ -104,6 +104,11 @@ if os.name == 'nt':
|
||||||
else:
|
else:
|
||||||
_INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['posix_venv']
|
_INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['posix_venv']
|
||||||
@ -128,10 +128,10 @@ Index: Python-3.12.0b1/Lib/sysconfig.py
|
|||||||
if os.name == 'nt':
|
if os.name == 'nt':
|
||||||
# On Windows we want to substitute 'lib' for schemes rather
|
# On Windows we want to substitute 'lib' for schemes rather
|
||||||
# than the native value (without modifying vars, in case it
|
# 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.0rc1.orig/Lib/test/test_sysconfig.py
|
||||||
+++ Python-3.12.0b1/Lib/test/test_sysconfig.py
|
+++ Python-3.12.0rc1/Lib/test/test_sysconfig.py
|
||||||
@@ -110,8 +110,19 @@ class TestSysConfig(unittest.TestCase):
|
@@ -110,8 +110,19 @@ class TestSysConfig(unittest.TestCase):
|
||||||
for scheme in _INSTALL_SCHEMES:
|
for scheme in _INSTALL_SCHEMES:
|
||||||
for name in _INSTALL_SCHEMES[scheme]:
|
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(-)
|
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
|
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.0rc1.orig/Doc/library/ensurepip.rst
|
||||||
+++ Python-3.12.0b1/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
|
@@ -59,8 +59,9 @@ is at least as recent as the one availab
|
||||||
By default, ``pip`` is installed into the current virtual environment
|
By default, ``pip`` is installed into the current virtual environment
|
||||||
(if one is active) or into the system site packages (if there is no
|
(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
|
.. audit-event:: ensurepip.bootstrap root ensurepip.bootstrap
|
||||||
|
|
||||||
.. note::
|
.. 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.0rc1.orig/Lib/ensurepip/__init__.py
|
||||||
+++ Python-3.12.0b1/Lib/ensurepip/__init__.py
|
+++ Python-3.12.0rc1/Lib/ensurepip/__init__.py
|
||||||
@@ -120,27 +120,27 @@ def _disable_pip_configuration_settings(
|
@@ -120,27 +120,27 @@ def _disable_pip_configuration_settings(
|
||||||
os.environ['PIP_CONFIG_FILE'] = os.devnull
|
os.environ['PIP_CONFIG_FILE'] = os.devnull
|
||||||
|
|
||||||
@ -121,10 +121,10 @@ Index: Python-3.12.0b1/Lib/ensurepip/__init__.py
|
|||||||
upgrade=args.upgrade,
|
upgrade=args.upgrade,
|
||||||
user=args.user,
|
user=args.user,
|
||||||
verbosity=args.verbosity,
|
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.0rc1.orig/Lib/test/test_ensurepip.py
|
||||||
+++ Python-3.12.0b1/Lib/test/test_ensurepip.py
|
+++ Python-3.12.0rc1/Lib/test/test_ensurepip.py
|
||||||
@@ -105,6 +105,17 @@ class TestBootstrap(EnsurepipMixin, unit
|
@@ -105,6 +105,17 @@ class TestBootstrap(EnsurepipMixin, unit
|
||||||
unittest.mock.ANY,
|
unittest.mock.ANY,
|
||||||
)
|
)
|
||||||
@ -143,11 +143,11 @@ Index: Python-3.12.0b1/Lib/test/test_ensurepip.py
|
|||||||
def test_bootstrapping_with_user(self):
|
def test_bootstrapping_with_user(self):
|
||||||
ensurepip.bootstrap(user=True)
|
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.0rc1.orig/Makefile.pre.in
|
||||||
+++ Python-3.12.0b1/Makefile.pre.in
|
+++ Python-3.12.0rc1/Makefile.pre.in
|
||||||
@@ -1908,7 +1908,7 @@ install: @FRAMEWORKINSTALLFIRST@ commoni
|
@@ -1909,7 +1909,7 @@ install: @FRAMEWORKINSTALLFIRST@ commoni
|
||||||
install|*) ensurepip="" ;; \
|
install|*) ensurepip="" ;; \
|
||||||
esac; \
|
esac; \
|
||||||
$(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \
|
$(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \
|
||||||
@ -156,7 +156,7 @@ Index: Python-3.12.0b1/Makefile.pre.in
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
.PHONY: altinstall
|
.PHONY: altinstall
|
||||||
@@ -1919,7 +1919,7 @@ altinstall: commoninstall
|
@@ -1920,7 +1920,7 @@ altinstall: commoninstall
|
||||||
install|*) ensurepip="--altinstall" ;; \
|
install|*) ensurepip="--altinstall" ;; \
|
||||||
esac; \
|
esac; \
|
||||||
$(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \
|
$(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \
|
||||||
@ -165,9 +165,9 @@ Index: Python-3.12.0b1/Makefile.pre.in
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
.PHONY: commoninstall
|
.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
|
--- /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 @@
|
@@ -0,0 +1 @@
|
||||||
+A directory prefix can now be specified when using :mod:`ensurepip`.
|
+A directory prefix can now be specified when using :mod:`ensurepip`.
|
||||||
|
12
externally_managed.in
Normal file
12
externally_managed.in
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[externally-managed]
|
||||||
|
Error=To install Python packages system-wide, try
|
||||||
|
zypper install __PYTHONPREFIX__-xyz, where xyz is the package
|
||||||
|
you are trying to install.
|
||||||
|
|
||||||
|
If you wish to install a non-rpm packaged Python package,
|
||||||
|
create a virtual environment using __PYTHON__ -m venv path/to/venv.
|
||||||
|
Then use path/to/venv/bin/python and path/to/venv/bin/pip.
|
||||||
|
|
||||||
|
If you wish to install a non-rpm packaged Python application,
|
||||||
|
it may be easiest to use `pipx install xyz`, which will manage a
|
||||||
|
virtual environment for you. Install pipx via `zypper install __PYTHONPREFIX__-pipx` .
|
@ -3,8 +3,10 @@
|
|||||||
Misc/NEWS | 2 +-
|
Misc/NEWS | 2 +-
|
||||||
2 files changed, 1 insertion(+), 3 deletions(-)
|
2 files changed, 1 insertion(+), 3 deletions(-)
|
||||||
|
|
||||||
--- a/Doc/using/configure.rst
|
Index: Python-3.12.0rc1/Doc/using/configure.rst
|
||||||
+++ b/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
|
@@ -599,13 +599,11 @@ macOS Options
|
||||||
|
|
||||||
See ``Mac/README.rst``.
|
See ``Mac/README.rst``.
|
||||||
@ -19,9 +21,11 @@
|
|||||||
.. cmdoption:: --enable-framework=INSTALLDIR
|
.. cmdoption:: --enable-framework=INSTALLDIR
|
||||||
|
|
||||||
Create a Python.framework rather than a traditional Unix install. Optional
|
Create a Python.framework rather than a traditional Unix install. Optional
|
||||||
--- a/Misc/NEWS
|
Index: Python-3.12.0rc1/Misc/NEWS
|
||||||
+++ b/Misc/NEWS
|
===================================================================
|
||||||
@@ -11318,7 +11318,7 @@ C API
|
--- 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-40939: Removed documentation for the removed ``PyParser_*`` C API.
|
||||||
|
|
||||||
- bpo-43795: The list in :ref:`limited-api-list` now shows the public name
|
- bpo-43795: The list in :ref:`limited-api-list` now shows the public name
|
||||||
|
@ -4,9 +4,11 @@ unchanged:
|
|||||||
Doc/library/turtle.rst | 81 -------------------------------------------------
|
Doc/library/turtle.rst | 81 -------------------------------------------------
|
||||||
1 file changed, 81 deletions(-)
|
1 file changed, 81 deletions(-)
|
||||||
|
|
||||||
--- a/Doc/library/turtle.rst
|
Index: Python-3.12.0rc1/Doc/library/turtle.rst
|
||||||
+++ b/Doc/library/turtle.rst
|
===================================================================
|
||||||
@@ -251,7 +251,6 @@ Turtle motion
|
--- 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.
|
turtle is headed.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -14,7 +16,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.position()
|
>>> turtle.position()
|
||||||
(0.00,0.00)
|
(0.00,0.00)
|
||||||
@@ -278,7 +277,6 @@ Turtle motion
|
@@ -468,7 +467,6 @@ Turtle motion
|
||||||
>>> turtle.goto(0, 0)
|
>>> turtle.goto(0, 0)
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -22,7 +24,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.position()
|
>>> turtle.position()
|
||||||
(0.00,0.00)
|
(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`.
|
orientation depends on the turtle mode, see :func:`mode`.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -36,7 +38,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.heading()
|
>>> turtle.heading()
|
||||||
22.0
|
22.0
|
||||||
@@ -322,13 +318,11 @@ Turtle motion
|
@@ -512,13 +508,11 @@ Turtle motion
|
||||||
orientation depends on the turtle mode, see :func:`mode`.
|
orientation depends on the turtle mode, see :func:`mode`.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -50,7 +52,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.heading()
|
>>> turtle.heading()
|
||||||
22.0
|
22.0
|
||||||
@@ -351,13 +345,11 @@ Turtle motion
|
@@ -541,13 +535,11 @@ Turtle motion
|
||||||
not change the turtle's orientation.
|
not change the turtle's orientation.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -64,7 +66,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> tp = turtle.pos()
|
>>> tp = turtle.pos()
|
||||||
>>> tp
|
>>> tp
|
||||||
@@ -419,13 +411,11 @@ Turtle motion
|
@@ -609,13 +601,11 @@ Turtle motion
|
||||||
unchanged.
|
unchanged.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -78,7 +80,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.position()
|
>>> turtle.position()
|
||||||
(0.00,240.00)
|
(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.
|
Set the turtle's second coordinate to *y*, leave first coordinate unchanged.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -92,7 +94,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.position()
|
>>> turtle.position()
|
||||||
(0.00,40.00)
|
(0.00,40.00)
|
||||||
@@ -474,7 +462,6 @@ Turtle motion
|
@@ -664,7 +652,6 @@ Turtle motion
|
||||||
=================== ====================
|
=================== ====================
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -100,7 +102,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.setheading(90)
|
>>> turtle.setheading(90)
|
||||||
>>> turtle.heading()
|
>>> 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`).
|
its start-orientation (which depends on the mode, see :func:`mode`).
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -115,7 +117,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.heading()
|
>>> turtle.heading()
|
||||||
90.0
|
90.0
|
||||||
@@ -526,7 +511,6 @@ Turtle motion
|
@@ -716,7 +701,6 @@ Turtle motion
|
||||||
calculated automatically. May be used to draw regular polygons.
|
calculated automatically. May be used to draw regular polygons.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -123,7 +125,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.home()
|
>>> turtle.home()
|
||||||
>>> turtle.position()
|
>>> turtle.position()
|
||||||
@@ -555,7 +539,6 @@ Turtle motion
|
@@ -745,7 +729,6 @@ Turtle motion
|
||||||
|
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -131,7 +133,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.home()
|
>>> turtle.home()
|
||||||
>>> turtle.dot()
|
>>> turtle.dot()
|
||||||
@@ -573,7 +556,6 @@ Turtle motion
|
@@ -763,7 +746,6 @@ Turtle motion
|
||||||
it by calling ``clearstamp(stamp_id)``.
|
it by calling ``clearstamp(stamp_id)``.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -139,7 +141,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.color("blue")
|
>>> turtle.color("blue")
|
||||||
>>> stamp_id = turtle.stamp()
|
>>> stamp_id = turtle.stamp()
|
||||||
@@ -588,7 +570,6 @@ Turtle motion
|
@@ -778,7 +760,6 @@ Turtle motion
|
||||||
Delete stamp with given *stampid*.
|
Delete stamp with given *stampid*.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -147,7 +149,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.position()
|
>>> turtle.position()
|
||||||
(150.00,-0.00)
|
(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.
|
undo actions is determined by the size of the undobuffer.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -155,7 +157,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> for i in range(4):
|
>>> for i in range(4):
|
||||||
... turtle.fd(50); turtle.lt(80)
|
... turtle.fd(50); turtle.lt(80)
|
||||||
@@ -659,7 +639,6 @@ Turtle motion
|
@@ -849,7 +829,6 @@ Turtle motion
|
||||||
turtle turn instantly.
|
turtle turn instantly.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -163,7 +165,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.speed()
|
>>> turtle.speed()
|
||||||
3
|
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).
|
Return the turtle's current location (x,y) (as a :class:`Vec2D` vector).
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -171,7 +173,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.pos()
|
>>> turtle.pos()
|
||||||
(440.00,-0.00)
|
(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".
|
orientation which depends on the mode - "standard"/"world" or "logo".
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -179,7 +181,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.goto(10, 10)
|
>>> turtle.goto(10, 10)
|
||||||
>>> turtle.towards(0,0)
|
>>> 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.
|
Return the turtle's x coordinate.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -187,7 +189,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.home()
|
>>> turtle.home()
|
||||||
>>> turtle.left(50)
|
>>> 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.
|
Return the turtle's y coordinate.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -195,7 +197,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.home()
|
>>> turtle.home()
|
||||||
>>> turtle.left(60)
|
>>> turtle.left(60)
|
||||||
@@ -741,7 +716,6 @@ Tell Turtle's state
|
@@ -931,7 +906,6 @@ Tell Turtle's state
|
||||||
:func:`mode`).
|
:func:`mode`).
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -203,7 +205,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.home()
|
>>> turtle.home()
|
||||||
>>> turtle.left(67)
|
>>> 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.
|
other turtle, in turtle step units.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -211,7 +213,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.home()
|
>>> turtle.home()
|
||||||
>>> turtle.distance(30,40)
|
>>> turtle.distance(30,40)
|
||||||
@@ -782,7 +755,6 @@ Settings for measurement
|
@@ -972,7 +945,6 @@ Settings for measurement
|
||||||
Default value is 360 degrees.
|
Default value is 360 degrees.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -219,7 +221,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.home()
|
>>> turtle.home()
|
||||||
>>> turtle.left(90)
|
>>> turtle.left(90)
|
||||||
@@ -805,7 +777,6 @@ Settings for measurement
|
@@ -995,7 +967,6 @@ Settings for measurement
|
||||||
``degrees(2*math.pi)``.
|
``degrees(2*math.pi)``.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -227,7 +229,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.home()
|
>>> turtle.home()
|
||||||
>>> turtle.left(90)
|
>>> turtle.left(90)
|
||||||
@@ -816,7 +787,6 @@ Settings for measurement
|
@@ -1006,7 +977,6 @@ Settings for measurement
|
||||||
1.5707963267948966
|
1.5707963267948966
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -235,7 +237,7 @@ unchanged:
|
|||||||
:hide:
|
:hide:
|
||||||
|
|
||||||
>>> turtle.degrees(360)
|
>>> 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.
|
thickness. If no argument is given, the current pensize is returned.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -243,7 +245,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.pensize()
|
>>> turtle.pensize()
|
||||||
1
|
1
|
||||||
@@ -884,7 +853,6 @@ Drawing state
|
@@ -1074,7 +1043,6 @@ Drawing state
|
||||||
attributes in one statement.
|
attributes in one statement.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -251,7 +253,7 @@ unchanged:
|
|||||||
:options: +NORMALIZE_WHITESPACE
|
:options: +NORMALIZE_WHITESPACE
|
||||||
|
|
||||||
>>> turtle.pen(fillcolor="black", pencolor="red", pensize=10)
|
>>> 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.
|
Return ``True`` if pen is down, ``False`` if it's up.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -259,7 +261,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.penup()
|
>>> turtle.penup()
|
||||||
>>> turtle.isdown()
|
>>> turtle.isdown()
|
||||||
@@ -948,7 +915,6 @@ Color control
|
@@ -1138,7 +1105,6 @@ Color control
|
||||||
newly set pencolor.
|
newly set pencolor.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -267,7 +269,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> colormode()
|
>>> colormode()
|
||||||
1.0
|
1.0
|
||||||
@@ -997,7 +963,6 @@ Color control
|
@@ -1187,7 +1153,6 @@ Color control
|
||||||
with the newly set fillcolor.
|
with the newly set fillcolor.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -275,7 +277,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.fillcolor("violet")
|
>>> turtle.fillcolor("violet")
|
||||||
>>> turtle.fillcolor()
|
>>> turtle.fillcolor()
|
||||||
@@ -1036,7 +1001,6 @@ Color control
|
@@ -1226,7 +1191,6 @@ Color control
|
||||||
with the newly set colors.
|
with the newly set colors.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -283,7 +285,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.color("red", "green")
|
>>> turtle.color("red", "green")
|
||||||
>>> turtle.color()
|
>>> turtle.color()
|
||||||
@@ -1053,7 +1017,6 @@ Filling
|
@@ -1243,7 +1207,6 @@ Filling
|
||||||
~~~~~~~
|
~~~~~~~
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -291,7 +293,7 @@ unchanged:
|
|||||||
:hide:
|
:hide:
|
||||||
|
|
||||||
>>> turtle.home()
|
>>> turtle.home()
|
||||||
@@ -1063,7 +1026,6 @@ Filling
|
@@ -1253,7 +1216,6 @@ Filling
|
||||||
Return fillstate (``True`` if filling, ``False`` else).
|
Return fillstate (``True`` if filling, ``False`` else).
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -299,7 +301,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.begin_fill()
|
>>> turtle.begin_fill()
|
||||||
>>> if turtle.filling():
|
>>> if turtle.filling():
|
||||||
@@ -1088,7 +1050,6 @@ Filling
|
@@ -1278,7 +1240,6 @@ Filling
|
||||||
above may be either all yellow or have some white regions.
|
above may be either all yellow or have some white regions.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -307,7 +309,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.color("black", "red")
|
>>> turtle.color("black", "red")
|
||||||
>>> turtle.begin_fill()
|
>>> turtle.begin_fill()
|
||||||
@@ -1105,7 +1066,6 @@ More drawing control
|
@@ -1295,7 +1256,6 @@ More drawing control
|
||||||
variables to the default values.
|
variables to the default values.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -315,7 +317,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.goto(0,-22)
|
>>> turtle.goto(0,-22)
|
||||||
>>> turtle.left(100)
|
>>> turtle.left(100)
|
||||||
@@ -1156,7 +1116,6 @@ Visibility
|
@@ -1346,7 +1306,6 @@ Visibility
|
||||||
drawing observably.
|
drawing observably.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -323,7 +325,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.hideturtle()
|
>>> turtle.hideturtle()
|
||||||
|
|
||||||
@@ -1167,7 +1126,6 @@ Visibility
|
@@ -1357,7 +1316,6 @@ Visibility
|
||||||
Make the turtle visible.
|
Make the turtle visible.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -331,7 +333,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.showturtle()
|
>>> turtle.showturtle()
|
||||||
|
|
||||||
@@ -1198,7 +1156,6 @@ Appearance
|
@@ -1388,7 +1346,6 @@ Appearance
|
||||||
deal with shapes see Screen method :func:`register_shape`.
|
deal with shapes see Screen method :func:`register_shape`.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -339,7 +341,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.shape()
|
>>> turtle.shape()
|
||||||
'classic'
|
'classic'
|
||||||
@@ -1224,7 +1181,6 @@ Appearance
|
@@ -1414,7 +1371,6 @@ Appearance
|
||||||
``resizemode("user")`` is called by :func:`shapesize` when used with arguments.
|
``resizemode("user")`` is called by :func:`shapesize` when used with arguments.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -347,7 +349,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.resizemode()
|
>>> turtle.resizemode()
|
||||||
'noresize'
|
'noresize'
|
||||||
@@ -1248,7 +1204,6 @@ Appearance
|
@@ -1438,7 +1394,6 @@ Appearance
|
||||||
of the shape's outline.
|
of the shape's outline.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -355,7 +357,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.shapesize()
|
>>> turtle.shapesize()
|
||||||
(1.0, 1.0, 1)
|
(1.0, 1.0, 1)
|
||||||
@@ -1273,7 +1228,6 @@ Appearance
|
@@ -1463,7 +1418,6 @@ Appearance
|
||||||
heading of the turtle are sheared.
|
heading of the turtle are sheared.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -363,7 +365,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.shape("circle")
|
>>> turtle.shape("circle")
|
||||||
>>> turtle.shapesize(5,2)
|
>>> turtle.shapesize(5,2)
|
||||||
@@ -1290,7 +1244,6 @@ Appearance
|
@@ -1480,7 +1434,6 @@ Appearance
|
||||||
change the turtle's heading (direction of movement).
|
change the turtle's heading (direction of movement).
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -371,7 +373,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.reset()
|
>>> turtle.reset()
|
||||||
>>> turtle.shape("circle")
|
>>> turtle.shape("circle")
|
||||||
@@ -1336,7 +1289,6 @@ Appearance
|
@@ -1526,7 +1479,6 @@ Appearance
|
||||||
turtle (its direction of movement).
|
turtle (its direction of movement).
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -379,7 +381,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.reset()
|
>>> turtle.reset()
|
||||||
>>> turtle.shape("circle")
|
>>> turtle.shape("circle")
|
||||||
@@ -1365,7 +1317,6 @@ Appearance
|
@@ -1555,7 +1507,6 @@ Appearance
|
||||||
given matrix.
|
given matrix.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -387,7 +389,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle = Turtle()
|
>>> turtle = Turtle()
|
||||||
>>> turtle.shape("square")
|
>>> 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.
|
can be used to define a new shape or components of a compound shape.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -395,7 +397,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.shape("square")
|
>>> turtle.shape("square")
|
||||||
>>> turtle.shapetransform(4, -1, 0, 2)
|
>>> turtle.shapetransform(4, -1, 0, 2)
|
||||||
@@ -1406,7 +1356,6 @@ Using events
|
@@ -1596,7 +1546,6 @@ Using events
|
||||||
procedural way:
|
procedural way:
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -403,7 +405,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> def turn(x, y):
|
>>> def turn(x, y):
|
||||||
... left(180)
|
... left(180)
|
||||||
@@ -1427,7 +1376,6 @@ Using events
|
@@ -1617,7 +1566,6 @@ Using events
|
||||||
``None``, existing bindings are removed.
|
``None``, existing bindings are removed.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -411,7 +413,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> class MyTurtle(Turtle):
|
>>> class MyTurtle(Turtle):
|
||||||
... def glow(self,x,y):
|
... def glow(self,x,y):
|
||||||
@@ -1455,7 +1403,6 @@ Using events
|
@@ -1645,7 +1593,6 @@ Using events
|
||||||
mouse-click event on that turtle.
|
mouse-click event on that turtle.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -419,7 +421,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.ondrag(turtle.goto)
|
>>> turtle.ondrag(turtle.goto)
|
||||||
|
|
||||||
@@ -1483,7 +1430,6 @@ Special Turtle methods
|
@@ -1673,7 +1620,6 @@ Special Turtle methods
|
||||||
Return the last recorded polygon.
|
Return the last recorded polygon.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -427,7 +429,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.home()
|
>>> turtle.home()
|
||||||
>>> turtle.begin_poly()
|
>>> turtle.begin_poly()
|
||||||
@@ -1503,7 +1449,6 @@ Special Turtle methods
|
@@ -1693,7 +1639,6 @@ Special Turtle methods
|
||||||
turtle properties.
|
turtle properties.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -435,7 +437,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> mick = Turtle()
|
>>> mick = Turtle()
|
||||||
>>> joe = mick.clone()
|
>>> joe = mick.clone()
|
||||||
@@ -1516,7 +1461,6 @@ Special Turtle methods
|
@@ -1706,7 +1651,6 @@ Special Turtle methods
|
||||||
return the "anonymous turtle":
|
return the "anonymous turtle":
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -443,7 +445,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> pet = getturtle()
|
>>> pet = getturtle()
|
||||||
>>> pet.fd(50)
|
>>> 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.
|
TurtleScreen methods can then be called for that object.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -451,7 +453,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> ts = turtle.getscreen()
|
>>> ts = turtle.getscreen()
|
||||||
>>> ts
|
>>> ts
|
||||||
@@ -1548,7 +1491,6 @@ Special Turtle methods
|
@@ -1738,7 +1681,6 @@ Special Turtle methods
|
||||||
``None``, the undobuffer is disabled.
|
``None``, the undobuffer is disabled.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -459,7 +461,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> turtle.setundobuffer(42)
|
>>> turtle.setundobuffer(42)
|
||||||
|
|
||||||
@@ -1558,7 +1500,6 @@ Special Turtle methods
|
@@ -1748,7 +1690,6 @@ Special Turtle methods
|
||||||
Return number of entries in the undobuffer.
|
Return number of entries in the undobuffer.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -467,7 +469,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> while undobufferentries():
|
>>> while undobufferentries():
|
||||||
... undo()
|
... undo()
|
||||||
@@ -1581,7 +1522,6 @@ below:
|
@@ -1771,7 +1712,6 @@ below:
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -475,7 +477,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> s = Shape("compound")
|
>>> s = Shape("compound")
|
||||||
>>> poly1 = ((0,0),(10,-5),(0,10),(-10,-5))
|
>>> 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:
|
3. Now add the Shape to the Screen's shapelist and use it:
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -483,7 +485,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> register_shape("myshape", s)
|
>>> register_shape("myshape", s)
|
||||||
>>> shape("myshape")
|
>>> 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``.
|
``screen``.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -491,7 +493,7 @@ unchanged:
|
|||||||
:hide:
|
:hide:
|
||||||
|
|
||||||
>>> screen = Screen()
|
>>> screen = Screen()
|
||||||
@@ -1629,7 +1567,6 @@ Window control
|
@@ -1819,7 +1757,6 @@ Window control
|
||||||
Set or return background color of the TurtleScreen.
|
Set or return background color of the TurtleScreen.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -499,7 +501,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> screen.bgcolor("orange")
|
>>> screen.bgcolor("orange")
|
||||||
>>> screen.bgcolor()
|
>>> screen.bgcolor()
|
||||||
@@ -1721,7 +1658,6 @@ Window control
|
@@ -1911,7 +1848,6 @@ Window control
|
||||||
distorted.
|
distorted.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -507,7 +509,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> screen.reset()
|
>>> screen.reset()
|
||||||
>>> screen.setworldcoordinates(-50,-7.5,50,7.5)
|
>>> 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
|
... left(45); fd(2) # a regular octagon
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -515,7 +517,7 @@ unchanged:
|
|||||||
:hide:
|
:hide:
|
||||||
|
|
||||||
>>> screen.reset()
|
>>> screen.reset()
|
||||||
@@ -1754,7 +1689,6 @@ Animation control
|
@@ -1944,7 +1879,6 @@ Animation control
|
||||||
Optional argument:
|
Optional argument:
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -523,7 +525,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> screen.delay()
|
>>> screen.delay()
|
||||||
10
|
10
|
||||||
@@ -1776,7 +1710,6 @@ Animation control
|
@@ -1966,7 +1900,6 @@ Animation control
|
||||||
:func:`delay`).
|
:func:`delay`).
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -531,7 +533,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> screen.tracer(8, 25)
|
>>> screen.tracer(8, 25)
|
||||||
>>> dist = 2
|
>>> dist = 2
|
||||||
@@ -1813,7 +1746,6 @@ Using screen events
|
@@ -2003,7 +1936,6 @@ Using screen events
|
||||||
must have the focus. (See method :func:`listen`.)
|
must have the focus. (See method :func:`listen`.)
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -539,7 +541,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> def f():
|
>>> def f():
|
||||||
... fd(50)
|
... fd(50)
|
||||||
@@ -1834,7 +1766,6 @@ Using screen events
|
@@ -2024,7 +1956,6 @@ Using screen events
|
||||||
must have focus. (See method :func:`listen`.)
|
must have focus. (See method :func:`listen`.)
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -547,7 +549,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> def f():
|
>>> def f():
|
||||||
... fd(50)
|
... fd(50)
|
||||||
@@ -1859,7 +1790,6 @@ Using screen events
|
@@ -2049,7 +1980,6 @@ Using screen events
|
||||||
named ``turtle``:
|
named ``turtle``:
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -555,7 +557,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> screen.onclick(turtle.goto) # Subsequently clicking into the TurtleScreen will
|
>>> screen.onclick(turtle.goto) # Subsequently clicking into the TurtleScreen will
|
||||||
>>> # make the turtle move to the clicked point.
|
>>> # 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.
|
Install a timer that calls *fun* after *t* milliseconds.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -563,7 +565,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> running = True
|
>>> running = True
|
||||||
>>> def f():
|
>>> def f():
|
||||||
@@ -1961,7 +1890,6 @@ Settings and special methods
|
@@ -2151,7 +2080,6 @@ Settings and special methods
|
||||||
============ ========================= ===================
|
============ ========================= ===================
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -571,7 +573,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> mode("logo") # resets turtle heading to north
|
>>> mode("logo") # resets turtle heading to north
|
||||||
>>> mode()
|
>>> 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*.
|
values of color triples have to be in the range 0..*cmode*.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -579,7 +581,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> screen.colormode(1)
|
>>> screen.colormode(1)
|
||||||
>>> turtle.pencolor(240, 160, 80)
|
>>> 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.
|
do with a Tkinter Canvas.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -587,7 +589,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> cv = screen.getcanvas()
|
>>> cv = screen.getcanvas()
|
||||||
>>> cv
|
>>> 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.
|
Return a list of names of all currently available turtle shapes.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -595,7 +597,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> screen.getshapes()
|
>>> screen.getshapes()
|
||||||
['arrow', 'blank', 'circle', ..., 'turtle']
|
['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.
|
coordinates: Install the corresponding polygon shape.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -603,7 +605,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> screen.register_shape("triangle", ((5,-3), (0,5), (-5,-3)))
|
>>> 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.
|
Return the list of turtles on the screen.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -611,7 +613,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> for turtle in screen.turtles():
|
>>> for turtle in screen.turtles():
|
||||||
... turtle.color("red")
|
... 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
|
center window vertically
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -619,7 +621,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> screen.setup (width=200, height=200, startx=0, starty=0)
|
>>> screen.setup (width=200, height=200, startx=0, starty=0)
|
||||||
>>> # sets window to 200x200 pixels, in upper left of screen
|
>>> # 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*.
|
Set title of turtle window to *titlestring*.
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -627,7 +629,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> screen.title("Welcome to the turtle zoo!")
|
>>> screen.title("Welcome to the turtle zoo!")
|
||||||
|
|
||||||
@@ -2198,7 +2119,6 @@ Public classes
|
@@ -2388,7 +2309,6 @@ Public classes
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
@ -635,7 +637,7 @@ unchanged:
|
|||||||
|
|
||||||
>>> poly = ((0,0),(10,-5),(0,10),(-10,-5))
|
>>> poly = ((0,0),(10,-5),(0,10),(-10,-5))
|
||||||
>>> s = Shape("compound")
|
>>> s = Shape("compound")
|
||||||
@@ -2549,7 +2469,6 @@ Changes since Python 3.0
|
@@ -2774,7 +2694,6 @@ Changes since Python 3.0
|
||||||
|
|
||||||
|
|
||||||
.. doctest::
|
.. doctest::
|
||||||
|
@ -2,10 +2,10 @@
|
|||||||
Makefile.pre.in | 7 +++++++
|
Makefile.pre.in | 7 +++++++
|
||||||
1 file changed, 7 insertions(+)
|
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.0rc1.orig/Makefile.pre.in
|
||||||
+++ Python-3.12.0b1/Makefile.pre.in
|
+++ Python-3.12.0rc1/Makefile.pre.in
|
||||||
@@ -1332,11 +1332,18 @@ Modules/getbuildinfo.o: $(PARSER_OBJS) \
|
@@ -1332,11 +1332,18 @@ Modules/getbuildinfo.o: $(PARSER_OBJS) \
|
||||||
$(DTRACE_OBJS) \
|
$(DTRACE_OBJS) \
|
||||||
$(srcdir)/Modules/getbuildinfo.c
|
$(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.0rc1.orig/Lib/site.py
|
||||||
+++ Python-3.12.0b1/Lib/site.py
|
+++ Python-3.12.0rc1/Lib/site.py
|
||||||
@@ -76,7 +76,7 @@ import _sitebuiltins
|
@@ -76,7 +76,7 @@ import _sitebuiltins
|
||||||
import io
|
import io
|
||||||
|
|
||||||
|
@ -2,10 +2,10 @@
|
|||||||
Lib/test/test_posix.py | 2 +-
|
Lib/test/test_posix.py | 2 +-
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
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.0rc1.orig/Lib/test/test_posix.py
|
||||||
+++ Python-3.12.0b1/Lib/test/test_posix.py
|
+++ Python-3.12.0rc1/Lib/test/test_posix.py
|
||||||
@@ -431,7 +431,7 @@ class PosixTester(unittest.TestCase):
|
@@ -431,7 +431,7 @@ class PosixTester(unittest.TestCase):
|
||||||
def test_posix_fadvise(self):
|
def test_posix_fadvise(self):
|
||||||
fd = os.open(os_helper.TESTFN, os.O_RDONLY)
|
fd = os.open(os_helper.TESTFN, os.O_RDONLY)
|
||||||
|
@ -1,3 +1,138 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
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>
|
||||||
|
|
||||||
|
- add externally_managed.in to label this build as PEP-668 managed
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu Aug 3 14:13:30 UTC 2023 - Matej Cepl <mcepl@suse.com>
|
Thu Aug 3 14:13:30 UTC 2023 - Matej Cepl <mcepl@suse.com>
|
||||||
|
|
||||||
|
@ -105,7 +105,7 @@
|
|||||||
%define dynlib() %{sitedir}/lib-dynload/%{1}.cpython-%{abi_tag}-%{archname}-%{_os}%{?_gnu}%{?armsuffix}.so
|
%define dynlib() %{sitedir}/lib-dynload/%{1}.cpython-%{abi_tag}-%{archname}-%{_os}%{?_gnu}%{?armsuffix}.so
|
||||||
%bcond_without profileopt
|
%bcond_without profileopt
|
||||||
Name: %{python_pkg_name}%{psuffix}
|
Name: %{python_pkg_name}%{psuffix}
|
||||||
Version: 3.12.0b4
|
Version: 3.12.0rc1
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: Python 3 Interpreter
|
Summary: Python 3 Interpreter
|
||||||
License: Python-2.0
|
License: Python-2.0
|
||||||
@ -114,6 +114,7 @@ Source0: https://www.python.org/ftp/python/%{folderversion}/%{tarname}.ta
|
|||||||
Source1: https://www.python.org/ftp/python/%{folderversion}/%{tarname}.tar.xz.asc
|
Source1: https://www.python.org/ftp/python/%{folderversion}/%{tarname}.tar.xz.asc
|
||||||
Source2: baselibs.conf
|
Source2: baselibs.conf
|
||||||
Source3: README.SUSE
|
Source3: README.SUSE
|
||||||
|
Source4: externally_managed.in
|
||||||
Source7: macros.python3
|
Source7: macros.python3
|
||||||
Source8: import_failed.py
|
Source8: import_failed.py
|
||||||
Source9: import_failed.map
|
Source9: import_failed.map
|
||||||
@ -162,9 +163,6 @@ Patch34: skip-test_pyobject_freed_is_freed.patch
|
|||||||
# PATCH-FIX-SLE fix_configure_rst.patch bpo#43774 mcepl@suse.com
|
# PATCH-FIX-SLE fix_configure_rst.patch bpo#43774 mcepl@suse.com
|
||||||
# remove duplicate link targets and make documentation with old Sphinx in SLE
|
# remove duplicate link targets and make documentation with old Sphinx in SLE
|
||||||
Patch35: fix_configure_rst.patch
|
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: autoconf-archive
|
||||||
BuildRequires: automake
|
BuildRequires: automake
|
||||||
BuildRequires: fdupes
|
BuildRequires: fdupes
|
||||||
@ -433,7 +431,6 @@ other applications.
|
|||||||
%patch34 -p1
|
%patch34 -p1
|
||||||
# %%endif
|
# %%endif
|
||||||
%patch35 -p1
|
%patch35 -p1
|
||||||
%patch41 -p1
|
|
||||||
|
|
||||||
# drop Autoconf version requirement
|
# drop Autoconf version requirement
|
||||||
sed -i 's/^AC_PREREQ/dnl AC_PREREQ/' configure.ac
|
sed -i 's/^AC_PREREQ/dnl AC_PREREQ/' configure.ac
|
||||||
@ -707,6 +704,9 @@ rm %{buildroot}%{_libdir}/libpython3.so
|
|||||||
rm %{buildroot}%{_libdir}/pkgconfig/{python3,python3-embed}.pc
|
rm %{buildroot}%{_libdir}/pkgconfig/{python3,python3-embed}.pc
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
# PEP-0668 mark this as a distro maintained python
|
||||||
|
sed -e 's,__PYTHONPREFIX__,%{python_pkg_name},' -e 's,__PYTHON__,python%{python_version},' < %{SOURCE4} > %{buildroot}%{sitedir}/EXTERNALLY-MANAGED
|
||||||
|
|
||||||
# link shared library instead of static library that tools expect
|
# link shared library instead of static library that tools expect
|
||||||
ln -s ../../libpython%{python_abi}.so %{buildroot}%{_libdir}/python%{python_version}/config-%{python_abi}-%{archname}-%{_os}%{?_gnu}%{?armsuffix}/libpython%{python_abi}.so
|
ln -s ../../libpython%{python_abi}.so %{buildroot}%{_libdir}/python%{python_version}/config-%{python_abi}-%{archname}-%{_os}%{?_gnu}%{?armsuffix}/libpython%{python_abi}.so
|
||||||
|
|
||||||
@ -902,6 +902,8 @@ echo %{sitedir}/_import_failed > %{buildroot}/%{sitedir}/site-packages/zzzz-impo
|
|||||||
%{_mandir}/man1/python3.1%{?ext_man}
|
%{_mandir}/man1/python3.1%{?ext_man}
|
||||||
%endif
|
%endif
|
||||||
%{_mandir}/man1/python%{python_version}.1%{?ext_man}
|
%{_mandir}/man1/python%{python_version}.1%{?ext_man}
|
||||||
|
# PEP-0668
|
||||||
|
%{sitedir}/EXTERNALLY-MANAGED
|
||||||
# license text, not a doc because the code can use it at run-time
|
# license text, not a doc because the code can use it at run-time
|
||||||
%{sitedir}/LICENSE.txt
|
%{sitedir}/LICENSE.txt
|
||||||
# RPM macros
|
# RPM macros
|
||||||
|
@ -2,8 +2,10 @@
|
|||||||
Lib/test/test_capi/test_mem.py | 1 +
|
Lib/test/test_capi/test_mem.py | 1 +
|
||||||
1 file changed, 1 insertion(+)
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
--- a/Lib/test/test_capi/test_mem.py
|
Index: Python-3.12.0rc1/Lib/test/test_capi/test_mem.py
|
||||||
+++ b/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)
|
@@ -110,6 +110,7 @@ class PyMemDebugTests(unittest.TestCase)
|
||||||
def test_pyobject_forbidden_bytes_is_freed(self):
|
def test_pyobject_forbidden_bytes_is_freed(self):
|
||||||
self.check_pyobject_is_freed('check_pyobject_forbidden_bytes_is_freed')
|
self.check_pyobject_is_freed('check_pyobject_forbidden_bytes_is_freed')
|
||||||
|
@ -2,8 +2,10 @@
|
|||||||
Lib/test/test_subprocess.py | 3 ++-
|
Lib/test/test_subprocess.py | 3 ++-
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
--- a/Lib/test/test_subprocess.py
|
Index: Python-3.12.0rc1/Lib/test/test_subprocess.py
|
||||||
+++ b/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):
|
@@ -280,7 +280,8 @@ class ProcessTestCase(BaseTestCase):
|
||||||
"time.sleep(3600)"],
|
"time.sleep(3600)"],
|
||||||
# Some heavily loaded buildbots (sparc Debian 3.x) require
|
# Some heavily loaded buildbots (sparc Debian 3.x) require
|
||||||
|
Loading…
Reference in New Issue
Block a user