64 Commits

Author SHA256 Message Date
8490c35b5e Accepting request 1311758 from devel:languages:python:Factory
OBS-URL: https://build.opensuse.org/request/show/1311758
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=33
2025-10-17 15:25:33 +00:00
216aee44d2 Accepting request 1311480 from home:dgarcia:branches:devel:languages:python:Factory
- Update to 3.13.9:
  - Library
    - gh-139783: Fix inspect.getsourcelines() for the case when a
      decorator is followed by a comment or an empty line.
- Update to 3.13.8:
  - macOS
    - gh-124111: Update macOS installer to use Tcl/Tk 8.6.17.
    - gh-139573: Updated bundled version of OpenSSL to 3.0.18.
  - Windows
    - gh-139573: Updated bundled version of OpenSSL to 3.0.18.
    - gh-138896: Fix error installing C runtime on non-updated Windows
      machines
  - Tools/Demos
    - gh-139330: SBOM generation tool didn’t cross-check the version
      and checksum values against the Modules/expat/refresh.sh script,
      leading to the values becoming out-of-date during routine
      updates.
    - gh-137873: The iOS test runner has been simplified, resolving
      some issues that have been observed using the runner in GitHub
      Actions and Azure Pipelines test environments.
  - Tests
    - gh-139208: Fix regrtest --fast-ci --verbose: don’t ignore the
      --verbose option anymore. Patch by Victor Stinner.
  - Security
    - gh-139400: xml.parsers.expat: Make sure that parent Expat
      parsers are only garbage-collected once they are no longer
      referenced by subparsers created by
      ExternalEntityParserCreate(). Patch by Sebastian Pipping.
    - gh-139283: sqlite3: correctly handle maximum number of rows to
      fetch in Cursor.fetchmany and reject negative values for

OBS-URL: https://build.opensuse.org/request/show/1311480
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=128
2025-10-16 16:27:11 +00:00
5c7e077e05 Accepting request 1307951 from devel:languages:python:Factory
OBS-URL: https://build.opensuse.org/request/show/1307951
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=32
2025-10-01 16:55:40 +00:00
6ccfd57cb6 Accepting request 1307678 from home:dgarcia:branches:devel:languages:python:Factory
- Add gh139257-Support-docutils-0.22.patch to fix build with latest
  docutils (>=0.22) gh#python/cpython#139257

OBS-URL: https://build.opensuse.org/request/show/1307678
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=126
2025-09-29 16:57:25 +00:00
f26b5dd668 Accepting request 1306530 from devel:languages:python:Factory
OBS-URL: https://build.opensuse.org/request/show/1306530
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=31
2025-09-23 14:05:25 +00:00
97f2e50954 Accepting request 1306454 from home:dimstar:Factory
- Drop AppStream: this results in a different cycle than
  appstream-glib. As the appdata.xml is controlled by ourselves, we
  can get away with just manually validating it when changing it.

