◐ Shell
clean mode source ↗

Update hashlib to Python 3.14.2 by Copilot · Pull Request #6862 · RustPython/RustPython

Updates hashlib module and tests to Python 3.14.2 compatibility.

Changes

  • Updated Lib/hashlib.py and Lib/test/test_hashlib.py from CPython v3.14.2 using update_lib tooling, preserving 10 RustPython TODO markers

  • Created _sha2 module (crates/stdlib/src/sha2.rs): Python 3.14 consolidated _sha256 and _sha512 into a single _sha2 module providing all SHA-2 family functions (sha224, sha256, sha384, sha512)

  • Added openssl_md_meth_names attribute to _hashlib module: Returns frozenset of available hash algorithms, required by Python 3.14's hashlib.py to populate algorithms_available

Test Status

82 tests run: 8 expected failures (matching TODO markers), 2 TODO tests skipped (urlfetch disabled), 15 platform/resource skips.

Original prompt

This section details on the original issue you should resolve

<issue_title>Upgrade Python libraries and test from Python 3.14</issue_title>
<issue_description>## Summary

Check scripts/update_lib for tools. As a note, the current latest Python version is v3.14.2.

Previous versions' issues as reference

Details

2026-01-24

$ python3 scripts/update_lib todo  --done
  • [no deps] types (40 dependents)
    • test_types (10 TODO)
  • [no deps] struct (17 dependents)
    • test_struct (4 TODO)
  • [no deps] stat (14 dependents)
    • test_stat
  • [no deps] operator (13 dependents)
    • test_operator (3 TODO)
  • [no deps] linecache (9 dependents)
    • test_linecache
  • [no deps] keyword (8 dependents)
    • test_keyword
  • [no deps] codecs (8 dependents)
    • test_codecs (98 TODO)
  • [no deps] future (6 dependents)
  • [no deps] copyreg (6 dependents)
    • test_copyreg
  • [no deps] reprlib (6 dependents)
    • test_reprlib (4 TODO)
  • [no deps] bisect (5 dependents)
    • test_bisect
  • [no deps] token (5 dependents)
  • [no deps] string (5 dependents)
    • test_string
  • [no deps] heapq (4 dependents)
    • test_heapq
  • [no deps] hashlib (2 dependents)
    • test_hashlib (10 TODO)
  • [no deps] hmac (2 dependents)
    • test_hmac (18 TODO)
  • [no deps] quopri (2 dependents)
    • test_quopri
  • [no deps] _sitebuiltins (2 dependents)
  • [no deps] _compat_pickle (1 dependents)
  • [no deps] _opcode_metadata (1 dependents)
  • [no deps] mimetypes (1 dependents)
    • test_mimetypes
  • [no deps] cmd (1 dependents)
    • test_cmd
  • [no deps] stringprep (1 dependents)
    • test_stringprep
  • [no deps] tty (1 dependents)
    • test_tty (2 TODO)
  • [no deps] hello
  • [no deps] phello
  • [no deps] colorsys
    • test_colorsys
  • [no deps] this
  • [no deps] _ios_support
  • [no deps] pydoc_data
  • [no deps] timeit
    • test_timeit
  • [no deps] zipimport
    • test_zipimport (2 TODO)
  • [0/3 deps] os (76 dependents)
    • test_os (18 TODO)
  • [0/4 deps] collections (32 dependents)
    • test_collections (3 TODO)
  • [0/1 deps] warnings (23 dependents)
    • test_warnings (40 TODO)
  • [0/1 deps] enum (17 dependents)
    • test_enum (15 TODO)
  • [0/1 deps] datetime (13 dependents)
    • test_datetime
  • [0/1 deps] _collections_abc (9 dependents)
  • [0/1 deps] base64 (8 dependents)
    • test_base64
  • [0/1 deps] textwrap (6 dependents)
    • test_textwrap
  • [0/1 deps] _weakrefset (4 dependents)
  • [0/2 deps] codeop (3 dependents)
    • test_codeop (5 TODO)
  • [0/1 deps] numbers (3 dependents)
  • [0/1 deps] contextvars (3 dependents)
  • [0/3 deps] decimal (2 dependents)
    • test_decimal (2 TODO)
  • [0/1 deps] _markupbase (1 dependents)
  • [0/1 deps] ipaddress (1 dependents)
    • test_ipaddress
  • [0/4 deps] fractions (1 dependents)
    • test_fractions (1 TODO)
  • [0/4 deps] rlcompleter (1 dependents)
    • test_rlcompleter (1 TODO)
  • [0/1 deps] graphlib
    • test_graphlib
  • [0/1 deps] nturl2path
    • test_nturl2path
  • [0/2 deps] sre_compile
  • [0/2 deps] sre_constants
  • [0/2 deps] sre_parse
  • [1/3 deps] re (45 dependents)
    • test_re (19 TODO)
  • [1/5 deps] functools (33 dependents)
    • test_functools (11 TODO)
  • [1/1 deps] abc (15 dependents)
    • test_abc (1 TODO)
  • [1/2 deps] weakref (14 dependents)
    • test_weakref (28 TODO)
  • [1/3 deps] copy (9 dependents)
    • test_copy
  • [1/2 deps] ast (7 dependents)
    • test_ast (104 TODO)
  • [1/1 deps] signal (6 dependents)
    • test_signal (3 TODO)
  • [1/3 deps] posixpath (6 dependents)
    • test_posixpath (4 TODO)
  • [1/4 deps] random (6 dependents)
    • test_random
  • [1/6 deps] typing (6 dependents)
    • test_typing (21 TODO)
  • [1/8 deps] dataclasses (5 dependents)
    • test_dataclasses (10 TODO)
  • [1/4 deps] queue (4 dependents)
    • test_queue
  • [1/4 deps] json (4 dependents)
    • test_json (18 TODO)
  • [1/2 deps] selectors (4 dependents)
    • test_selectors
  • [1/2 deps] gettext (3 dependents)
    • test_gettext (7 TODO)
  • [1/1 deps] shlex (3 dependents)
    • test_shlex (4 TODO)
  • [1/3 deps] locale (3 dependents)
    • test_locale
  • [1/3 deps] difflib (2 dependents)
    • test_difflib
  • [1/2 deps] genericpath (2 dependents)
    • test_genericpath (1 TODO)
  • [1/2 deps] html (2 dependents)
    • test_html
  • [1/3 deps] site (2 dependents)
    • test_site (5 TODO)
  • [1/3 deps] filecmp (1 dependents)
    • test_filecmp
  • [1/2 deps] ntpath (1 dependents)
    • test_ntpath
  • [1/1 deps] opcode (1 dependents)
  • [1/1 deps] pyclbr (1 dependents)
    • test_pyclbr (3 TODO)
      -...

💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.