OBS-URL: https://build.opensuse.org/request/show/1306454
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=124
2025-09-22 12:45:38 +00:00
d782ad00ca - Require AppStream to validate appdata file instead of deprecated
appstream-glib.
- Update idle3.appdata.xml to pass the more pedantic appstreamcli.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=123
2025-09-18 14:05:23 +00:00
b40f1d6405 Accepting request 1304230 from devel:languages:python:Factory
OBS-URL: https://build.opensuse.org/request/show/1304230
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=30
2025-09-14 16:49:35 +00:00
45ae9e0091 Accepting request 1303343 from home:dgarcia:branches:devel:languages:python:Factory
- Add gh138131-exclude-pycache-from-digest.patch fixing reproducible
  build for python-nogil.
  (bsc#1244680, gh#python/cpython#138131)

OBS-URL: https://build.opensuse.org/request/show/1303343
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=121
2025-09-12 07:39:47 +00:00
0f5697e310 Accepting request 1299833 from devel:languages:python:Factory
- Update to 3.13.7:
  - gh-137583: Fix a deadlock introduced in 3.13.6 when a call
    to ssl.SSLSocket.recv was blocked in one thread, and then
    another method on the object (such as ssl.SSLSocket.send) was
    subsequently called in another thread.
  - gh-137044: Return large limit values as positive integers
    instead of negative integers in resource.getrlimit().
    Accept large values and reject negative values (except
    RLIM_INFINITY) for limits in resource.setrlimit().
  - gh-136914: Fix retrieval of doctest.DocTest.lineno
    for objects decorated with functools.cache() or
    functools.cached_property.
  - gh-131788: Make ResourceTracker.send from multiprocessing
    re-entrant safe
  - gh-136155: We are now checking for fatal errors in EPUB
    builds in CI.
  - gh-137400: Fix a crash in the free threading build when
    disabling profiling or tracing across all threads with
    PyEval_SetProfileAllThreads() or PyEval_SetTraceAllThreads()
    or their Python equivalents threading.settrace_all_threads()
    and threading.setprofile_all_threads().
- Remove upstreamed patch:
  - gh137583-only-lock-SSL-context.patch

- Add gh137583-only-lock-SSL-context.patch fixing the
  regression in 3.13.6 by breaking non-blocking TLS connections
  (gh#python/cpython#137583).

- Update to 3.13.6:
  - Security

OBS-URL: https://build.opensuse.org/request/show/1299833
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=29
2025-08-21 14:47:12 +00:00
f819c56b57 - Update to 3.13.7:
- gh-137583: Fix a deadlock introduced in 3.13.6 when a call
    to ssl.SSLSocket.recv was blocked in one thread, and then
    another method on the object (such as ssl.SSLSocket.send) was
    subsequently called in another thread.
  - gh-137044: Return large limit values as positive integers
    instead of negative integers in resource.getrlimit().
    Accept large values and reject negative values (except
    RLIM_INFINITY) for limits in resource.setrlimit().
  - gh-136914: Fix retrieval of doctest.DocTest.lineno
    for objects decorated with functools.cache() or
    functools.cached_property.
  - gh-131788: Make ResourceTracker.send from multiprocessing
    re-entrant safe
  - gh-136155: We are now checking for fatal errors in EPUB
    builds in CI.
  - gh-137400: Fix a crash in the free threading build when
    disabling profiling or tracing across all threads with
    PyEval_SetProfileAllThreads() or PyEval_SetTraceAllThreads()
    or their Python equivalents threading.settrace_all_threads()
    and threading.setprofile_all_threads().
- Remove upstreamed patch:
  - gh137583-only-lock-SSL-context.patch

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=119
2025-08-15 12:33:36 +00:00
6ca12749fe Accepting request 1299154 from home:mcepl:branches:devel:languages:python:Factory
REfresh the patch

OBS-URL: https://build.opensuse.org/request/show/1299154
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=118
2025-08-12 22:07:14 +00:00
af83d0ea02 - Add gh137583-only-lock-SSL-context.patch fixing the
regression in 3.13.6 by breaking non-blocking TLS connections
  (gh#python/cpython#137583).

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=117
2025-08-12 09:37:56 +00:00
588cd5ec7f declarations are automatically closed, tags are ignored
(CVE-2025-6069, bsc#1244705).
- Remove upstreamed patches:
  - CVE-2025-8194-tarfile-no-neg-offsets.patch
  - CVE-2025-6069-quad-complex-HTMLParser.patch

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=116
2025-08-07 10:56:04 +00:00
4a974dadae - Update to 3.13.6:
Python 3.13.6 final
Release date: 2025-08-06
  - Tools/Demos
    - gh-135968: Stubs for strip are now provided as part of an
      iOS install.
  - Tests
    - gh-135966: The iOS testbed now handles the app_packages
      folder as a site directory.
    - gh-135494: Fix regrtest to support excluding tests from
      --pgo tests. Patch by Victor Stinner.
    - gh-135489: Show verbose output for failing tests during PGO
      profiling step with –enable-optimizations.
  - Security
    - gh-135661: Fix parsing start and end tags in
      html.parser.HTMLParser according to the HTML5 standard.
        - Whitespaces no longer accepted between </ and the tag
          name. E.g. </ script> does not end the script section.
        - Vertical tabulation (\v) and non-ASCII whitespaces no
          longer recognized as whitespaces. The only whitespaces
          are \t\n\r\f and space.
        - Null character (U+0000) no longer ends the tag name.
        - Attributes and slashes after the tag name in end tags
          are now ignored, instead of terminating after the first
          > in quoted attribute value. E.g. </script/foo=">"/>.
        - Multiple slashes and whitespaces between the last
          attribute and closing > are now ignored in both start
          and end tags. E.g. <a foo=bar/ //>.
        - Multiple = between attribute name and value are no
          longer collapsed. E.g. <a foo==bar> produces attribute

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=115
2025-08-07 10:16:41 +00:00
9a64481749 Accepting request 1297126 from devel:languages:python:Factory
- Add CVE-2025-8194-tarfile-no-neg-offsets.patch which now
  validates archives to ensure member offsets are non-negative
  (gh#python/cpython#130577, CVE-2025-8194, bsc#1247249).

OBS-URL: https://build.opensuse.org/request/show/1297126
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=28
2025-08-04 13:22:18 +00:00
0c1f23a3d6 - Add CVE-2025-8194-tarfile-no-neg-offsets.patch which now
validates archives to ensure member offsets are non-negative
  (gh#python/cpython#130577, CVE-2025-8194, bsc#1247249).

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=113
2025-08-01 20:14:12 +00:00
00d0af4ebb Accepting request 1294512 from devel:languages:python:Factory
DEPENDS ON SR#1294511, THEY HAVE TO GO TOGETHER!!!

- Fix gil/nogil package description, bsc#1246229

OBS-URL: https://build.opensuse.org/request/show/1294512
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=27
2025-07-20 13:28:48 +00:00
8fc89fce82 - Fix gil/nogil package description, bsc#1246229
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=111
2025-07-10 10:18:09 +00:00
5584dde572 - Add CVE-2025-6069-quad-complex-HTMLParser.patch to avoid worst
case quadratic complexity when processing certain crafted
  malformed inputs with HTMLParser (CVE-2025-6069, bsc#1244705).

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=110
2025-07-02 14:51:36 +00:00
b30cd19ff8 - Add bsc1243155-sphinx-non-determinism.patch (bsc#1243155) to
generate ids for audit_events using docname (reproducible
  builds).

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=109
2025-07-02 13:52:43 +00:00
cb554c7d4c Accepting request 1289841 from home:dgarcia:branches:devel:languages:python:Factory
- Use one core to build doc. This will make sphinx doc build
  reproducible.
  bsc#1243155

OBS-URL: https://build.opensuse.org/request/show/1289841
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=108
2025-07-02 11:27:27 +00:00
92106b1aea Accepting request 1288597 from devel:languages:python:Factory
CVE-2025-4517 (bsc#1244032). Also addresses CVE-2025-4435
      (gh#135034, bsc#1244061).

OBS-URL: https://build.opensuse.org/request/show/1288597
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=26
2025-06-26 09:38:02 +00:00
cf3b0e517c Add link to bsc#1244061 to changelog.
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=106
2025-06-25 19:43:42 +00:00
f3df88065e Accepting request 1287762 from devel:languages:python:Factory
SHOULD GO BACK TO openSUSE:Factory:Staging:O

- adjusted sofilename for "nogil" build correctly.
- Update to 3.13.5:
  - Tests
    - gh-135120: Add test.support.subTests().
  - Library
    - gh-133967: Do not normalize locale name ‘C.UTF-8’ to
      ‘en_US.UTF-8’.
    - gh-135326: Restore support of integer-like objects with
      __index__() in random.getrandbits().
    - gh-135321: Raise a correct exception for values greater
      than 0x7fffffff for the BINSTRING opcode in the C
      implementation of pickle.
    - gh-135276: Backported bugfixes in zipfile.Path from
      zipp 3.23. Fixed .name, .stem and other basename-based
      properties on Windows when working with a zipfile on disk.
    - gh-134151: email: Fix TypeError in
      email.utils.decode_params() when sorting RFC 2231
      continuations that contain an unnumbered section.
    - gh-134152: email: Fix parsing of email message ID with
      invalid domain.
    - gh-127081: Fix libc thread safety issues with os by
      replacing getlogin with getlogin_r re-entrant version.
    - gh-131884: Fix formatting issues in json.dump() when both
      indent and skipkeys are used.
  - Core and Builtins
    - gh-135171: Roll back changes to generator and list
      comprehensions that went into 3.13.4 to fix gh-127682,
      but which involved semantic and bytecode changes not
      appropriate for a bugfix release.
  - C API
    - gh-134989: Fix Py_RETURN_NONE, Py_RETURN_TRUE and
      Py_RETURN_FALSE macros in the limited C API 3.11 and
      older: don’t treat Py_None, Py_True and Py_False as
      immortal. Patch by Victor Stinner.
    - gh-134989: Implement PyObject_DelAttr() and
      PyObject_DelAttrString() as macros in the limited C API
      3.12 and older. Patch by Victor Stinner.
- Substantially rewritten doc-py38-to-py36.patch patch to be more
  flexible and covering even unexpected changes.
- Update to 3.13.4:
  - Security
    - gh-135034: Fixes multiple issues that allowed tarfile
      extraction filters (filter="data" and filter="tar") to be
      bypassed using crafted symlinks and hard links.
      Addresses CVE-2024-12718 (bsc#1244056), CVE-2025-4138
      (bsc#1244059), CVE-2025-4330 (bsc#1244060), and
      CVE-2025-4517 (bsc#1244032).
    - gh-133767: Fix use-after-free in the “unicode-escape”
      decoder with a non-“strict” error handler (CVE-2025-4516,
      bsc#1243273).
    - gh-128840: Short-circuit the processing of long IPv6
      addresses early in ipaddress to prevent excessive memory
      consumption and a minor denial-of-service.
  - Library
    - gh-134718: ast.dump() now only omits None and [] values if
      they are default values.
    - gh-128840: Fix parsing long IPv6 addresses with embedded
      IPv4 address.
    - gh-134696: Built-in HACL* and OpenSSL implementations of
      hash function constructors now correctly accept the same
      documented named arguments. For instance, md5() could be
      previously invoked as md5(data=data) or md5(string=string)
      depending on the underlying implementation but these calls
      were not compatible. Patch by Bénédikt Tran.
    - gh-134210: curses.window.getch() now correctly handles
      signals. Patch by Bénédikt Tran.
    - gh-80334: multiprocessing.freeze_support() now checks for
      work on any “spawn” start method platform rather than only
      on Windows.
    - gh-114177: Fix asyncio to not close subprocess pipes which
      would otherwise error out when the event loop is already
      closed.
    - gh-134152: Fixed UnboundLocalError that could occur during
      email header parsing if an expected trailing delimiter is
      missing in some contexts.
    - gh-62184: Remove import of C implementation of io.FileIO
      from Python implementation which has its own implementation
    - gh-133982: Emit RuntimeWarning in the Python implementation
      of io when the file-like object is not closed explicitly in
      the presence of multiple I/O layers.
    - gh-133890: The tarfile module now handles
      UnicodeEncodeError in the same way as OSError when cannot
      extract a member.
    - gh-134097: Fix interaction of the new REPL and -X
      showrefcount command line option.
    - gh-133889: The generated directory listing page in
      http.server.SimpleHTTPRequestHandler now only shows the
      decoded path component of the requested URL, and not the
      query and fragment.
    - gh-134098: Fix handling paths that end with
      a percent-encoded slash (%2f or %2F) in
      http.server.SimpleHTTPRequestHandler.
    - gh-134062: ipaddress: fix collisions in __hash__() for
      IPv4Network and IPv6Network objects.
    - gh-133745: In 3.13.3 we accidentally changed the signature
      of the asyncio create_task() family of methods and how it
      calls a custom task factory in a backwards incompatible
      way. Since some 3rd party libraries have already made
      changes to work around the issue that might break if
      we simply reverted the changes, we’re instead changing
      things to be backwards compatible with 3.13.2 while still
      supporting those workarounds for 3.13.3. In particular, the
      special-casing of name and context is back (until 3.14) and
      consequently eager tasks may still find that their name
      hasn’t been set before they execute their first yielding
      await.
    - gh-71253: Raise ValueError in open() if opener returns a
      negative file-descriptor in the Python implementation of io
      to match the C implementation.
    - gh-77057: Fix handling of invalid markup declarations in
      html.parser.HTMLParser.
    - gh-133489: random.getrandbits() can now generate more that
      231 bits. random.randbytes() can now generate more that 256
      MiB.
    - gh-133290: Fix attribute caching issue when setting
      ctypes._Pointer._type_ in the undocumented and deprecated
      ctypes.SetPointerType() function and the undocumented
      set_type() method.
    - gh-132876: ldexp() on Windows doesn’t round subnormal
      results before Windows 11, but should. Python’s
      math.ldexp() wrapper now does round them, so results may
      change slightly, in rare cases of very small results, on
      Windows versions before 11.
    - gh-133089: Use original timeout value for
      subprocess.TimeoutExpired when the func subprocess.run()
      is called with a timeout instead of sometimes a confusing
      partial remaining time out value used internally on the
      final wait().
    - gh-133009: xml.etree.ElementTree: Fix a crash in
      Element.__deepcopy__ when the element is concurrently
      mutated. Patch by Bénédikt Tran.
    - gh-132995: Bump the version of pip bundled in ensurepip to
      version 25.1.1
    - gh-132017: Fix error when pyrepl is suspended, then resumed
      and terminated.
    - gh-132673: Fix a crash when using _align_ = 0 and _fields_
      = [] in a ctypes.Structure.
    - gh-132527: Include the valid typecode ‘w’ in the error
      message when an invalid typecode is passed to array.array.
    - gh-132439: Fix PyREPL on Windows: characters entered via
      AltGr are swallowed. Patch by Chris Eibl.
    - gh-132429: Fix support of Bluetooth sockets on NetBSD and
      DragonFly BSD.
    - gh-132106: QueueListener.start now raises a RuntimeError if
      the listener is already started.
    - gh-132417: Fix a NULL pointer dereference when a C function
      called using ctypes with restype py_object returns NULL.
    - gh-132385: Fix instance error suggestions trigger potential
      exceptions in object.__getattr__() in traceback.
    - gh-132308: A traceback.TracebackException now correctly
      renders the __context__ and __cause__ attributes from
      falsey Exception, and the exceptions attribute from falsey
      ExceptionGroup.
    - gh-132250: Fixed the SystemError in cProfile when locating
      the actual C function of a method raises an exception.
    - gh-132063: Prevent exceptions that evaluate as
      falsey (namely, when their __bool__ method returns
      False or their __len__ method returns 0) from being
      ignored by concurrent.futures.ProcessPoolExecutor and
      concurrent.futures.ThreadPoolExecutor.
    - gh-119605: Respect follow_wrapped for __init__() and
      __new__() methods when getting the class signature for a
      class with inspect.signature(). Preserve class signature
      after wrapping with warnings.deprecated(). Patch by Xuehai
      Pan.
    - gh-91555: Ignore log messages generated during handling of
      log messages, to avoid deadlock or infinite recursion.
    - gh-131434: Improve error reporting for incorrect format in
      time.strptime().
    - gh-131127: Systems using LibreSSL now successfully build.
    - gh-130999: Avoid exiting the new REPL and offer suggestions
      even if there are non-string candidates when errors occur.
    - gh-130941: Fix configparser.ConfigParser parsing empty
      interpolation with allow_no_value set to True.
    - gh-129098: Fix REPL traceback reporting when using
      compile() with an inexisting file. Patch by Bénédikt Tran.
    - gh-130631: http.cookiejar.join_header_words() is now more
      similar to the original Perl version. It now quotes the
      same set of characters and always quote values that end
      with "\n".
    - gh-129719: Fix missing socket.CAN_RAW_ERR_FILTER constant
      in the socket module on Linux systems. It was missing since
      Python 3.11.
    - gh-124096: Turn on virtual terminal mode and enable
      bracketed paste in REPL on Windows console. (If the
      terminal does not support bracketed paste, enabling it does
      nothing.)
    - gh-122559: Remove __reduce__() and __reduce_ex__() methods
      that always raise TypeError in the C implementation
      of io.FileIO, io.BufferedReader, io.BufferedWriter
      and io.BufferedRandom and replace them with default
      __getstate__() methods that raise TypeError. This restores
      fine details of behavior of Python 3.11 and older versions.
    - gh-122179: hashlib.file_digest() now raises BlockingIOError
      when no data is available during non-blocking I/O. Before,
      it added spurious null bytes to the digest.
    - gh-86155: html.parser.HTMLParser.close() no longer loses
      data when the <script> tag is not closed. Patch by Waylan
      Limberg.
    - gh-69426: Fix html.parser.HTMLParser to not unescape
      character entities in attribute values if they are followed
      by an ASCII alphanumeric or an equals sign.
    - bpo-44172: Keep a reference to original curses windows in
      subwindows so that the original window does not get deleted
      before subwindows.
  - Tests
    - gh-133744: Fix multiprocessing interrupt test. Add an event
      to synchronize the parent process with the child process:
      wait until the child process starts sleeping. Patch by
      Victor Stinner.
    - gh-133639: Fix
      TestPyReplAutoindent.test_auto_indent_default() doesn’t run
      input_code.
    - gh-133131: The iOS testbed will now select the most
      recently released “SE-class” device for testing if a device
      isn’t explicitly specified.
    - gh-109981: The test helper that counts the list of open
      file descriptors now uses the optimised /dev/fd approach on
      all Apple platforms, not just macOS. This avoids crashes
      caused by guarded file descriptors.
  - IDLE
    - gh-112936: fix IDLE: no Shell menu item in single-process
      mode.
  - Documentation
    - gh-107006: Move documentation and example code for
      threading.local from its docstring to the official docs.
  - Core and Builtins
    - gh-134908: Fix crash when iterating over lines in a text
      file on the free threaded build.
    - gh-127682: No longer call __iter__ twice in list
      comprehensions. This brings the behavior of list
      comprehensions in line with other forms of iteration
    - gh-134381: Fix RuntimeError when using a not-started
      threading.Thread after calling os.fork()
    - gh-128066: Fixes an edge case where PyREPL improperly threw
      an error when Python is invoked on a read only filesystem
      while trying to write history file entries.
    - gh-134100: Fix a use-after-free bug that occurs when an
      imported module isn’t in sys.modules after its initial
      import. Patch by Nico-Posada.
    - gh-133703: Fix hashtable in dict can be bigger than
      intended in some situations.
    - gh-132869: Fix crash in the free threading build when
      accessing an object attribute that may be concurrently
      inserted or deleted.
    - gh-132762: fromkeys() no longer loops forever when adding
      a small set of keys to a large base dict. Patch by Angela
      Liss.
    - gh-133543: Fix a possible memory leak that could occur when
      directly accessing instance dictionaries (__dict__) that
      later become part of a reference cycle.
    - gh-133516: Raise ValueError when constants True, False or
      None are used as an identifier after NFKC normalization.
    - gh-133441: Fix crash upon setting an attribute with a dict
      subclass. Patch by Victor Stinner.
    - gh-132942: Fix two races in the type lookup cache. This
      affected the free-threaded build and could cause crashes
      (apparently quite difficult to trigger).
    - gh-132713: Fix repr(list) race condition: hold a strong
      reference to the item while calling repr(item). Patch by
      Victor Stinner.
    - gh-132747: Fix a crash when calling __get__() of a method
      with a None second argument.
    - gh-132542: Update Thread.native_id after fork(2) to ensure
      accuracy. Patch by Noam Cohen.
    - gh-124476: Fix decoding from the locale encoding in the
      C.UTF-8 locale.
    - gh-131927: Compiler warnings originating from the same
      module and line number are now only emitted once, matching
      the behaviour of warnings emitted from user code. This can
      also be configured with warnings filters.
    - gh-127682: No longer call __iter__ twice when creating and
      executing a generator expression. Creating a generator
      expression from a non-interable will raise only when the
      generator expression is executed. This brings the behavior
      of generator expressions in line with other generators.
    - gh-131878: Handle uncaught exceptions in the main input
      loop for the new REPL.
    - gh-131878: Fix support of unicode characters with two or
      more codepoints on Windows in the new REPL.
    - gh-130804: Fix support of unicode characters on Windows in
      the new REPL.
    - gh-130070: Fixed an assertion error for exec() passed a
      string source and a non-None closure. Patch by Bartosz
      Sławecki.
    - gh-129958: Fix a bug that was allowing newlines
      inconsitently in format specifiers for single-quoted
      f-strings. Patch by Pablo Galindo.
  - C API
    - gh-132909: Fix an overflow when handling the K format in
      Py_BuildValue(). Patch by Bénédikt Tran.
- Remove upstreamed patches:
  - CVE-2025-4516-DecodeError-handler.patch
  - gh-132535-rsrc-warn-test_timeout.patch

OBS-URL: https://build.opensuse.org/request/show/1287762
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=25
2025-06-24 18:45:07 +00:00
7d8817d9bb - Substantially rewritten doc-py38-to-py36.patch patch to be more
flexible and covering even unexpected changes.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=104
2025-06-22 19:29:14 +00:00
308dfaef9b Accepting request 1287576 from home:msmeissn:branches:devel:languages:python:Factory
- adjusted sofilename for "nogil" build correctly.

OBS-URL: https://build.opensuse.org/request/show/1287576
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=103
2025-06-22 16:37:53 +00:00
c2d30804e6 - Update to 3.13.5:
- Tests
    - gh-135120: Add test.support.subTests().
  - Library
    - gh-133967: Do not normalize locale name ‘C.UTF-8’ to
      ‘en_US.UTF-8’.
    - gh-135326: Restore support of integer-like objects with
      __index__() in random.getrandbits().
    - gh-135321: Raise a correct exception for values greater
      than 0x7fffffff for the BINSTRING opcode in the C
      implementation of pickle.
    - gh-135276: Backported bugfixes in zipfile.Path from
      zipp 3.23. Fixed .name, .stem and other basename-based
      properties on Windows when working with a zipfile on disk.
    - gh-134151: email: Fix TypeError in
      email.utils.decode_params() when sorting RFC 2231
      continuations that contain an unnumbered section.
    - gh-134152: email: Fix parsing of email message ID with
      invalid domain.
    - gh-127081: Fix libc thread safety issues with os by
      replacing getlogin with getlogin_r re-entrant version.
    - gh-131884: Fix formatting issues in json.dump() when both
      indent and skipkeys are used.
  - Core and Builtins
    - gh-135171: Roll back changes to generator and list
      comprehensions that went into 3.13.4 to fix gh-127682,
      but which involved semantic and bytecode changes not
      appropriate for a bugfix release.
  - C API
    - gh-134989: Fix Py_RETURN_NONE, Py_RETURN_TRUE and

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=102
2025-06-11 22:06:33 +00:00
70558652fc Add missing import
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=101
2025-06-10 01:23:49 +00:00
6072bbdbcd - Update to 3.13.4:
- Security
    - gh-135034: Fixes multiple issues that allowed tarfile
      extraction filters (filter="data" and filter="tar") to be
      bypassed using crafted symlinks and hard links.
      Addresses CVE-2024-12718 (bsc#1244056), CVE-2025-4138
      (bsc#1244059), CVE-2025-4330 (bsc#1244060), and
      CVE-2025-4517 (bsc#1244032).
    - gh-133767: Fix use-after-free in the “unicode-escape”
      decoder with a non-“strict” error handler (CVE-2025-4516,
      bsc#1243273).
    - gh-128840: Short-circuit the processing of long IPv6
      addresses early in ipaddress to prevent excessive memory
      consumption and a minor denial-of-service.
  - Library
    - gh-134718: ast.dump() now only omits None and [] values if
      they are default values.
    - gh-128840: Fix parsing long IPv6 addresses with embedded
      IPv4 address.
    - gh-134696: Built-in HACL* and OpenSSL implementations of
      hash function constructors now correctly accept the same
      documented named arguments. For instance, md5() could be
      previously invoked as md5(data=data) or md5(string=string)
      depending on the underlying implementation but these calls
      were not compatible. Patch by Bénédikt Tran.
    - gh-134210: curses.window.getch() now correctly handles
      signals. Patch by Bénédikt Tran.
    - gh-80334: multiprocessing.freeze_support() now checks for
      work on any “spawn” start method platform rather than only
      on Windows.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=100
2025-06-09 21:38:15 +00:00
f5a88d357f Accepting request 1281135 from devel:languages:python:Factory
- Don't use %elif, it is supported only from rpm 4.15.0, which is
  not in SLE-15.

OBS-URL: https://build.opensuse.org/request/show/1281135
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=24
2025-06-01 19:36:01 +00:00
6d5d3f96b0 - Don't use %elif, it is supported only from rpm 4.15.0, which is
not in SLE-15.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=98
2025-05-28 09:47:26 +00:00
820434f8e4 Accepting request 1278136 from devel:languages:python:Factory
- Add CVE-2025-4516-DecodeError-handler.patch fixing
  CVE-2025-4516 (bsc#1243273) blocking DecodeError handling
  vulnerability, which could lead to DoS.

OBS-URL: https://build.opensuse.org/request/show/1278136
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=23
2025-05-23 12:26:37 +00:00
487ae82f04 - Add CVE-2025-4516-DecodeError-handler.patch fixing
CVE-2025-4516 (bsc#1243273) blocking DecodeError handling
  vulnerability, which could lead to DoS.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=96
2025-05-17 07:34:05 +00:00
55fb9cd905 Accepting request 1276664 from devel:languages:python:Factory
- Remove python-3.3.0b1-test-posix_fadvise.patch (not needed
  since kernel 3.6-rc1)

OBS-URL: https://build.opensuse.org/request/show/1276664
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=22
2025-05-13 18:05:26 +00:00
d8af743464 - Remove python-3.3.0b1-test-posix_fadvise.patch (not needed
since kernel 3.6-rc1)

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=94
2025-05-10 11:43:36 +00:00
c1d8c54913 Accepting request 1270150 from devel:languages:python:Factory
- Update to 3.13.3:
  - Tools/Demos
    - gh-131852: msgfmt no longer adds the POT-Creation-Date to
      generated .mo files for consistency with GNU msgfmt.
    - gh-85012: Correctly reset msgctxt when compiling messages
      in msgfmt.
    - gh-130025: The iOS testbed now correctly handles symlinks
      used as Python framework references.
  - Tests
    - gh-131050: test_ssl.test_dh_params is skipped if the
      underlying TLS library does not support finite-field
      ephemeral Diffie-Hellman.
    - gh-129200: Multiple iOS testbed runners can now be started
      at the same time without introducing an ambiguity over
      simulator ownership.
    - gh-130292: The iOS testbed will now run successfully on a
      machine that has not previously run Xcode tests (such as CI
      configurations).
    - gh-130293: The tests of terminal colorization are no longer
      sensitive to the value of the TERM variable in the testing
      environment.
    - gh-126332: Add unit tests for pyrepl.
  - Security
    - gh-131809: Update bundled libexpat to 2.7.1
    - gh-131261: Upgrade to libexpat 2.7.0
    - gh-127371: Avoid unbounded buffering for
      tempfile.SpooledTemporaryFile.writelines(). Previously,
      disk spillover was only checked after the lines iterator
      had been exhausted. This is now done after each line is
      written.

OBS-URL: https://build.opensuse.org/request/show/1270150
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=21
2025-04-25 20:17:50 +00:00
bb17c93a2a This
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=92
2025-04-16 07:52:47 +00:00
55167f91bd Fix patches
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=91
2025-04-16 07:17:38 +00:00
b91bbdde1b - Add gh-126500-test_ssl-no-stop-ThreadedEchoServer-OSError.patch
and gh-127257-ssl-OSError-ERR_LIB_SYS.patch to make the
  interpreter compatible with OpenSSL 3.5 (bsc#1241067).

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=90
2025-04-16 07:15:35 +00:00
384d0f4194 - Add gh-132535-rsrc-warn-test_timeout.patch to fix
failing tests in the build system without network access
  (gh#python/cpython#132535).

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=89
2025-04-15 22:19:57 +00:00
9e2287fa69 - Add gh126985-mv-pyvenv.cfg2getpath.patch to remove failing
tests in test_sysconfig.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=88
2025-04-15 14:09:42 +00:00
9624a1ae7e - Update to 3.13.3:
- Tools/Demos
    - gh-131852: msgfmt no longer adds the POT-Creation-Date to
      generated .mo files for consistency with GNU msgfmt.
    - gh-85012: Correctly reset msgctxt when compiling messages
      in msgfmt.
    - gh-130025: The iOS testbed now correctly handles symlinks
      used as Python framework references.
  - Tests
    - gh-131050: test_ssl.test_dh_params is skipped if the
      underlying TLS library does not support finite-field
      ephemeral Diffie-Hellman.
    - gh-129200: Multiple iOS testbed runners can now be started
      at the same time without introducing an ambiguity over
      simulator ownership.
    - gh-130292: The iOS testbed will now run successfully on a
      machine that has not previously run Xcode tests (such as CI
      configurations).
    - gh-130293: The tests of terminal colorization are no longer
      sensitive to the value of the TERM variable in the testing
      environment.
    - gh-126332: Add unit tests for pyrepl.
  - Security
    - gh-131809: Update bundled libexpat to 2.7.1
    - gh-131261: Upgrade to libexpat 2.7.0
    - gh-127371: Avoid unbounded buffering for
      tempfile.SpooledTemporaryFile.writelines(). Previously,
      disk spillover was only checked after the lines iterator
      had been exhausted. This is now done after each line is
      written.

OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=87
2025-04-11 19:56:43 +00:00
415df5f3cd Accepting request 1268534 from devel:languages:python:Factory
revert

OBS-URL: https://build.opensuse.org/request/show/1268534
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=86
2025-04-11 06:10:15 +00:00
3467717953 Accepting request 1253127 from devel:LoongArch:Factory
- don't require rpm-build-python for base to fix bootstrap issue
  after primary_python change
- replace rpm-build-python alias with python-rpm-packaging package name

OBS-URL: https://build.opensuse.org/request/show/1253127
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:Factory/python313?expand=0&rev=85
2025-03-14 22:57:44 +00:00
1ea8708b8d Accepting request 1251953 from devel:languages:python:Factory
- Skip PGO with %want_reproducible_builds (bsc#1239210).

      over multiple lines in combination with unicode encoding
      (bsc#1238450 CVE-2025-1795)

OBS-URL: https://build.opensuse.org/request/show/1251953
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=20
2025-03-12 14:19:55 +00:00
279fe75cee Accepting request 1250305 from devel:languages:python:Factory
OBS-URL: https://build.opensuse.org/request/show/1250305
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=19
2025-03-06 13:47:53 +00:00
7d140c532a Accepting request 1243939 from devel:languages:python:Factory
- Update to 3.13.2:
  - Tools/Demos
    - gh-128152: Fix a bug where Argument Clinic’s C
      pre-processor parser tried to parse pre-processor
      directives inside C comments. Patch by Erlend Aasland.
  - Tests
    - gh-127906: Test the limited C API in test_cppext. Patch by
      Victor Stinner.
    - gh-127637: Add tests for the dis command-line
      interface. Patch by Bénédikt Tran.
    - gh-126925: iOS test results are now streamed during test
      execution, and the deprecated xcresulttool is no longer
      used.
  - Security
    - gh-105704: When using urllib.parse.urlsplit() and
      urllib.parse.urlparse() host parsing would not reject
      domain names containing square brackets ([ and ]). Square
      brackets are only valid for IPv6 and IPvFuture hosts
      according to RFC 3986 Section 3.2.2. (CVE-2025-0938,
      bsc#1236705)
    - gh-127655: Fixed the
      asyncio.selector_events._SelectorSocketTransport
      transport not pausing writes for the protocol when
      the buffer reaches the high water mark when using
      asyncio.WriteTransport.writelines() (CVE-2024-12254,
      bsc#1234290).
    - gh-126108: Fix a possible NULL pointer dereference in
      PySys_AddWarnOptionUnicode().
    - gh-80222: Fix bug in the folding of quoted strings
      when flattening an email message using a modern email

OBS-URL: https://build.opensuse.org/request/show/1243939
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=18
2025-02-09 18:58:56 +00:00
5c3c7cecd2 Accepting request 1241509 from devel:languages:python:Factory
OBS-URL: https://build.opensuse.org/request/show/1241509
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=17
2025-02-03 20:40:34 +00:00
528339bd34 Accepting request 1228971 from devel:languages:python:Factory
- Add CVE-2024-12254-unbound-mem-buffering-SelectorSocketTransport.writelines.patch
  preventing exhaustion of memory (gh#python/cpython#127655,
  bsc#1234290, CVE-2024-12254).

- Update to 3.13.1:
  - Tools/Demos
    - gh-126807: Fix extraction warnings in pygettext.py caused
      by mistaking function definitions for function calls.
    - gh-126167: The iOS testbed was modified so that it can be
      used by third-party projects for testing purposes.
  - Tests
    - gh-126909: Fix test_os extended attribute tests to work on
      filesystems with 1 KiB xattr size limit.
    - gh-125041: Re-enable skipped tests for zlib on the
      s390x architecture: only skip checks of the compressed
      bytes, which can be different between zlib’s software
      implementation and the hardware-accelerated implementation.
    - gh-124295: Add translation tests to the argparse module.
  - Security
    - gh-126623: Upgrade libexpat to 2.6.4
    - gh-125140: Remove the current directory from sys.path when
      using PyREPL.
    - gh-122792: Changed IPv4-mapped ipaddress.IPv6Address to
      consistently use the mapped IPv4 address value for deciding
      properties. Properties which have their behavior fixed are
      is_multicast, is_reserved, is_link_local, is_global, and
      is_unspecified.
  - Library
    - gh-127321: pdb.set_trace() will not stop at an opcode that
      does not have an associated line number anymore.

OBS-URL: https://build.opensuse.org/request/show/1228971
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=16
2025-01-23 16:57:00 +00:00
adc199414a Accepting request 1227320 from devel:languages:python:Factory
OBS-URL: https://build.opensuse.org/request/show/1227320
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=15
2024-11-30 12:27:29 +00:00
183fa1a4f9 Accepting request 1224887 from devel:languages:python:Factory
OBS-URL: https://build.opensuse.org/request/show/1224887
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=14
2024-11-18 18:57:22 +00:00
d67c636211 Accepting request 1218353 from devel:languages:python:Factory
- Add CVE-2024-9287-venv_path_unquoted.patch to properly quote
  path names provided when creating a virtual environment
  (bsc#1232241, CVE-2024-9287)

OBS-URL: https://build.opensuse.org/request/show/1218353
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=13
2024-10-27 10:24:54 +00:00
73ac4a887b Accepting request 1208371 from devel:languages:python:Factory
- With python311-Sphinx we don't need no-skipif-doctests.patch
  any more.
- Add warning about no-GIL builds being experimental.

OBS-URL: https://build.opensuse.org/request/show/1208371
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=12
2024-10-16 21:49:58 +00:00
eb20745074 Accepting request 1206252 from devel:languages:python:Factory
- Update to 3.13.0:
  Major new features of the 3.13 series, compared to 3.12
  Some of the new major new features and changes in Python 3.13 are:
  - New features
    - A new and improved interactive interpreter, based on
      PyPy's, featuring multi-line editing and color support, as
      well as colorized exception tracebacks.
    - An experimental free-threaded build mode, which disables
      the Global Interpreter Lock, allowing threads to run
      more concurrently. The build mode is available as an
      experimental feature in the Windows and macOS installers as
      well.
    - A preliminary, experimental JIT, providing the ground work
      for significant performance improvements.
    - The locals() builtin function (and its C equivalent)
      now has well-defined semantics when mutating the
      returned mapping, which allows debuggers to operate more
      consistently.
    - A modified version of mimalloc is now included, optional
      but enabled by default if supported by the platform, and
      required for the free-threaded build mode.
    - Docstrings now have their leading indentation stripped,
      reducing memory use and the size of .pyc files. (Most tools
      handling docstrings already strip leading indentation.)
    - The dbm module has a new dbm.sqlite3 backend that is used
      by default when creating new files.
    - WASI is now a Tier 2 supported platform. Emscripten is
      no longer an officially supported platform (but Pyodide
      continues to support Emscripten).
  - Typing
    - Support for type defaults in type parameters.
    - A new type narrowing annotation, typing.TypeIs.
    - A new annotation for read-only items in TypeDicts.
    - A new annotation for marking deprecations in the type
      system.
  - Removals and new deprecations
    - PEP 594 (Removing dead batteries from the standard library)
      scheduled removals of many deprecated modules: aifc,
      audioop, chunk, cgi, cgitb, crypt, imghdr, mailcap, msilib,
      nis, nntplib, ossaudiodev, pipes, sndhdr, spwd, sunau,
      telnetlib, uu, xdrlib, lib2to3.
    - Many other removals of deprecated classes, functions and
      methods in various standard library modules.
    - C API removals and deprecations. (Some removals present
      in alpha 1 were reverted in alpha 2, as the removals were
      deemed too disruptive at this time.)
    - New deprecations, most of which are scheduled for removal
      from Python 3.15 or 3.16.
  - For more details on the changes to Python 3.13, see What's
    new in Python 3.13 in the documentation.

OBS-URL: https://build.opensuse.org/request/show/1206252
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=11
2024-10-08 15:24:58 +00:00
d24d58c01e Accepting request 1205550 from devel:languages:python:Factory
- Drop .pyc files from docdir for reproducible builds (bsc#1230906).

OBS-URL: https://build.opensuse.org/request/show/1205550
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=10
2024-10-04 15:10:27 +00:00
26d0509456 Accepting request 1205032 from devel:languages:python:Factory
- Update to 3.13.0~rc3:
  - The most important change is rolling back the incremental
    cyclic garbage collector (GC), which was added in one of
    the alpha releases. The incremental GC had more significant
    performance regressions in specific workloads than we
    expected.
  - Tests
    - gh-124378: Updated test_ttk to pass with Tcl/Tk 8.6.15.
  - Library
    - gh-124538: Fixed crash when using gc.get_referents() on a
      capsule object.
    - gh-124498: Fix typing.TypeAliasType not to be generic, when
      type_params is an empty tuple.
    - gh-123017: Due to unreliable results on some devices,
      time.strftime() no longer accepts negative years on
      Android.
    - gh-123014: os.pidfd_open() and signal.pidfd_send_signal()
      are now unavailable when building against Android API
      levels older than 31, since the underlying system calls may
      cause a crash.
    - gh-124248: Fixed potential crash when using struct to
      process zero-width ‘Pascal string’ fields (0p).
    - gh-87041: Fix a bug in argparse where lengthy subparser
      argument help is incorrectly indented.
    - gh-124212: Fix invalid variable in venv handling of failed
      symlink on Windows
    - gh-124171: Add workaround for broken fmod() implementations
      on Windows, that loose zero sign (e.g. fmod(-10, 1) returns
      0.0). Patch by Sergey B Kirpichev.
    - gh-123934: Fix unittest.mock.MagicMock reseting magic
      methods return values after .reset_mock(return_value=True)
      was called.
    - gh-123968: Fix the command-line interface for the random
      module to select floats between 0 and N, not 1 and N.
    - gh-123892: Add "_wmi" to sys.stdlib_module_names. Patch by
      Victor Stinner.
    - gh-123339: Fix inspect.getsource() for classes
      in collections.abc and decimal (for pure Python
      implementation) modules. inspect.getcomments() now raises
      OSError instead of IndexError if the __firstlineno__ value
      for a class is out of bound.
    - gh-121735: When working with zip archives,
      importlib.resources now properly honors module-adjacent
      references (e.g. files(pkg.mod) and not just files(pkg)).
    - gh-122145: Fix an issue when reporting tracebacks
      corresponding to Python code emitting an empty AST
      body. Patch by Nikita Sobolev and Bénédikt Tran.
    - gh-119004: Fix a crash in OrderedDict.__eq__ when operands
      are mutated during the check. Patch by Bénédikt Tran.
    - bpo-44864: Do not translate user-provided strings in
      argparse.ArgumentParser.
  - IDLE
    - gh-112938: Fix uninteruptable hang when Shell gets rapid
      continuous output.
    - gh-120104: Fix padding in config and search dialog windows
      in IDLE.
  - Documentation
    - gh-124720: Update “Using Python on a Mac” section of the
      “Python Setup and Usage” document and include information
      on installing free-threading support.
    - gh-116622: Add an Android platform guide, and flag modules
      not available on Android.
  - Core and Builtins
    - gh-124567: Revert the incremental GC (in 3.13), since it’s
      not clear the benefits outweigh the costs at this point.
    - gh-124642: Fixed scalability issue in free-threaded builds
      for lock-free reads from dictionaries in multi-threaded
      scenarios
    - gh-116510: Fix a bug that can cause a crash when
      sub-interpreters use “basic” single-phase extension
      modules. Shared objects could refer to PyGC_Head nodes that
      had been freed as part of interpreter cleanup.
    - gh-124547: When deallocating an object with inline values
      whose __dict__ is still live: if memory allocation for the
      inline values fails, clear the dictionary. Prevents an
      interpreter crash.
    - gh-124513: Fix a crash in FrameLocalsProxy constructor:
      check the number of arguments. Patch by Victor Stinner.
    - gh-124442: Fix nondeterminism in compilation by sorting the
      value of __static_attributes__. Patch by kp2pml30.
    - gh-123856: Fix PyREPL failure when a keyboard interrupt is
      triggered after using a history search
    - gh-65961: Document the deprecation of setting and using
      __package__ and __cached__.
    - gh-124027: Support <page up>, <page down>, and <delete>
      keys in the Python REPL when $TERM is set to vt100.
    - gh-77894: Fix possible crash in the garbage collector when
      it tries to break a reference loop containing a memoryview
      object. Now a memoryview object can only be cleared if
      there are no buffers that refer it.
    - gh-123339: Setting the __module__ attribute for a class now
      removes the __firstlineno__ item from the type’s dict, so
      they will no longer be inconsistent.
  - C API
    - gh-124160: Fix crash when importing modules containing
      state and single-phase initialization in a subinterpreter.
    - gh-123880: Fixed a bug that prevented circular imports of
      extension modules that use single-phase initialization.
  - Build
    - gh-124487: Windows builds now use Windows 8.1 as their API
      baseline (installation already required Windows 8.1).
    - gh-124043: Building using --with-trace-refs is
      (temporarily) disallowed when the GIL is disabled.
- Remove upstreamed patch:
  - gh-124040-fix-test-math-i586.patch

OBS-URL: https://build.opensuse.org/request/show/1205032
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=9
2024-10-02 19:33:43 +00:00
3029e09e6c Accepting request 1202221 from devel:languages:python:Factory
OBS-URL: https://build.opensuse.org/request/show/1202221
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=8
2024-09-22 09:05:57 +00:00
5ddcd862f2 Accepting request 1199398 from devel:languages:python:Factory
- Update to 3.13.0~rc2:
  - Tools/Demos
    - gh-123418: Update GitHub CI workflows to use OpenSSL 3.0.15
      and multissltests to use 3.0.15, 3.1.7, and 3.2.3.
  - Tests
    - gh-119727: Add --single-process command line option to
      Python test runner (regrtest). Patch by Victor Stinner.
    - gh-101525: Skip test_gdb if the binary is relocated by
      BOLT. Patch by Donghee Na.
  - Security
    - gh-123678: Upgrade libexpat to 2.6.3
    - gh-121285: Remove backtracking from tarfile header parsing
      for hdrcharset, PAX, and GNU sparse headers (bsc#1230227,
      CVE-2024-6232).
  - Library
    - gh-123448: Fixed memory leak of typing.NoDefault by moving
      it to the static types array.
    - gh-123409: Fix ipaddress.IPv6Address.reverse_pointer output
      according to RFC 3596, §2.5. Patch by Bénédikt Tran.
    - gh-123270: Applied a more surgical fix for malformed
      payloads in zipfile.Path causing infinite loops (gh-122905)
      without breaking contents using legitimate characters
      (bsc#1229704, CVE-2024-8088).
    - gh-123228: Fix return type for
      _pyrepl.readline._ReadlineWrapper.get_line_buffer() to be
      str(). Patch by Sergey B Kirpichev.
    - gh-123240: Raise audit events for the input() in the new
      REPL.
    - gh-123243: Fix memory leak in _decimal.
    - gh-122546: Consistently use same file name for different

OBS-URL: https://build.opensuse.org/request/show/1199398
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=7
2024-09-09 12:43:49 +00:00
30eeed452e Accepting request 1197482 from devel:languages:python:Factory
- Add gh122136-test_asyncio-kernel-buffer-data.patch fixing
  gh#python/cpython#122136 (changes in kernel provide different
  amount of data in the socket buffers).
- Remove skip_test_abort_clients.patch, which is not needed any
  more.

- Add CVE-2024-8088-inf-loop-zipfile_Path.patch to prevent
  malformed payload to cause infinite loops in zipfile.Path
  (bsc#1229704, CVE-2024-8088).

OBS-URL: https://build.opensuse.org/request/show/1197482
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=6
2024-08-30 11:32:00 +00:00
3827c5d408 Accepting request 1193120 from devel:languages:python:Factory
OBS-URL: https://build.opensuse.org/request/show/1193120
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=5
2024-08-10 17:08:14 +00:00
2325ab9130 Accepting request 1192376 from devel:languages:python:Factory
- Add CVE-2024-6923-email-hdr-inject.patch to prevent email
  header injection due to unquoted newlines (bsc#1228780,
  CVE-2024-6923).
- Adding bso1227999-reproducible-builds.patch fixing bsc#1227999
  adding reproducibility patches from gh#python/cpython!121872
  and gh#python/cpython!121883.
- Add skip_test_abort_clients.patch (gh#python/cpython#122136)
  skip not yet fixed failing test
- %{profileopt} variable is set according to the variable
  %{do_profiling} (bsc#1227999)
- Update bluez-devel-vendor.tar.xz

- Update to 3.13.0~rc1:
  - Tests
    - gh-59022: Add tests for pkgutil.extend_path(). Patch by
      Andreas Stocker.
    - gh-99242: os.getloadavg() may throw OSError when
      running regression tests under certain conditions (e.g.
      chroot). This error is now caught and ignored, since
      reporting load average is optional.
  - Security
    - gh-122133: Authenticate the socket connection for the
      socket.socketpair() fallback on platforms where AF_UNIX is
      not available like Windows.
    - Patch by Gregory P. Smith <greg@krypto.org> and Seth Larson
      <seth@python.org>. Reported by Ellie <el@horse64.org>
    - gh-121957: Fixed missing audit events around interactive
      use of Python, now also properly firing for python -i, as
      well as for python -m asyncio. The events in question are
      cpython.run_stdin and cpython.run_startup.

OBS-URL: https://build.opensuse.org/request/show/1192376
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=4
2024-08-08 08:58:35 +00:00
da884a6e9b Accepting request 1189339 from devel:languages:python:Factory
- Update F00251-change-user-install-location.patch to install packages
  in /usr/local by default when using pip outside of a RPMBUILD
  environment.
- Update to 3.13.0~b4:
  - Tests
    - gh-121084: Fix test_typing random leaks. Clear typing ABC
      caches when running tests for refleaks (-R option): call
      _abc_caches_clear() on typing abstract classes and their
      subclasses.
    - gh-121160: Add a test for
      readline.set_history_length(). Note that this test may fail
      on readline libraries.
    - gh-121200: Fix test_expanduser_pwd2() of
      test_posixpath. Call getpwnam() to get pw_dir, since it
      can be different than getpwall() pw_dir.
    - gh-121188: When creating the JUnit XML file, regrtest
      now escapes characters which are invalid in XML, such
      as the chr(27) control character used in ANSI escape
      sequences.
  - Library
    - gh-57141: The shallow argument to filecmp.dircmp (new in
      Python 3.13) is now keyword-only.
    - gh-121245: Simplify handling of the history file in
      site.register_readline() helper. The CAN_USE_PYREPL
      variable now will be initialized, when imported.
    - gh-121332: Fix constructor of ast nodes with custom
      _attributes. Previously, passing custom attributes would
      raise a DeprecationWarning. Passing arguments to the
      constructor that are not in _fields or _attributes remains
      deprecated.
    - gh-121279: Avoid NameError for the warnings module when
      accessing the depracated atributes of the importlib.abc
      module.
    - gh-121245: Fix a bug in the handling of the command history
      of the new REPL that caused the history file to be wiped at
      REPL exit.
    - gh-87744: Fix waitpid race while calling send_signal() in
      asyncio.
    - gh-121018: Fixed other issues where argparse.ArgumentParser
      did not honor exit_on_error=False.
    - gh-120678: Fix regression in the new REPL that meant that
      globals from files passed using the -i argument would not
      be included in the REPL’s global namespace.
    - gh-120782: Fix wrong references of the datetime types after
      reloading the module.
    - gh-120713: datetime.datetime.strftime() now 0-pads years
      with less than four digits for the format specifiers %Y and
      %G on Linux.
    - gh-117983: Defer the threading import in importlib.util
      until lazy loading is used.
    - gh-119189: When using the ** operator or pow() with
      Fraction as the base and an exponent that is not rational,
      a float, or a complex, the fraction is no longer converted
      to a float.
    - gh-118714: Allow restart in post-mortem debugging of
      pdb. Removed restart message when the user quits pdb from
      post-mortem mode.
    - gh-105623: Fix performance degradation in
      logging.handlers.RotatingFileHandler.
  - IDLE
    - gh-78889: Stop Shell freezes by blocking user access to
      non-method sys.stdout.shell attributes, which are all
      private.
  - Documentation
    - gh-121749: Fix documentation for PyModule_AddObjectRef().
    - gh-120012: Clarify the behaviours of
      multiprocessing.Queue.empty() and
      multiprocessing.SimpleQueue.empty() on closed queues.
  - Core and Builtins
    - gh-121860: Fix crash when rematerializing a managed
      dictionary after it was deleted.
    - gh-121814: Fixed the SegFault when PyEval_SetTrace() is
      used with no Python frame on stack.
    - gh-121295: Fix PyREPL console getting into a blocked state
      after interrupting a long paste
    - gh-121794: Fix bug in free-threaded Python where a
      resurrected object could lead to a negative ref count
      assertion failure.
    - gh-121657: Improve the SyntaxError message if the user
      tries to use yield from outside a function.
    - gh-121609: Fix pasting of characters containing unicode
      character joiners in the new REPL. Patch by Marta Gomez
      Macias
    - gh-117482: Unexpected slot wrappers are no longer created
      for builtin static types in subinterpreters.
    - gh-121499: Fix a bug affecting how multi-line history was
      being rendered in the new REPL after interacting with the
      new screen cache. Patch by Pablo Galindo
    - gh-121497: Fix a bug that was preventing the REPL to
      correctly respect the history when an input hook was
      set. Patch by Pablo Galindo
    - gh-121012: Tier 2 execution now ensures that list iterators
      remain exhausted, once they become exhausted.
    - gh-121439: Allow tuples of length 20 in the freelist to be
      reused.
    - gh-121368: Fix race condition in _PyType_Lookup in the
      free-threaded build due to a missing memory fence. This
      could lead to _PyType_Lookup returning incorrect results on
      arm64.
    - gh-121130: Fix f-strings with debug expressions in format
      specifiers. Patch by Pablo Galindo
    - gh-121115: PyLong_AsNativeBytes() no longer
      uses __index__() methods by default. The
      Py_ASNATIVEBYTES_ALLOW_INDEX flag has been added to allow
      it.
  - C API
    - gh-89364: Export the PySignal_SetWakeupFd()
      function. Previously, the function was documented but
      it couldn’t be used in 3rd party code. Patch by Victor
      Stinner.
    - gh-113993: PyUnicode_InternInPlace() no longer
      Seprevents its argument from being garbage collected
      Several functions that take char * are now documented
      Seas possibly preventing string objects from being
      Segarbage collected; refer to their documentation
      Sefor details: PyUnicode_InternFromString(),
      SePyDict_SetItemString(), PyObject_SetAttrString(),
      SePyObject_DelAttrString(), PyUnicode_InternFromString(),
      Seand PyModule_Add* convenience functions
    - gh-113601: Removed debug build assertions related to
      interning strings, which were falsely triggered by stable
      ABI extensions.
    - gh-112136: Restore the private _PyArg_Parser structure and
      the private _PyArg_ParseTupleAndKeywordsFast() function,
      previously removed in Python 3.13 alpha 1. Patch by Victor
      Stinner.
  - Build
    - gh-120371: Support WASI SDK 22 by explicitly skipping
      functions that are just stubs in wasi-libc.
    - gh-121731: Fix mimalloc compile error on GNU/Hurd
    - gh-121487: Fix deprecation warning for ATOMIC_VAR_INIT in
      mimalloc.
    - gh-121467: Fix a Makefile bug that prevented mimalloc
      header files from being installed.
    - gh-121103: On POSIX systems, excluding macOS framework
      installs, the lib directory for the free-threaded build now
      includes a “t” suffix to avoid conflicts with a co-located
      default build installation.
    - gh-120831: The default minimum iOS version was increased to
      13.0.
    - gh-113565: Improve curses and curses.panel dependency
      checks in configure.
- Remove %suse_update_desktop_file macro as it is not useful any
  more.

OBS-URL: https://build.opensuse.org/request/show/1189339
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=3
2024-07-25 13:38:59 +00:00
45a1da448a Accepting request 1186945 from devel:languages:python:Factory
Automatic submission by obs-autosubmit

OBS-URL: https://build.opensuse.org/request/show/1186945
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python313?expand=0&rev=2
2024-07-12 15:04:41 +00:00
18 changed files with 1944 additions and 191 deletions

View File

@@ -28,9 +28,11 @@ Co-authored-by: Lumír Balhar <frenzy.madness@gmail.com>
Lib/test/test_sysconfig.py | 17 +++++++++++-- Lib/test/test_sysconfig.py | 17 +++++++++++--
2 files changed, 67 insertions(+), 7 deletions(-) 2 files changed, 67 insertions(+), 7 deletions(-)
--- a/Lib/sysconfig/__init__.py Index: Python-3.13.3/Lib/sysconfig/__init__.py
+++ b/Lib/sysconfig/__init__.py ===================================================================
@@ -106,6 +106,11 @@ if os.name == 'nt': --- Python-3.13.3.orig/Lib/sysconfig/__init__.py 2025-04-08 15:54:08.000000000 +0200
+++ Python-3.13.3/Lib/sysconfig/__init__.py 2025-04-11 21:52:31.769387873 +0200
@@ -106,6 +106,11 @@
else: else:
_INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['posix_venv'] _INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['posix_venv']
@@ -42,7 +44,7 @@ Co-authored-by: Lumír Balhar <frenzy.madness@gmail.com>
def _get_implementation(): def _get_implementation():
return 'Python' return 'Python'
@@ -167,13 +172,28 @@ if _HAS_USER_BASE: @@ -167,13 +172,28 @@
}, },
} }
@@ -71,7 +73,7 @@ Co-authored-by: Lumír Balhar <frenzy.madness@gmail.com>
_BASE_EXEC_PREFIX = os.path.normpath(sys.base_exec_prefix) _BASE_EXEC_PREFIX = os.path.normpath(sys.base_exec_prefix)
# Mutex guarding initialization of _CONFIG_VARS. # Mutex guarding initialization of _CONFIG_VARS.
_CONFIG_VARS_LOCK = threading.RLock() _CONFIG_VARS_LOCK = threading.RLock()
@@ -259,11 +279,40 @@ def _extend_dict(target_dict, other_dict @@ -266,11 +286,40 @@
target_dict[key] = value target_dict[key] = value
@@ -113,7 +115,7 @@ Co-authored-by: Lumír Balhar <frenzy.madness@gmail.com>
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
@@ -464,10 +513,8 @@ def _init_config_vars(): @@ -471,10 +520,8 @@
# Normalized versions of prefix and exec_prefix are handy to have; # Normalized versions of prefix and exec_prefix are handy to have;
# in fact, these are the standard versions used most places in the # in fact, these are the standard versions used most places in the
# Distutils. # Distutils.
@@ -126,9 +128,11 @@ Co-authored-by: Lumír Balhar <frenzy.madness@gmail.com>
_CONFIG_VARS['py_version'] = _PY_VERSION _CONFIG_VARS['py_version'] = _PY_VERSION
_CONFIG_VARS['py_version_short'] = _PY_VERSION_SHORT _CONFIG_VARS['py_version_short'] = _PY_VERSION_SHORT
_CONFIG_VARS['py_version_nodot'] = _PY_VERSION_SHORT_NO_DOT _CONFIG_VARS['py_version_nodot'] = _PY_VERSION_SHORT_NO_DOT
--- a/Lib/test/test_sysconfig.py Index: Python-3.13.3/Lib/test/test_sysconfig.py
+++ b/Lib/test/test_sysconfig.py ===================================================================
@@ -130,8 +130,19 @@ class TestSysConfig(unittest.TestCase): --- Python-3.13.3.orig/Lib/test/test_sysconfig.py 2025-04-08 15:54:08.000000000 +0200
+++ Python-3.13.3/Lib/test/test_sysconfig.py 2025-04-11 21:52:31.769841915 +0200
@@ -130,8 +130,19 @@
for scheme in _INSTALL_SCHEMES: for scheme in _INSTALL_SCHEMES:
for name in _INSTALL_SCHEMES[scheme]: for name in _INSTALL_SCHEMES[scheme]:
expected = _INSTALL_SCHEMES[scheme][name].format(**config_vars) expected = _INSTALL_SCHEMES[scheme][name].format(**config_vars)
@@ -149,7 +153,7 @@ Co-authored-by: Lumír Balhar <frenzy.madness@gmail.com>
os.path.normpath(expected), os.path.normpath(expected),
) )
@@ -386,7 +397,7 @@ class TestSysConfig(unittest.TestCase): @@ -386,7 +397,7 @@
self.assertTrue(os.path.isfile(config_h), config_h) self.assertTrue(os.path.isfile(config_h), config_h)
def test_get_scheme_names(self): def test_get_scheme_names(self):
@@ -158,7 +162,7 @@ Co-authored-by: Lumír Balhar <frenzy.madness@gmail.com>
if HAS_USER_BASE: if HAS_USER_BASE:
wanted.extend(['nt_user', 'osx_framework_user', 'posix_user']) wanted.extend(['nt_user', 'osx_framework_user', 'posix_user'])
self.assertEqual(get_scheme_names(), tuple(sorted(wanted))) self.assertEqual(get_scheme_names(), tuple(sorted(wanted)))
@@ -398,6 +409,8 @@ class TestSysConfig(unittest.TestCase): @@ -398,6 +409,8 @@
cmd = "-c", "import sysconfig; print(sysconfig.get_platform())" cmd = "-c", "import sysconfig; print(sysconfig.get_platform())"
self.assertEqual(py.call_real(*cmd), py.call_link(*cmd)) self.assertEqual(py.call_real(*cmd), py.call_link(*cmd))

BIN
Python-3.13.2.tar.xz (Stored with Git LFS)

Binary file not shown.

File diff suppressed because one or more lines are too long

BIN
Python-3.13.9.tar.xz (Stored with Git LFS) Normal file

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@@ -5,28 +5,30 @@ Subject: [PATCH] bpo-31046: ensurepip does not honour the value of $(prefix)
Co-Authored-By: Xavier de Gaye <xdegaye@gmail.com> Co-Authored-By: Xavier de Gaye <xdegaye@gmail.com>
--- ---
Doc/library/ensurepip.rst | 9 +++-- Doc/library/ensurepip.rst | 12 +++++-
Lib/ensurepip/__init__.py | 18 +++++++--- Lib/ensurepip/__init__.py | 18 +++++++---
Lib/test/test_ensurepip.py | 11 ++++++ Lib/test/test_ensurepip.py | 11 ++++++
Makefile.pre.in | 4 +- Makefile.pre.in | 4 +-
Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst | 1 Misc/NEWS.d/next/Build/2019-12-16-17-50-42.bpo-31046.XA-Qfr.rst | 1
5 files changed, 34 insertions(+), 9 deletions(-) 5 files changed, 37 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
--- a/Doc/library/ensurepip.rst --- a/Doc/library/ensurepip.rst
+++ b/Doc/library/ensurepip.rst +++ b/Doc/library/ensurepip.rst
@@ -59,8 +59,9 @@ is at least as recent as the one availab @@ -61,7 +61,11 @@ 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
active virtual environment). The installation location can be controlled active virtual environment). The installation location can be controlled
-through two additional command line options: -through two additional command line options:
+through some additional command line options: +through some additional command line options:
+
+.. option:: --prefix <dir>
+
+ Installs ``pip`` using the given directory prefix.
+* ``--prefix <dir>``: Installs ``pip`` using the given directory prefix. .. option:: --root <dir>
* :samp:`--root {dir}`: Installs ``pip`` relative to the given root directory
rather than the root of the currently active virtual environment (if any) @@ -102,7 +106,7 @@ Module API
or the default root for the current Python installation.
@@ -92,7 +93,7 @@ Module API
Returns a string specifying the available version of pip that will be Returns a string specifying the available version of pip that will be
installed when bootstrapping an environment. installed when bootstrapping an environment.
@@ -35,7 +37,7 @@ Co-Authored-By: Xavier de Gaye <xdegaye@gmail.com>
altinstall=False, default_pip=False, \ altinstall=False, default_pip=False, \
verbosity=0) verbosity=0)
@@ -102,6 +103,8 @@ Module API @@ -112,6 +116,8 @@ Module API
If *root* is ``None``, then installation uses the default install location If *root* is ``None``, then installation uses the default install location
for the current environment. for the current environment.
@@ -44,7 +46,7 @@ Co-Authored-By: Xavier de Gaye <xdegaye@gmail.com>
*upgrade* indicates whether or not to upgrade an existing installation *upgrade* indicates whether or not to upgrade an existing installation
of an earlier version of ``pip`` to the available version. of an earlier version of ``pip`` to the available version.
@@ -122,6 +125,8 @@ Module API @@ -132,6 +138,8 @@ Module API
*verbosity* controls the level of output to :data:`sys.stdout` from the *verbosity* controls the level of output to :data:`sys.stdout` from the
bootstrapping operation. bootstrapping operation.
@@ -139,7 +141,7 @@ Co-Authored-By: Xavier de Gaye <xdegaye@gmail.com>
--- a/Makefile.pre.in --- a/Makefile.pre.in
+++ b/Makefile.pre.in +++ b/Makefile.pre.in
@@ -2139,7 +2139,7 @@ install: @FRAMEWORKINSTALLFIRST@ @INSTAL @@ -2145,7 +2145,7 @@ install: @FRAMEWORKINSTALLFIRST@ @INSTAL
install|*) ensurepip="" ;; \ install|*) ensurepip="" ;; \
esac; \ esac; \
$(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \ $(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \
@@ -148,7 +150,7 @@ Co-Authored-By: Xavier de Gaye <xdegaye@gmail.com>
fi fi
.PHONY: altinstall .PHONY: altinstall
@@ -2150,7 +2150,7 @@ altinstall: commoninstall @@ -2156,7 +2156,7 @@ altinstall: commoninstall
install|*) ensurepip="--altinstall" ;; \ install|*) ensurepip="--altinstall" ;; \
esac; \ esac; \
$(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \ $(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \

View File

@@ -0,0 +1,45 @@
From 906a590df191f66f4f0c4a70e3edb6fd82c156ef Mon Sep 17 00:00:00 2001
From: Daniel Garcia Moreno <daniel.garcia@suse.com>
Date: Tue, 1 Jul 2025 12:13:28 +0200
Subject: [PATCH] Doc: Generate ids for audit_events using docname
This patch generates ids for audit_events using the docname so the id is
not global but depend on the source file. This make the doc build
reproducible with multiple cores because it doesn't which file is parsed
first, the id for audit_events will always be consistent independently
of what file is parsed first.
https://github.com/python/cpython/issues/130979
---
Doc/tools/extensions/audit_events.py | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
Index: Python-3.13.6/Doc/tools/extensions/audit_events.py
===================================================================
--- Python-3.13.6.orig/Doc/tools/extensions/audit_events.py 2025-08-07 12:16:58.257103336 +0200
+++ Python-3.13.6/Doc/tools/extensions/audit_events.py 2025-08-07 12:17:02.709401389 +0200
@@ -72,8 +72,13 @@
logger.warning(msg)
return
- def id_for(self, name) -> str:
- source_count = len(self.sources.get(name, set()))
+ def _source_count(self, name, docname) -> int:
+ """Count the event name in the same source"""
+ sources = self.sources.get(name, set())
+ return len([s for s, t in sources if s == docname])
+
+ def id_for(self, name, docname) -> str:
+ source_count = self._source_count(name, docname)
name_clean = re.sub(r"\W", "_", name)
return f"audit_event_{name_clean}_{source_count}"
@@ -148,7 +153,7 @@
except (IndexError, TypeError):
target = None
if not target:
- target = self.env.audit_events.id_for(name)
+ target = self.env.audit_events.id_for(name, self.env.docname)
ids.append(target)
self.env.audit_events.add_event(name, args, (self.env.docname, target))

View File

@@ -1,35 +1,152 @@
--- ---
Doc/conf.py | 17 ++++++++-- Doc/Makefile | 8 +--
Doc/tools/check-warnings.py | 3 + Doc/c-api/arg.rst | 1
Doc/tools/extensions/audit_events.py | 54 ++++++++++++++++---------------- Doc/c-api/typeobj.rst | 8 +--
Doc/tools/extensions/availability.py | 15 ++++---- Doc/conf.py | 29 ++++++++++---
Doc/tools/extensions/c_annotations.py | 45 ++++++++++++++++---------- Doc/howto/free-threading-python.rst | 2
Doc/tools/extensions/glossary_search.py | 10 +---- Doc/library/doctest.rst | 1
Doc/tools/extensions/patchlevel.py | 9 ++--- Doc/library/email.compat32-message.rst | 1
7 files changed, 87 insertions(+), 66 deletions(-) Doc/library/xml.etree.elementtree.rst | 1
Doc/Makefile | 8 +--
Doc/c-api/arg.rst | 1
Doc/c-api/typeobj.rst | 8 +--
Doc/conf.py | 29 ++++++++++---
Doc/library/doctest.rst | 1
Doc/library/email.compat32-message.rst | 1
Doc/library/xml.etree.elementtree.rst | 1
Doc/tools/check-warnings.py | 5 +-
Doc/tools/extensions/audit_events.py | 56 ++++++++++++++------------
Doc/tools/extensions/availability.py | 15 +++---
Doc/tools/extensions/c_annotations.py | 53 ++++++++++++++++--------
Doc/tools/extensions/changes.py | 8 +--
Doc/tools/extensions/glossary_search.py | 20 ++++++---
Doc/tools/extensions/implementation_detail.py | 22 +++-------
Doc/tools/extensions/issue_role.py | 16 ++-----
Doc/tools/extensions/misc_news.py | 14 ++----
Doc/tools/extensions/patchlevel.py | 9 ++--
Doc/tools/extensions/pydoc_topics.py | 22 +++++-----
18 files changed, 159 insertions(+), 130 deletions(-)
--- a/Doc/conf.py Index: Python-3.13.6/Doc/Makefile
+++ b/Doc/conf.py ===================================================================
@@ -17,6 +17,9 @@ sys.path.append(os.path.abspath('include --- Python-3.13.6.orig/Doc/Makefile 2025-08-06 15:05:20.000000000 +0200
# Python specific content from Doc/Tools/extensions/pyspecific.py +++ Python-3.13.6/Doc/Makefile 2025-08-07 12:16:58.253706854 +0200
from pyspecific import SOURCE_URI @@ -14,15 +14,15 @@
SOURCES =
DISTVERSION = $(shell $(PYTHON) tools/extensions/patchlevel.py)
REQUIREMENTS = requirements.txt
-SPHINXERRORHANDLING = --fail-on-warning
+SPHINXERRORHANDLING =
+# Needed for fixing extlinks modification # Internal variables.
+from sphinx import version_info as sphinx_version PAPEROPT_a4 = --define latex_elements.papersize=a4paper
PAPEROPT_letter = --define latex_elements.papersize=letterpaper
-ALLSPHINXOPTS = --builder $(BUILDER) \
- --doctree-dir build/doctrees \
- --jobs $(JOBS) \
+ALLSPHINXOPTS = -b $(BUILDER) \
+ -d build/doctrees \
+ -j $(JOBS) \
$(PAPEROPT_$(PAPER)) \
$(SPHINXOPTS) $(SPHINXERRORHANDLING) \
. build/$(BUILDER) $(SOURCES)
Index: Python-3.13.6/Doc/c-api/arg.rst
===================================================================
--- Python-3.13.6.orig/Doc/c-api/arg.rst 2025-08-06 15:05:20.000000000 +0200
+++ Python-3.13.6/Doc/c-api/arg.rst 2025-08-07 12:16:58.254160756 +0200
@@ -334,7 +334,6 @@
should raise an exception and leave the content of *address* unmodified.
.. c:macro:: Py_CLEANUP_SUPPORTED
- :no-typesetting:
If the *converter* returns :c:macro:`!Py_CLEANUP_SUPPORTED`, it may get called a
second time if the argument parsing eventually fails, giving the converter a
Index: Python-3.13.6/Doc/c-api/typeobj.rst
===================================================================
--- Python-3.13.6.orig/Doc/c-api/typeobj.rst 2025-08-06 15:05:20.000000000 +0200
+++ Python-3.13.6/Doc/c-api/typeobj.rst 2025-08-07 12:16:58.254692184 +0200
@@ -610,7 +610,7 @@
Functions like :c:func:`PyObject_NewVar` will take the value of N as an
argument, and store in the instance's :c:member:`~PyVarObject.ob_size` field.
Note that the :c:member:`~PyVarObject.ob_size` field may later be used for
- other purposes. For example, :py:type:`int` instances use the bits of
+ other purposes. For example, :py:obj:`int` instances use the bits of
:c:member:`~PyVarObject.ob_size` in an implementation-defined
way; the underlying storage and its size should be accessed using
:c:func:`PyLong_Export`.
@@ -622,9 +622,9 @@
Also, the presence of an :c:member:`~PyVarObject.ob_size` field in the
instance layout doesn't mean that the instance structure is variable-length.
- For example, the :py:type:`list` type has fixed-length instances, yet those
+ For example, the :py:obj:`list` type has fixed-length instances, yet those
instances have a :c:member:`~PyVarObject.ob_size` field.
- (As with :py:type:`int`, avoid reading lists' :c:member:`!ob_size` directly.
+ (As with :py:obj:`int`, avoid reading lists' :c:member:`!ob_size` directly.
Call :c:func:`PyList_Size` instead.)
The :c:member:`!tp_basicsize` includes size needed for data of the type's
@@ -637,7 +637,7 @@
In other words, :c:member:`!tp_basicsize` must be greater than or equal
to the base's :c:member:`!tp_basicsize`.
- Since every type is a subtype of :py:type:`object`, this struct must
+ Since every type is a subtype of :py:obj:`object`, this struct must
include :c:type:`PyObject` or :c:type:`PyVarObject` (depending on
whether :c:member:`~PyVarObject.ob_size` should be included). These are
usually defined by the macro :c:macro:`PyObject_HEAD` or
Index: Python-3.13.6/Doc/conf.py
===================================================================
--- Python-3.13.6.orig/Doc/conf.py 2025-08-07 12:16:45.115568663 +0200
+++ Python-3.13.6/Doc/conf.py 2025-08-07 12:16:58.255236531 +0200
@@ -11,6 +11,8 @@
from importlib import import_module
from importlib.util import find_spec
+from sphinx import version_info
+ +
# General configuration # Make our custom extensions available to Sphinx
# --------------------- sys.path.append(os.path.abspath('tools/extensions'))
sys.path.append(os.path.abspath('includes'))
@@ -57,11 +59,11 @@
import _tkinter
except ImportError:
_tkinter = None
-# Treat warnings as errors, done here to prevent warnings in Sphinx code from
-# causing spurious CPython test failures.
-import warnings
-warnings.simplefilter('error')
-del warnings
+# # Treat warnings as errors, done here to prevent warnings in Sphinx code from
+# # causing spurious CPython test failures.
+# import warnings
+# warnings.simplefilter('error')
+# del warnings
'''
@@ -90,7 +93,7 @@ highlight_language = 'python3' manpages_url = 'https://manpages.debian.org/{path}'
@@ -96,7 +98,7 @@
# Minimum version of sphinx required # Minimum version of sphinx required
# Keep this version in sync with ``Doc/requirements.txt``. # Keep this version in sync with ``Doc/requirements.txt``.
-needs_sphinx = '8.1.3' -needs_sphinx = '8.2.0'
+needs_sphinx = '4.2.0' +needs_sphinx = '4.2.0'
# Create table of contents entries for domain objects (e.g. functions, classes, # Create table of contents entries for domain objects (e.g. functions, classes,
# attributes, etc.). Default is True. # attributes, etc.). Default is True.
@@ -359,7 +362,7 @@ html_short_title = f'{release} Documenta @@ -258,6 +260,9 @@
# Avoid a warning with Sphinx >= 4.0
root_doc = 'contents'
+# Compatibility on old Sphinx
+suppress_warnings = ['pygments.ParserNotFound']
+
# Allow translation of index directives
gettext_additional_targets = [
'index',
@@ -297,7 +302,7 @@
# (See .readthedocs.yml and https://docs.readthedocs.io/en/stable/reference/environment-variables.html) # (See .readthedocs.yml and https://docs.readthedocs.io/en/stable/reference/environment-variables.html)
is_deployment_preview = os.getenv("READTHEDOCS_VERSION_TYPE") == "external" is_deployment_preview = os.getenv("READTHEDOCS_VERSION_TYPE") == "external"
repository_url = os.getenv("READTHEDOCS_GIT_CLONE_URL", "") repository_url = os.getenv("READTHEDOCS_GIT_CLONE_URL", "")
@@ -38,11 +155,11 @@
html_context = { html_context = {
"is_deployment_preview": is_deployment_preview, "is_deployment_preview": is_deployment_preview,
"repository_url": repository_url or None, "repository_url": repository_url or None,
@@ -604,6 +607,16 @@ extlinks = { @@ -542,6 +547,16 @@
} }
extlinks_detect_hardcoded_links = True extlinks_detect_hardcoded_links = True
+if sphinx_version[:2] < (8, 1): +if version_info[:2] < (8, 1):
+ # Sphinx 8.1 has in-built CVE and CWE roles. + # Sphinx 8.1 has in-built CVE and CWE roles.
+ extlinks.update({ + extlinks.update({
+ "cve": ( + "cve": (
@@ -55,9 +172,47 @@
# Options for c_annotations extension # Options for c_annotations extension
# ----------------------------------- # -----------------------------------
--- a/Doc/tools/check-warnings.py Index: Python-3.13.6/Doc/library/doctest.rst
+++ b/Doc/tools/check-warnings.py ===================================================================
@@ -228,7 +228,8 @@ def fail_if_regression( --- Python-3.13.6.orig/Doc/library/doctest.rst 2025-08-06 15:05:20.000000000 +0200
+++ Python-3.13.6/Doc/library/doctest.rst 2025-08-07 12:16:58.255583157 +0200
@@ -310,7 +310,6 @@
.. currentmodule:: None
.. attribute:: module.__test__
- :no-typesetting:
.. currentmodule:: doctest
Index: Python-3.13.6/Doc/library/email.compat32-message.rst
===================================================================
--- Python-3.13.6.orig/Doc/library/email.compat32-message.rst 2025-08-06 15:05:20.000000000 +0200
+++ Python-3.13.6/Doc/library/email.compat32-message.rst 2025-08-07 12:16:58.256095517 +0200
@@ -7,7 +7,6 @@
:synopsis: The base class representing email messages in a fashion
backward compatible with Python 3.2
:noindex:
- :no-index:
The :class:`Message` class is very similar to the
Index: Python-3.13.6/Doc/library/xml.etree.elementtree.rst
===================================================================
--- Python-3.13.6.orig/Doc/library/xml.etree.elementtree.rst 2025-08-06 15:05:20.000000000 +0200
+++ Python-3.13.6/Doc/library/xml.etree.elementtree.rst 2025-08-07 12:16:58.256380542 +0200
@@ -873,7 +873,6 @@
.. module:: xml.etree.ElementTree
:noindex:
- :no-index:
.. class:: Element(tag, attrib={}, **extra)
Index: Python-3.13.6/Doc/tools/check-warnings.py
===================================================================
--- Python-3.13.6.orig/Doc/tools/check-warnings.py 2025-08-06 15:05:20.000000000 +0200
+++ Python-3.13.6/Doc/tools/check-warnings.py 2025-08-07 12:16:58.256796101 +0200
@@ -228,7 +228,8 @@
print(filename) print(filename)
for warning in warnings: for warning in warnings:
if filename in warning: if filename in warning:
@@ -67,8 +222,19 @@
print(" {line}: {msg}".format_map(match)) print(" {line}: {msg}".format_map(match))
return -1 return -1
return 0 return 0
--- a/Doc/tools/extensions/audit_events.py @@ -316,7 +317,7 @@
+++ b/Doc/tools/extensions/audit_events.py
cwd = str(Path.cwd()) + os.path.sep
files_with_nits = {
- warning.removeprefix(cwd).split(":")[0]
+ (warning[len(cwd):].split(":")[0] if warning.startswith(cwd) else warning.split(":")[0])
for warning in warnings
if "Doc/" in warning
}
Index: Python-3.13.6/Doc/tools/extensions/audit_events.py
===================================================================
--- Python-3.13.6.orig/Doc/tools/extensions/audit_events.py 2025-08-06 15:05:20.000000000 +0200
+++ Python-3.13.6/Doc/tools/extensions/audit_events.py 2025-08-07 12:16:58.257103336 +0200
@@ -1,9 +1,6 @@ @@ -1,9 +1,6 @@
"""Support for documenting audit events.""" """Support for documenting audit events."""
@@ -79,34 +245,42 @@
from docutils import nodes from docutils import nodes
from sphinx.errors import NoUri from sphinx.errors import NoUri
@@ -12,12 +9,11 @@ from sphinx.transforms.post_transforms i @@ -12,12 +9,19 @@
from sphinx.util import logging from sphinx.util import logging
from sphinx.util.docutils import SphinxDirective from sphinx.util.docutils import SphinxDirective
-if TYPE_CHECKING: -if TYPE_CHECKING:
- from collections.abc import Iterator - from collections.abc import Iterator, Set
+from typing import Any, List, Tuple +from typing import Any, Iterator, List, Set, Tuple
+
+from sphinx.application import Sphinx
+from sphinx.builders import Builder
+from sphinx.environment import BuildEnvironment
+
+# --- The Monkey Patch ---
+def findall_patch(self, *args, **kwargs):
+ """A backwards-compatible findall method that calls traverse."""
+ return self.traverse(*args, **kwargs)
- from sphinx.application import Sphinx - from sphinx.application import Sphinx
- from sphinx.builders import Builder - from sphinx.builders import Builder
- from sphinx.environment import BuildEnvironment - from sphinx.environment import BuildEnvironment
+from sphinx.application import Sphinx +if not hasattr(nodes.Node, 'findall'):
+from sphinx.builders import Builder + nodes.Node.findall = findall_patch
+from sphinx.environment import BuildEnvironment
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -32,16 +28,16 @@ _SYNONYMS = [ @@ -32,16 +36,16 @@
class AuditEvents: class AuditEvents:
def __init__(self) -> None: def __init__(self) -> None:
- self.events: dict[str, list[str]] = {} - self.events: dict[str, list[str]] = {}
- self.sources: dict[str, list[tuple[str, str]]] = {} - self.sources: dict[str, set[tuple[str, str]]] = {}
+ self.events: dict[str, List[str]] = {} + self.events: dict[str, List[str]] = {}
+ self.sources: dict[str, List[Tuple[str, str]]] = {} + self.sources: dict[str, Set[Tuple[str, str]]] = {}
- def __iter__(self) -> Iterator[tuple[str, list[str], tuple[str, str]]]: - def __iter__(self) -> Iterator[tuple[str, list[str], tuple[str, str]]]:
+ def __iter__(self) -> Any: + def __iter__(self) -> Iterator[Any]:
for name, args in self.events.items(): for name, args in self.events.items():
for source in self.sources[name]: for source in self.sources[name]:
yield name, args, source yield name, args, source
@@ -117,16 +291,16 @@
) -> None: ) -> None:
if name in self.events: if name in self.events:
self._check_args_match(name, args) self._check_args_match(name, args)
@@ -49,7 +45,7 @@ class AuditEvents: @@ -49,7 +53,7 @@
self.events[name] = args self.events[name] = args
self.sources.setdefault(name, []).append(source) self.sources.setdefault(name, set()).add(source)
- def _check_args_match(self, name: str, args: list[str]) -> None: - def _check_args_match(self, name: str, args: list[str]) -> None:
+ def _check_args_match(self, name: str, args: List[str]) -> None: + def _check_args_match(self, name: str, args: List[str]) -> None:
current_args = self.events[name] current_args = self.events[name]
msg = ( msg = (
f"Mismatched arguments for audit-event {name}: " f"Mismatched arguments for audit-event {name}: "
@@ -60,7 +56,7 @@ class AuditEvents: @@ -60,7 +64,7 @@
if len(current_args) != len(args): if len(current_args) != len(args):
logger.warning(msg) logger.warning(msg)
return return
@@ -135,16 +309,16 @@
if a1 == a2: if a1 == a2:
continue continue
if any(a1 in s and a2 in s for s in _SYNONYMS): if any(a1 in s and a2 in s for s in _SYNONYMS):
@@ -73,7 +69,7 @@ class AuditEvents: @@ -73,7 +77,7 @@
name_clean = re.sub(r"\W", "_", name) name_clean = re.sub(r"\W", "_", name)
return f"audit_event_{name_clean}_{source_count}" return f"audit_event_{name_clean}_{source_count}"
- def rows(self) -> Iterator[tuple[str, list[str], list[tuple[str, str]]]]: - def rows(self) -> Iterator[tuple[str, list[str], Set[tuple[str, str]]]]:
+ def rows(self) -> Any: + def rows(self) -> Iterator[Any]:
for name in sorted(self.events.keys()): for name in sorted(self.events.keys()):
yield name, self.events[name], self.sources[name] yield name, self.events[name], self.sources[name]
@@ -97,7 +93,7 @@ def audit_events_purge( @@ -97,7 +101,7 @@
def audit_events_merge( def audit_events_merge(
app: Sphinx, app: Sphinx,
env: BuildEnvironment, env: BuildEnvironment,
@@ -153,7 +327,7 @@
other: BuildEnvironment, other: BuildEnvironment,
) -> None: ) -> None:
"""In Sphinx parallel builds, this merges audit_events from subprocesses.""" """In Sphinx parallel builds, this merges audit_events from subprocesses."""
@@ -126,14 +122,16 @@ class AuditEvent(SphinxDirective): @@ -126,14 +130,16 @@
), ),
] ]
@@ -176,7 +350,7 @@
else: else:
args = [] args = []
ids = [] ids = []
@@ -169,7 +167,7 @@ class audit_event_list(nodes.General, no @@ -169,7 +175,7 @@
class AuditEventListDirective(SphinxDirective): class AuditEventListDirective(SphinxDirective):
@@ -185,32 +359,21 @@
return [audit_event_list()] return [audit_event_list()]
@@ -181,7 +179,11 @@ class AuditEventListTransform(SphinxPost @@ -217,8 +223,8 @@
return
table = self._make_table(self.app.builder, self.env.docname)
- for node in self.document.findall(audit_event_list):
+ try:
+ findall = self.document.findall
+ except AttributeError:
+ findall = self.document.traverse
+ for node in findall(audit_event_list):
node.replace_self(table)
def _make_table(self, builder: Builder, docname: str) -> nodes.table:
@@ -217,8 +219,8 @@ class AuditEventListTransform(SphinxPost
builder: Builder, builder: Builder,
docname: str, docname: str,
name: str, name: str,
- args: list[str], - args: list[str],
- sources: list[tuple[str, str]], - sources: Set[tuple[str, str]],
+ args: List[str], + args: List[str],
+ sources: List[Tuple[str, str]], + sources: Set[Tuple[str, str]],
) -> nodes.row: ) -> nodes.row:
row = nodes.row() row = nodes.row()
name_node = nodes.paragraph("", nodes.Text(name)) name_node = nodes.paragraph("", nodes.Text(name))
--- a/Doc/tools/extensions/availability.py Index: Python-3.13.6/Doc/tools/extensions/availability.py
+++ b/Doc/tools/extensions/availability.py ===================================================================
--- Python-3.13.6.orig/Doc/tools/extensions/availability.py 2025-08-06 15:05:20.000000000 +0200
+++ Python-3.13.6/Doc/tools/extensions/availability.py 2025-08-07 12:16:58.257352322 +0200
@@ -1,8 +1,6 @@ @@ -1,8 +1,6 @@
"""Support for documenting platform availability""" """Support for documenting platform availability"""
@@ -221,7 +384,7 @@
from docutils import nodes from docutils import nodes
from sphinx import addnodes from sphinx import addnodes
@@ -55,7 +53,7 @@ class Availability(SphinxDirective): @@ -55,7 +53,7 @@
optional_arguments = 0 optional_arguments = 0
final_argument_whitespace = True final_argument_whitespace = True
@@ -230,7 +393,7 @@
title = sphinx_gettext("Availability") title = sphinx_gettext("Availability")
refnode = addnodes.pending_xref( refnode = addnodes.pending_xref(
title, title,
@@ -79,7 +77,7 @@ class Availability(SphinxDirective): @@ -79,7 +77,7 @@
return [cnode] return [cnode]
@@ -239,7 +402,7 @@
"""Parse platform information from arguments """Parse platform information from arguments
Arguments is a comma-separated string of platforms. A platform may Arguments is a comma-separated string of platforms. A platform may
@@ -98,12 +96,13 @@ class Availability(SphinxDirective): @@ -98,12 +96,13 @@
platform, _, version = arg.partition(" >= ") platform, _, version = arg.partition(" >= ")
if platform.startswith("not "): if platform.startswith("not "):
version = False version = False
@@ -255,7 +418,7 @@
logger.warning( logger.warning(
"Unknown platform%s or syntax '%s' in '.. availability:: %s', " "Unknown platform%s or syntax '%s' in '.. availability:: %s', "
"see %s:KNOWN_PLATFORMS for a set of known platforms.", "see %s:KNOWN_PLATFORMS for a set of known platforms.",
@@ -116,7 +115,7 @@ class Availability(SphinxDirective): @@ -116,7 +115,7 @@
return platforms return platforms
@@ -264,9 +427,11 @@
app.add_directive("availability", Availability) app.add_directive("availability", Availability)
return { return {
--- a/Doc/tools/extensions/c_annotations.py Index: Python-3.13.6/Doc/tools/extensions/c_annotations.py
+++ b/Doc/tools/extensions/c_annotations.py ===================================================================
@@ -9,22 +9,18 @@ Configuration: --- Python-3.13.6.orig/Doc/tools/extensions/c_annotations.py 2025-08-06 15:05:20.000000000 +0200
+++ Python-3.13.6/Doc/tools/extensions/c_annotations.py 2025-08-07 12:16:58.257571556 +0200
@@ -9,22 +9,26 @@
* Set ``stable_abi_file`` to the path to stable ABI list. * Set ``stable_abi_file`` to the path to stable ABI list.
""" """
@@ -289,10 +454,18 @@
- from sphinx.application import Sphinx - from sphinx.application import Sphinx
- from sphinx.util.typing import ExtensionMetadata - from sphinx.util.typing import ExtensionMetadata
+from sphinx.application import Sphinx +from sphinx.application import Sphinx
+
+# --- The Monkey Patch ---
+def findall_patch(self, *args, **kwargs):
+ """A backwards-compatible findall method that calls traverse."""
+ return self.traverse(*args, **kwargs)
+
+if not hasattr(nodes.Node, 'findall'):
+ nodes.Node.findall = findall_patch
ROLE_TO_OBJECT_TYPE = { ROLE_TO_OBJECT_TYPE = {
"func": "function", "func": "function",
@@ -35,20 +31,20 @@ ROLE_TO_OBJECT_TYPE = { @@ -35,20 +39,20 @@
} }
@@ -317,7 +490,7 @@
class StableABIEntry: class StableABIEntry:
# Role of the object. # Role of the object.
# Source: Each [item_kind] in stable_abi.toml is mapped to a C Domain role. # Source: Each [item_kind] in stable_abi.toml is mapped to a C Domain role.
@@ -67,7 +63,7 @@ class StableABIEntry: @@ -67,7 +71,7 @@
struct_abi_kind: str struct_abi_kind: str
@@ -326,7 +499,7 @@
refcount_data = {} refcount_data = {}
refcounts = refcount_filename.read_text(encoding="utf8") refcounts = refcount_filename.read_text(encoding="utf8")
for line in refcounts.splitlines(): for line in refcounts.splitlines():
@@ -103,7 +99,7 @@ def read_refcount_data(refcount_filename @@ -103,7 +107,7 @@
return refcount_data return refcount_data
@@ -335,7 +508,7 @@
stable_abi_data = {} stable_abi_data = {}
with open(stable_abi_file, encoding="utf8") as fp: with open(stable_abi_file, encoding="utf8") as fp:
for record in csv.DictReader(fp): for record in csv.DictReader(fp):
@@ -123,11 +119,14 @@ def add_annotations(app: Sphinx, doctree @@ -123,11 +127,14 @@
continue continue
if not par[0].get("ids", None): if not par[0].get("ids", None):
continue continue
@@ -352,7 +525,7 @@
if ROLE_TO_OBJECT_TYPE[record.role] != objtype: if ROLE_TO_OBJECT_TYPE[record.role] != objtype:
msg = ( msg = (
f"Object type mismatch in limited API annotation for {name}: " f"Object type mismatch in limited API annotation for {name}: "
@@ -234,7 +233,7 @@ def _unstable_api_annotation() -> nodes. @@ -234,7 +241,7 @@
) )
@@ -361,7 +534,7 @@
classes = ["refcount"] classes = ["refcount"]
if result_refs is None: if result_refs is None:
rc = sphinx_gettext("Return value: Always NULL.") rc = sphinx_gettext("Return value: Always NULL.")
@@ -254,7 +253,7 @@ class LimitedAPIList(SphinxDirective): @@ -254,7 +261,7 @@
optional_arguments = 0 optional_arguments = 0
final_argument_whitespace = True final_argument_whitespace = True
@@ -370,7 +543,7 @@
state = self.env.domaindata["c_annotations"] state = self.env.domaindata["c_annotations"]
content = [ content = [
f"* :c:{record.role}:`{record.name}`" f"* :c:{record.role}:`{record.name}`"
@@ -277,13 +276,23 @@ def init_annotations(app: Sphinx) -> Non @@ -277,13 +284,23 @@
) )
@@ -395,9 +568,50 @@
return { return {
"version": "1.0", "version": "1.0",
"parallel_read_safe": True, "parallel_read_safe": True,
--- a/Doc/tools/extensions/glossary_search.py Index: Python-3.13.6/Doc/tools/extensions/changes.py
+++ b/Doc/tools/extensions/glossary_search.py ===================================================================
@@ -1,18 +1,14 @@ --- Python-3.13.6.orig/Doc/tools/extensions/changes.py 2025-08-06 15:05:20.000000000 +0200
+++ Python-3.13.6/Doc/tools/extensions/changes.py 2025-08-07 12:16:58.257773818 +0200
@@ -1,7 +1,5 @@
"""Support for documenting version of changes, additions, deprecations."""
-from __future__ import annotations
-
from typing import TYPE_CHECKING
from sphinx.domains.changeset import (
@@ -25,7 +23,7 @@
class PyVersionChange(VersionChange):
- def run(self) -> list[Node]:
+ def run(self) -> "list[Node]":
# Replace the 'next' special token with the current development version
self.arguments[0] = expand_version_arg(
self.arguments[0], self.config.release
@@ -43,7 +41,7 @@
"Deprecated since version %s, removed in version %s"
)
- def run(self) -> list[Node]:
+ def run(self) -> "list[Node]":
# Replace the first two arguments (deprecated version and removed version)
# with a single tuple of both versions.
version_deprecated = expand_version_arg(
@@ -73,7 +71,7 @@
versionlabel_classes[self.name] = ""
-def setup(app: Sphinx) -> ExtensionMetadata:
+def setup(app: "Sphinx") -> "ExtensionMetadata":
# Override Sphinx's directives with support for 'next'
app.add_directive("versionadded", PyVersionChange, override=True)
app.add_directive("versionchanged", PyVersionChange, override=True)
Index: Python-3.13.6/Doc/tools/extensions/glossary_search.py
===================================================================
--- Python-3.13.6.orig/Doc/tools/extensions/glossary_search.py 2025-08-06 15:05:20.000000000 +0200
+++ Python-3.13.6/Doc/tools/extensions/glossary_search.py 2025-08-07 12:16:58.257959947 +0200
@@ -1,21 +1,27 @@
"""Feature search results for glossary items prominently.""" """Feature search results for glossary items prominently."""
-from __future__ import annotations -from __future__ import annotations
@@ -418,7 +632,20 @@
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -52,7 +48,7 @@ def write_glossary_json(app: Sphinx, _ex +from docutils import nodes
+from sphinx import addnodes
+
+# --- The Monkey Patch ---
+def findall_patch(self, *args, **kwargs):
+ """A backwards-compatible findall method that calls traverse."""
+ return self.traverse(*args, **kwargs)
+
+if not hasattr(nodes.Node, 'findall'):
+ nodes.Node.findall = findall_patch
def process_glossary_nodes(
app: Sphinx,
@@ -52,7 +58,7 @@
dest.write_text(json.dumps(app.env.glossary_terms), encoding='utf-8') dest.write_text(json.dumps(app.env.glossary_terms), encoding='utf-8')
@@ -427,8 +654,169 @@
app.connect('doctree-resolved', process_glossary_nodes) app.connect('doctree-resolved', process_glossary_nodes)
app.connect('build-finished', write_glossary_json) app.connect('build-finished', write_glossary_json)
--- a/Doc/tools/extensions/patchlevel.py Index: Python-3.13.6/Doc/tools/extensions/implementation_detail.py
+++ b/Doc/tools/extensions/patchlevel.py ===================================================================
--- Python-3.13.6.orig/Doc/tools/extensions/implementation_detail.py 2025-08-06 15:05:20.000000000 +0200
+++ Python-3.13.6/Doc/tools/extensions/implementation_detail.py 2025-08-07 12:16:58.258140488 +0200
@@ -1,17 +1,10 @@
"""Support for marking up implementation details."""
-from __future__ import annotations
-
-from typing import TYPE_CHECKING
-
from docutils import nodes
from sphinx.locale import _ as sphinx_gettext
from sphinx.util.docutils import SphinxDirective
-if TYPE_CHECKING:
- from sphinx.application import Sphinx
- from sphinx.util.typing import ExtensionMetadata
-
+from sphinx.application import Sphinx
class ImplementationDetail(SphinxDirective):
has_content = True
@@ -21,23 +14,24 @@
label_text = sphinx_gettext("CPython implementation detail:")
def run(self):
- self.assert_has_content()
- content_nodes = self.parse_content_to_nodes()
+ container_node = nodes.container()
+ container_node.document = self.state.document # Ensure node has document context
+ self.state.nested_parse(self.content, self.content_offset, container_node)
+ parsed_nodes = container_node.children
# insert our prefix at the start of the first paragraph
- first_node = content_nodes[0]
+ first_node = parsed_nodes[0]
first_node[:0] = [
nodes.strong(self.label_text, self.label_text),
nodes.Text(" "),
]
- # create a new compound container node
- cnode = nodes.compound("", *content_nodes, classes=["impl-detail"])
+ cnode = nodes.compound("", *parsed_nodes, classes=["impl-detail"])
self.set_source_info(cnode)
return [cnode]
-def setup(app: Sphinx) -> ExtensionMetadata:
+def setup(app: Sphinx):
app.add_directive("impl-detail", ImplementationDetail)
return {
Index: Python-3.13.6/Doc/tools/extensions/issue_role.py
===================================================================
--- Python-3.13.6.orig/Doc/tools/extensions/issue_role.py 2025-08-06 15:05:20.000000000 +0200
+++ Python-3.13.6/Doc/tools/extensions/issue_role.py 2025-08-07 12:16:58.258306293 +0200
@@ -1,22 +1,18 @@
"""Support for referencing issues in the tracker."""
-from __future__ import annotations
-
-from typing import TYPE_CHECKING
+from typing import TYPE_CHECKING, List, Tuple
from docutils import nodes
from sphinx.util.docutils import SphinxRole
-if TYPE_CHECKING:
- from docutils.nodes import Element
- from sphinx.application import Sphinx
- from sphinx.util.typing import ExtensionMetadata
+from docutils.nodes import Element
+from sphinx.application import Sphinx
class BPOIssue(SphinxRole):
ISSUE_URI = "https://bugs.python.org/issue?@action=redirect&bpo={0}"
- def run(self) -> tuple[list[Element], list[nodes.system_message]]:
+ def run(self) -> Tuple[List[Element], List[nodes.system_message]]:
issue = self.text
# sanity check: there are no bpo issues within these two values
@@ -38,7 +34,7 @@
class GitHubIssue(SphinxRole):
ISSUE_URI = "https://github.com/python/cpython/issues/{0}"
- def run(self) -> tuple[list[Element], list[nodes.system_message]]:
+ def run(self) -> Tuple[List[Element], List[nodes.system_message]]:
issue = self.text
# sanity check: all GitHub issues have ID >= 32426
@@ -58,7 +54,7 @@
return [refnode], []
-def setup(app: Sphinx) -> ExtensionMetadata:
+def setup(app: Sphinx) -> "ExtensionMetadata":
app.add_role("issue", BPOIssue())
app.add_role("gh", GitHubIssue())
Index: Python-3.13.6/Doc/tools/extensions/misc_news.py
===================================================================
--- Python-3.13.6.orig/Doc/tools/extensions/misc_news.py 2025-08-06 15:05:20.000000000 +0200
+++ Python-3.13.6/Doc/tools/extensions/misc_news.py 2025-08-07 12:16:58.258481107 +0200
@@ -1,7 +1,5 @@
"""Support for including Misc/NEWS."""
-from __future__ import annotations
-
import re
from pathlib import Path
from typing import TYPE_CHECKING
@@ -24,13 +22,13 @@
+++++++++++
"""
-bpo_issue_re: Final[re.Pattern[str]] = re.compile(
+bpo_issue_re: "Final[re.Pattern[str]]" = re.compile(
"(?:issue #|bpo-)([0-9]+)", re.ASCII
)
-gh_issue_re: Final[re.Pattern[str]] = re.compile(
+gh_issue_re: "Final[re.Pattern[str]]" = re.compile(
"gh-(?:issue-)?([0-9]+)", re.ASCII | re.IGNORECASE
)
-whatsnew_re: Final[re.Pattern[str]] = re.compile(
+whatsnew_re: "Final[re.Pattern[str]]" = re.compile(
r"^what's new in (.*?)\??$", re.ASCII | re.IGNORECASE | re.MULTILINE
)
@@ -42,7 +40,7 @@
final_argument_whitespace = False
option_spec = {}
- def run(self) -> list[Node]:
+ def run(self) -> "list[Node]":
# Get content of NEWS file
source, _ = self.get_source_info()
news_file = Path(source).resolve().parent / self.arguments[0]
@@ -54,7 +52,7 @@
return [nodes.strong(text, text)]
# remove first 3 lines as they are the main heading
- news_text = news_text.removeprefix(BLURB_HEADER)
+ news_text = news_text[len(BLURB_HEADER):] if news_text.startswith(BLURB_HEADER) else news_text
news_text = bpo_issue_re.sub(r":issue:`\1`", news_text)
# Fallback handling for GitHub issues
@@ -65,7 +63,7 @@
return []
-def setup(app: Sphinx) -> ExtensionMetadata:
+def setup(app: "Sphinx") -> "ExtensionMetadata":
app.add_directive("miscnews", MiscNews)
return {
Index: Python-3.13.6/Doc/tools/extensions/patchlevel.py
===================================================================
--- Python-3.13.6.orig/Doc/tools/extensions/patchlevel.py 2025-08-06 15:05:20.000000000 +0200
+++ Python-3.13.6/Doc/tools/extensions/patchlevel.py 2025-08-07 12:16:58.258716335 +0200
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
import re import re
import sys import sys
@@ -438,7 +826,7 @@
CPYTHON_ROOT = Path( CPYTHON_ROOT = Path(
__file__, # cpython/Doc/tools/extensions/patchlevel.py __file__, # cpython/Doc/tools/extensions/patchlevel.py
@@ -26,7 +26,7 @@ class version_info(NamedTuple): # noqa: @@ -26,7 +26,7 @@
major: int #: Major release number major: int #: Major release number
minor: int #: Minor release number minor: int #: Minor release number
micro: int #: Patch release number micro: int #: Patch release number
@@ -447,7 +835,7 @@
serial: int #: Serial release number serial: int #: Serial release number
@@ -37,7 +37,8 @@ def get_header_version_info() -> version @@ -37,7 +37,8 @@
defines = {} defines = {}
patchlevel_h = PATCHLEVEL_H.read_text(encoding="utf-8") patchlevel_h = PATCHLEVEL_H.read_text(encoding="utf-8")
for line in patchlevel_h.splitlines(): for line in patchlevel_h.splitlines():
@@ -457,7 +845,7 @@
name, value = m.groups() name, value = m.groups()
defines[name] = value defines[name] = value
@@ -50,7 +51,7 @@ def get_header_version_info() -> version @@ -50,7 +51,7 @@
) )
@@ -466,3 +854,65 @@
version = f"{info.major}.{info.minor}" version = f"{info.major}.{info.minor}"
release = f"{info.major}.{info.minor}.{info.micro}" release = f"{info.major}.{info.minor}.{info.micro}"
if info.releaselevel != "final": if info.releaselevel != "final":
Index: Python-3.13.6/Doc/tools/extensions/pydoc_topics.py
===================================================================
--- Python-3.13.6.orig/Doc/tools/extensions/pydoc_topics.py 2025-08-06 15:05:20.000000000 +0200
+++ Python-3.13.6/Doc/tools/extensions/pydoc_topics.py 2025-08-07 12:16:58.258911962 +0200
@@ -1,21 +1,23 @@
"""Support for building "topic help" for pydoc."""
-from __future__ import annotations
-
from time import asctime
-from typing import TYPE_CHECKING
+from typing import TYPE_CHECKING, Tuple
from sphinx.builders.text import TextBuilder
from sphinx.util import logging
-from sphinx.util.display import status_iterator
+try:
+ from sphinx.util.display import status_iterator
+except ModuleNotFoundError:
+ from sphinx.util import status_iterator
from sphinx.util.docutils import new_document
from sphinx.writers.text import TextTranslator
-if TYPE_CHECKING:
+try:
+ from typing import Sequence, Set
+except ModuleNotFoundError:
from collections.abc import Sequence, Set
- from sphinx.application import Sphinx
- from sphinx.util.typing import ExtensionMetadata
+from sphinx.application import Sphinx
logger = logging.getLogger(__name__)
@@ -162,7 +164,7 @@
self.outdir.joinpath("topics.py").write_text(topics, encoding="utf-8")
-def _display_labels(item: tuple[str, Sequence[tuple[str, str]]]) -> str:
+def _display_labels(item: Tuple[str, Sequence[Tuple[str, str]]]) -> str:
_docname, label_ids = item
labels = [name for name, _id in label_ids]
if len(labels) > 4:
@@ -170,7 +172,7 @@
return ", ".join(labels)
-def _repr(text: str, /) -> str:
+def _repr(text: str) -> str:
"""Return a triple-single-quoted representation of text."""
if "'''" not in text:
return f"r'''{text}'''"
@@ -178,7 +180,7 @@
return f"'''{text}'''"
-def setup(app: Sphinx) -> ExtensionMetadata:
+def setup(app: Sphinx) -> "ExtensionMetadata":
app.add_builder(PydocTopicsBuilder)
return {

View File

@@ -0,0 +1,95 @@
commit 2b0e2b2893a821ca36cd65a204bed932741ac189
Author: Filipe Laíns 🇵🇸 <lains@riseup.net>
Date: Tue Nov 26 13:46:33 2024 +0000
GH-126985: move pyvenv.cfg detection from site to getpath (#126987)
---
Lib/test/test_sysconfig.py | 67 ---------------------------------------------
1 file changed, 1 insertion(+), 66 deletions(-)
Index: Python-3.13.5/Lib/test/test_sysconfig.py
===================================================================
--- Python-3.13.5.orig/Lib/test/test_sysconfig.py 2025-06-12 19:55:42.184491497 +0200
+++ Python-3.13.5/Lib/test/test_sysconfig.py 2025-06-12 19:56:05.737665419 +0200
@@ -110,6 +110,7 @@
**venv_create_args,
)
+
def test_get_path_names(self):
self.assertEqual(get_path_names(), sysconfig._SCHEME_KEYS)
@@ -604,72 +605,6 @@
suffix = sysconfig.get_config_var('EXT_SUFFIX')
self.assertTrue(suffix.endswith('-darwin.so'), suffix)
- @requires_subprocess()
- def test_config_vars_depend_on_site_initialization(self):
- script = textwrap.dedent("""
- import sysconfig
-
- config_vars = sysconfig.get_config_vars()
-
- import json
- print(json.dumps(config_vars, indent=2))
- """)
-
- with self.venv() as venv:
- site_config_vars = json.loads(venv.run('-c', script).stdout)
- no_site_config_vars = json.loads(venv.run('-S', '-c', script).stdout)
-
- self.assertNotEqual(site_config_vars, no_site_config_vars)
- # With the site initialization, the virtual environment should be enabled.
- self.assertEqual(site_config_vars['base'], venv.prefix)
- self.assertEqual(site_config_vars['platbase'], venv.prefix)
- #self.assertEqual(site_config_vars['prefix'], venv.prefix) # # FIXME: prefix gets overwriten by _init_posix
- # Without the site initialization, the virtual environment should be disabled.
- self.assertEqual(no_site_config_vars['base'], site_config_vars['installed_base'])
- self.assertEqual(no_site_config_vars['platbase'], site_config_vars['installed_platbase'])
-
- @requires_subprocess()
- def test_config_vars_recalculation_after_site_initialization(self):
- script = textwrap.dedent("""
- import sysconfig
-
- before = sysconfig.get_config_vars()
-
- import site
- site.main()
-
- after = sysconfig.get_config_vars()
-
- import json
- print(json.dumps({'before': before, 'after': after}, indent=2))
- """)
-
- with self.venv() as venv:
- config_vars = json.loads(venv.run('-S', '-c', script).stdout)
-
- self.assertNotEqual(config_vars['before'], config_vars['after'])
- self.assertEqual(config_vars['after']['base'], venv.prefix)
- #self.assertEqual(config_vars['after']['prefix'], venv.prefix) # FIXME: prefix gets overwriten by _init_posix
- #self.assertEqual(config_vars['after']['exec_prefix'], venv.prefix) # FIXME: exec_prefix gets overwriten by _init_posix
-
- @requires_subprocess()
- def test_paths_depend_on_site_initialization(self):
- script = textwrap.dedent("""
- import sysconfig
-
- paths = sysconfig.get_paths()
-
- import json
- print(json.dumps(paths, indent=2))
- """)
-
- with self.venv() as venv:
- site_paths = json.loads(venv.run('-c', script).stdout)
- no_site_paths = json.loads(venv.run('-S', '-c', script).stdout)
-
- self.assertNotEqual(site_paths, no_site_paths)
-
-
class MakefileTests(unittest.TestCase):
@unittest.skipIf(sys.platform.startswith('win'),

View File

@@ -0,0 +1,30 @@
From 4bb41b28d5bac09bccd636d8c5fefe1a462f63a7 Mon Sep 17 00:00:00 2001
From: Alm <alon.menczer@gmail.com>
Date: Mon, 25 Aug 2025 08:56:38 +0300
Subject: [PATCH 1/4] Exclude .pyc files from the computed digest in the jit
stencils
---
Tools/jit/_targets.py | 3 +++
1 file changed, 3 insertions(+)
Index: Python-3.13.7/Tools/jit/_targets.py
===================================================================
--- Python-3.13.7.orig/Tools/jit/_targets.py
+++ Python-3.13.7/Tools/jit/_targets.py
@@ -53,6 +53,9 @@ class _Target(typing.Generic[_S, _R]):
hasher.update(PYTHON_EXECUTOR_CASES_C_H.read_bytes())
hasher.update((out / "pyconfig.h").read_bytes())
for dirpath, _, filenames in sorted(os.walk(TOOLS_JIT)):
+ # Exclude cache files from digest computation to ensure reproducible builds.
+ if dirpath.endswith("__pycache__"):
+ continue
for filename in filenames:
hasher.update(pathlib.Path(dirpath, filename).read_bytes())
return hasher.hexdigest()
Index: Python-3.13.7/Misc/NEWS.d/next/Build/2025-08-27-09-52-45.gh-issue-138061.fMVS9w.rst
===================================================================
--- /dev/null
+++ Python-3.13.7/Misc/NEWS.d/next/Build/2025-08-27-09-52-45.gh-issue-138061.fMVS9w.rst
@@ -0,0 +1 @@
+Ensure reproducible builds by making JIT stencil header generation deterministic.

View File

@@ -0,0 +1,36 @@
From 19b61747df3d62c822285c488753d6fbdf91e3ac Mon Sep 17 00:00:00 2001
From: Daniel Garcia Moreno <daniel.garcia@suse.com>
Date: Tue, 23 Sep 2025 10:20:16 +0200
Subject: [PATCH 1/2] gh-139257: Support docutils >= 0.22
---
Doc/tools/extensions/pyspecific.py | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
Index: Python-3.13.7/Doc/tools/extensions/pyspecific.py
===================================================================
--- Python-3.13.7.orig/Doc/tools/extensions/pyspecific.py
+++ Python-3.13.7/Doc/tools/extensions/pyspecific.py
@@ -25,11 +25,21 @@ from sphinx.util.docutils import SphinxD
SOURCE_URI = 'https://github.com/python/cpython/tree/3.13/%s'
# monkey-patch reST parser to disable alphabetic and roman enumerated lists
+def _disable_alphabetic_and_roman(text):
+ try:
+ # docutils >= 0.22
+ from docutils.parsers.rst.states import InvalidRomanNumeralError
+ raise InvalidRomanNumeralError(text)
+ except ImportError:
+ # docutils < 0.22
+ return None
+
+
from docutils.parsers.rst.states import Body
Body.enum.converters['loweralpha'] = \
Body.enum.converters['upperalpha'] = \
Body.enum.converters['lowerroman'] = \
- Body.enum.converters['upperroman'] = lambda x: None
+ Body.enum.converters['upperroman'] = _disable_alphabetic_and_roman
class PyAwaitableMixin(object):

View File

@@ -1,16 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2017 Zbigniew Jędrzejewski-Szmek --> <component type="desktop-application">
<application> <id>org.python.IDLE3</id>
<id type="desktop">idle3.desktop</id> <launchable type="desktop-id">idle3.desktop</launchable>
<name>IDLE3</name> <name>IDLE3</name>
<metadata_licence>CC0</metadata_licence>
<project_license>Python-2.0</project_license>
<summary>Python 3 Integrated Development and Learning Environment</summary> <summary>Python 3 Integrated Development and Learning Environment</summary>
<description> <description>
<p> <p>
IDLE is Pythons Integrated Development and Learning Environment. IDLE is Pythons Integrated Development and Learning Environment.
The GUI is uniform between Windows, Unix, and Mac OS X. The GUI is uniform between Windows, Unix, and macOS.
IDLE provides an easy way to start writing, running, and debugging IDLE provides an easy way to start writing, running, and debugging
Python code. Python code.
</p> </p>
@@ -19,17 +19,33 @@
It provides: It provides:
</p> </p>
<ul> <ul>
<li>a Python shell window (interactive interpreter) with colorizing of code input, output, and error messages,</li> <li>a Python shell window (interactive interpreter) with colorizing of code input, output, and error messages,</li>
<li>a multi-window text editor with multiple undo, Python colorizing, smart indent, call tips, auto completion, and other features,</li> <li>a multi-window text editor with multiple undo, Python colorizing, smart indent, call tips, auto completion, and other features,</li>
<li>search within any window, replace within editor windows, and search through multiple files (grep),</li> <li>search within any window, replace within editor windows, and search through multiple files (grep),</li>
<li>a debugger with persistent breakpoints, stepping, and viewing of global and local namespaces.</li> <li>a debugger with persistent breakpoints, stepping, and viewing of global and local namespaces.</li>
</ul> </ul>
</description> </description>
<developer id="org.python">
<name>Python Software Foundation</name>
</developer>
<url type="homepage">https://docs.python.org/3/library/idle.html</url> <url type="homepage">https://docs.python.org/3/library/idle.html</url>
<screenshots> <screenshots>
<screenshot type="default">http://in.waw.pl/~zbyszek/fedora/idle3-appdata/idle3-main-window.png</screenshot> <screenshot type="default">
<screenshot>http://in.waw.pl/~zbyszek/fedora/idle3-appdata/idle3-class-browser.png</screenshot> <image>https://in.waw.pl/~zbyszek/fedora/idle3-appdata/idle3-main-window.png</image>
<screenshot>http://in.waw.pl/~zbyszek/fedora/idle3-appdata/idle3-code-viewer.png</screenshot> </screenshot>
<screenshot>
<image>https://in.waw.pl/~zbyszek/fedora/idle3-appdata/idle3-class-browser.png</image>
</screenshot>
<screenshot>
<image>https://in.waw.pl/~zbyszek/fedora/idle3-appdata/idle3-code-viewer.png</image>
</screenshot>
</screenshots> </screenshots>
<project_license>Python-2.0</project_license>
<metadata_license>CC0-1.0</metadata_license>
<update_contact>zbyszek@in.waw.pl</update_contact> <update_contact>zbyszek@in.waw.pl</update_contact>
</application> </component>

View File

@@ -4,7 +4,7 @@
--- a/Makefile.pre.in --- a/Makefile.pre.in
+++ b/Makefile.pre.in +++ b/Makefile.pre.in
@@ -1679,11 +1679,18 @@ Modules/getbuildinfo.o: $(PARSER_OBJS) \ @@ -1684,11 +1684,18 @@ Modules/getbuildinfo.o: $(PARSER_OBJS) \
$(DTRACE_OBJS) \ $(DTRACE_OBJS) \
$(srcdir)/Modules/getbuildinfo.c $(srcdir)/Modules/getbuildinfo.c
$(CC) -c $(PY_CORE_CFLAGS) \ $(CC) -c $(PY_CORE_CFLAGS) \

View File

@@ -1,9 +1,11 @@
Index: Python-3.13.0a3/Lib/site.py ---
=================================================================== Lib/site.py | 2 +-
--- Python-3.13.0a3.orig/Lib/site.py 1 file changed, 1 insertion(+), 1 deletion(-)
+++ Python-3.13.0a3/Lib/site.py
@@ -77,7 +77,7 @@ import io --- a/Lib/site.py
import stat +++ b/Lib/site.py
@@ -78,7 +78,7 @@ import stat
import errno
# Prefixes for site-packages; add additional prefixes like /usr/local here # Prefixes for site-packages; add additional prefixes like /usr/local here
-PREFIXES = [sys.prefix, sys.exec_prefix] -PREFIXES = [sys.prefix, sys.exec_prefix]

View File

@@ -1,15 +0,0 @@
---
Lib/test/test_posix.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/Lib/test/test_posix.py
+++ b/Lib/test/test_posix.py
@@ -437,7 +437,7 @@ class PosixTester(unittest.TestCase):
def test_posix_fadvise(self):
fd = os.open(os_helper.TESTFN, os.O_RDONLY)
try:
- posix.posix_fadvise(fd, 0, 0, posix.POSIX_FADV_WILLNEED)
+ posix.posix_fadvise(fd, 0, 0, posix.POSIX_FADV_RANDOM)
finally:
os.close(fd)

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
# #
# spec file for package python313 # spec file for package python313
# #
# Copyright (c) 2025 SUSE LLC # Copyright (c) 2025 SUSE LLC and contributors
# #
# All modifications and additions to the file contributed by third parties # All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed # remain the property of their copyright owners, unless otherwise agreed
@@ -83,19 +83,20 @@
# No experimental_jit in SLES, there's no clang >=18 # No experimental_jit in SLES, there's no clang >=18
%if 0%{?suse_version} <= 1600 %if 0%{?suse_version} <= 1600
%bcond_with experimental_jit %bcond_with experimental_jit
# Disable experimental_jit for primary python.
# llvm is not part of ring0 and experimental_jit requires clang >= 18
%elif !%{primary_interpreter}
# Currently supported architectures
# https://peps.python.org/pep-0744/#support
%ifarch x86_64 %{x86_64} aarch64
%bcond_without experimental_jit
%else %else
%bcond_with experimental_jit # Disable experimental_jit for primary python.
%endif # llvm is not part of ring0 and experimental_jit requires clang >= 18
%if !%{primary_interpreter}
%else # Currently supported architectures
%bcond_with experimental_jit # https://peps.python.org/pep-0744/#support
%ifarch x86_64 %{x86_64} aarch64
%bcond_without experimental_jit
%else
%bcond_with experimental_jit
%endif
%else
%bcond_with experimental_jit
%endif
%endif %endif
# %%if 0%%{?sle_version} && 0%%{?suse_version} < 1550 # %%if 0%%{?sle_version} && 0%%{?suse_version} < 1550
@@ -139,7 +140,11 @@
# version part of "libpython" package # version part of "libpython" package
%define so_major 1 %define so_major 1
%define so_minor 0 %define so_minor 0
%if "%{abi_kind}" == "t"
%define so_version %{python_version_soname}t%{so_major}_%{so_minor}
%else
%define so_version %{python_version_soname}%{abi_kind}-%{so_major}_%{so_minor} %define so_version %{python_version_soname}%{abi_kind}-%{so_major}_%{so_minor}
%endif
# rpm and python have different ideas about what is an arch-dependent name, so: # rpm and python have different ideas about what is an arch-dependent name, so:
%if "%{__isa_name}" == "ppc" %if "%{__isa_name}" == "ppc"
%define archname %(echo %{_arch} | sed s/ppc/powerpc/) %define archname %(echo %{_arch} | sed s/ppc/powerpc/)
@@ -162,7 +167,7 @@
# _md5.cpython-38m-x86_64-linux-gnu.so # _md5.cpython-38m-x86_64-linux-gnu.so
%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
Name: %{python_pkg_name}%{psuffix} Name: %{python_pkg_name}%{psuffix}
Version: 3.13.2 Version: 3.13.9
%define tarversion %{version} %define tarversion %{version}
%define tarname Python-%{tarversion} %define tarname Python-%{tarversion}
Release: 0 Release: 0
@@ -206,8 +211,6 @@ Patch02: F00251-change-user-install-location.patch
Patch03: python-3.3.0b1-localpath.patch Patch03: python-3.3.0b1-localpath.patch
# replace DATE, TIME and COMPILER by fixed definitions to aid reproducible builds # replace DATE, TIME and COMPILER by fixed definitions to aid reproducible builds
Patch04: python-3.3.0b1-fix_date_time_compiler.patch Patch04: python-3.3.0b1-fix_date_time_compiler.patch
# POSIX_FADV_WILLNEED throws EINVAL. Use a different constant in test
Patch05: python-3.3.0b1-test-posix_fadvise.patch
# Raise timeout value for test_subprocess # Raise timeout value for test_subprocess
Patch06: subprocess-raise-timeout.patch Patch06: subprocess-raise-timeout.patch
# PATCH-FEATURE-UPSTREAM bpo-31046_ensurepip_honours_prefix.patch bpo#31046 mcepl@suse.com # PATCH-FEATURE-UPSTREAM bpo-31046_ensurepip_honours_prefix.patch bpo#31046 mcepl@suse.com
@@ -222,6 +225,16 @@ Patch40: fix-test-recursion-limit-15.6.patch
# PATCH-FIX-SLE doc-py38-to-py36.patch mcepl@suse.com # PATCH-FIX-SLE doc-py38-to-py36.patch mcepl@suse.com
# Make documentation extensions working with Python 3.6 # Make documentation extensions working with Python 3.6
Patch41: doc-py38-to-py36.patch Patch41: doc-py38-to-py36.patch
# PATCH-FIX-UPSTREAM gh126985-mv-pyvenv.cfg2getpath.patch mcepl@suse.com
# Remove tests failing in test_sysconfig
Patch42: gh126985-mv-pyvenv.cfg2getpath.patch
# PATCH-FIX-UPSTREAM bsc1243155-sphinx-non-determinism.patch bsc#1243155 mcepl@suse.com
# Doc: Generate ids for audit_events using docname
Patch43: bsc1243155-sphinx-non-determinism.patch
# PATCH-FIX-UPSTREAM gh138131-exclude-pycache-from-digest.patch bsc#1244680 daniel.garcia@suse.com
Patch44: gh138131-exclude-pycache-from-digest.patch
# PATCH-FIX-OPENSUSE gh139257-Support-docutils-0.22.patch gh#python/cpython#139257 daniel.garcia@suse.com
Patch45: gh139257-Support-docutils-0.22.patch
BuildRequires: autoconf-archive BuildRequires: autoconf-archive
BuildRequires: automake BuildRequires: automake
BuildRequires: fdupes BuildRequires: fdupes
@@ -258,7 +271,9 @@ BuildRequires: python3-Sphinx >= 4.0.0
%if 0%{?suse_version} >= 1500 %if 0%{?suse_version} >= 1500
BuildRequires: python3-python-docs-theme >= 2022.1 BuildRequires: python3-python-docs-theme >= 2022.1
%endif %endif
%if 0%{?suse_version} < 1599
BuildRequires: python3-dataclasses
%endif
%endif %endif
%endif %endif
# end of {with doc} # end of {with doc}
@@ -274,8 +289,6 @@ ExcludeArch: aarch64
%endif %endif
%if %{with general} %if %{with general}
# required for idle3 (.desktop and .appdata.xml files)
BuildRequires: appstream-glib
BuildRequires: gcc-c++ BuildRequires: gcc-c++
BuildRequires: gdbm-devel BuildRequires: gdbm-devel
BuildRequires: gettext BuildRequires: gettext
@@ -313,7 +326,7 @@ Installing "python3" is sufficient for the vast majority of usecases.
In addition, recommended packages provide UI toolkit support (python3-curses, In addition, recommended packages provide UI toolkit support (python3-curses,
python3-tk), legacy UNIX database bindings (python3-dbm), and the IDLE python3-tk), legacy UNIX database bindings (python3-dbm), and the IDLE
development environment (python3-idle). development environment (python3-idle).
%if %{with GIL} %if %{without GIL}
This package has been built with the Global Interpreter Lock removed. This package has been built with the Global Interpreter Lock removed.
This feature is still considered to be experimental. This package is This feature is still considered to be experimental. This package is
@@ -434,7 +447,7 @@ This package contains the interpreter core and most commonly used modules
from the standard library. This is sufficient for many usecases, but it from the standard library. This is sufficient for many usecases, but it
excludes components that depend on external libraries, most notably XML, excludes components that depend on external libraries, most notably XML,
database and UI toolkits support. database and UI toolkits support.
%if %{with GIL} %if %{without GIL}
This package has been built with the Global Interpreter Lock removed. This package has been built with the Global Interpreter Lock removed.
This feature is still considered to be experimental. This package is This feature is still considered to be experimental. This package is
@@ -542,7 +555,7 @@ rm Lib/site-packages/README.txt
tar xvf %{SOURCE21} tar xvf %{SOURCE21}
# Don't fail on warnings when building documentation # Don't fail on warnings when building documentation
# sed -i -e '/^SPHINXERRORHANDLING/s/-W//' Doc/Makefile sed -i -e '/^SPHINXERRORHANDLING/s/--fail-on-warning//' Doc/Makefile
%build %build
export SUSE_VERSION="0%{?suse_version}" export SUSE_VERSION="0%{?suse_version}"
@@ -554,7 +567,7 @@ TODAY_DATE=`date -r %{SOURCE0} "+%%B %%d, %%Y"`
cd Doc cd Doc
sed -i "s/^today = .*/today = '$TODAY_DATE'/" conf.py sed -i "s/^today = .*/today = '$TODAY_DATE'/" conf.py
%make_build -j1 html %make_build -j1 JOBS=1 html
# Build also devhelp files # Build also devhelp files
sphinx-build -a -b devhelp . build/devhelp sphinx-build -a -b devhelp . build/devhelp
@@ -656,12 +669,6 @@ EXCLUDE="$EXCLUDE test_external_inspection test_faulthandler test_os test_posix
# done have any such interface breaking the uuid module. # done have any such interface breaking the uuid module.
EXCLUDE="$EXCLUDE test_uuid" EXCLUDE="$EXCLUDE test_uuid"
# bsc#1195140 and bpo#37169 - test_capi is failing on openSUSE, and not sure why
EXCLUDE="$EXCLUDE test_capi"
# Failing tests on python 3.13
EXCLUDE="$EXCLUDE test_regrtest test_sysconfig"
# Limit virtual memory to avoid spurious failures # Limit virtual memory to avoid spurious failures
if test $(ulimit -v) = unlimited || test $(ulimit -v) -gt 10000000; then if test $(ulimit -v) = unlimited || test $(ulimit -v) -gt 10000000; then
ulimit -v 11000000 || : ulimit -v 11000000 || :
@@ -773,7 +780,6 @@ install -m 644 -D -t %{buildroot}%{_datadir}/applications idle%{python_abi}.desk
cp %{SOURCE20} idle%{python_abi}.appdata.xml cp %{SOURCE20} idle%{python_abi}.appdata.xml
sed -i -e 's:idle3.desktop:idle%{python_abi}.desktop:g' idle%{python_abi}.appdata.xml sed -i -e 's:idle3.desktop:idle%{python_abi}.desktop:g' idle%{python_abi}.appdata.xml
install -m 644 -D -t %{buildroot}%{_datadir}/metainfo idle%{python_abi}.appdata.xml install -m 644 -D -t %{buildroot}%{_datadir}/metainfo idle%{python_abi}.appdata.xml
appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/idle%{python_abi}.appdata.xml
%fdupes %{buildroot}/%{_libdir}/python%{python_abi} %fdupes %{buildroot}/%{_libdir}/python%{python_abi}
%endif %endif

View File

@@ -1,16 +1,19 @@
--- ---
Lib/test/test_subprocess.py | 3 ++- Lib/test/test_subprocess.py | 6 +++++-
1 file changed, 2 insertions(+), 1 deletion(-) 1 file changed, 5 insertions(+), 1 deletion(-)
--- a/Lib/test/test_subprocess.py --- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py +++ b/Lib/test/test_subprocess.py
@@ -280,7 +280,8 @@ class ProcessTestCase(BaseTestCase): @@ -292,7 +292,11 @@ class ProcessTestCase(BaseTestCase):
"time.sleep(3600)"], output = subprocess.check_output(
# Some heavily loaded buildbots (sparc Debian 3.x) require [sys.executable, "-c",
# this much time to start and print. "import time; time.sleep(3600)"],
- timeout=3) - timeout=0.1)
+ # OBS might require even more + # Some heavily loaded buildbots (sparc Debian 3.x) require
+ timeout=10) + # this much time to start and print.
self.fail("Expected TimeoutExpired.") + # timeout=3)
self.assertEqual(c.exception.output, b'BDFL') + # OBS might require even more
+ timeout=10)
def test_call_kwargs(self):
# call() function with keyword args