cpython/Lib
Stan Ulbrych 8a598fb623
[3.12] gh-82045: Correct and deduplicate "isprintable" docs; add test. (GH-130125)
We had the definition of what makes a character "printable" documented in three places, giving two different definitions.
The definition in the comment on `_PyUnicode_IsPrintable` was inverted; correct that.

With that correction, the two definitions turn out to be equivalent -- but to confirm that, you have to go look up, or happen to know, that those are the only five "Other" categories and only three "Separator" categories in the Unicode character database.  That makes it hard for the reader to tell whether they really are the same, or if there's some subtle difference in the intended semantics.

Fix that by cutting the C API docs' and the C comment's copies of the subtle details, in favor of referring to the Python-level docs. That ensures it's explicit that these are all meant to agree, and also lets us concentrate improvements to the wording in one place.

Speaking of which, borrow some ideas from the C comment, along with other tweaks, to hopefully add a bit more clarity to that one newly-centralized copy in the docs.

Also add a thorough test that the implementation agrees with this definition.

Co-authored-by: Greg Price <gnprice@gmail.com>
(cherry picked from commit 3402e133ef)
2025-02-17 14:07:59 +01:00
..
__phello__
asyncio [3.12] gh-115514: Fix incomplete writes after close while using ssl in asyncio(GH-128037) (#129582) 2025-02-02 15:47:37 +00:00
collections [3.12] gh-117387 Remove hash mark from introductory text (GH-117409) (#gh- 2024-03-31 21:24:28 +00:00
concurrent [3.12] gh-88110: Clear concurrent.futures.thread._threads_queues after fork to avoid joining parent process' threads (GH-126098) (GH-127164) 2024-11-30 09:05:46 +00:00
ctypes [3.12] gh-87969: Align docs and docstrings with implementation for ctypes' [w]string_at() (GH-25384) (GH-118046) 2024-04-19 13:23:26 +02:00
curses
dbm
email [3.12] gh-80222: Fix email address header folding with long quoted-string (GH-122753) (#129008) 2025-01-19 16:07:39 -05:00
encodings
ensurepip [3.12] gh-126188: Update bundled pip to 24.3.1 (gh-126805) (gh-126813) 2024-11-13 23:42:54 +00:00
html
http [3.12] gh-112064: Fix incorrect handling of negative read sizes in HTTPResponse.read() (GH-128270) (#129396) 2025-01-28 11:54:27 +00:00
idlelib [3.12] gh-68400: Remove outdated 2.7 comment (GH-129919) (#129938) 2025-02-10 05:10:02 +00:00
importlib [3.12] gh-97850: Update the deprecation warning of importlib.abc.Loader.load_module (GH-129855) (GH-130017) 2025-02-11 15:31:44 -08:00
json [3.12] gh-125660: Reject invalid unicode escapes for Python implementation of JSON decoder (GH-125683) (GH-125695) 2024-10-21 16:08:10 +03:00
lib2to3
logging [3.12] gh-127712: Fix secure argument of logging.handlers.SMTPHandler (GH-127726) (GH-129956) 2025-02-10 14:29:57 +00:00
msilib
multiprocessing [3.12] remove type annotations from multiprocessing. (GH-129381) (#129471) 2025-01-30 09:08:31 +00:00
pydoc_data Python 3.12.9 2025-02-04 15:38:38 +01:00
re [3.12] gh-126505: Fix bugs in compiling case-insensitive character classes (GH-126557) (GH-126690) 2024-11-11 16:47:37 +00:00
site-packages
sqlite3 [3.12] gh-118221: Always use the default row factory in sqlite3.iterdump() (#118223) (#118270) 2024-04-25 08:33:35 +00:00
test [3.12] gh-82045: Correct and deduplicate "isprintable" docs; add test. (GH-130125) 2025-02-17 14:07:59 +01:00
tkinter [3.12] gh-128562: Fix generation of the tkinter widget names (GH-128604) (GH-128792) 2025-01-13 18:23:53 +02:00
tomllib
turtledemo [3.12] [3.13] gh-123370: Fix the canvas not clearing after running turtledemo.clock (gh-123457) (GH-125653) (#125656) 2024-10-17 17:09:05 +00:00
unittest [3.12] bpo-46128: Strip IsolatedAsyncioTestCase frames from reported stacktraces (GH-30196) (#126771) 2024-11-13 09:20:47 +00:00
urllib [3.12] gh-105704: Disallow square brackets ([ and ]) in domain names for parsed URLs (GH-129418) (GH-129527) 2025-02-02 08:30:28 +00:00
venv [3.12] gh-124651: Quote template strings in venv activation scripts (GH-124712) (GH-126185) 2024-10-31 18:09:20 +00:00
wsgiref
xml [3.12] gh-128302: Fix bugs in xml.dom.xmlbuilder (GH-128284) (#128583) 2025-01-11 13:30:29 +02:00
xmlrpc
zipfile [3.12] GH-128131: Completely support random read access of uncompressed unencrypted files in ZipFile (GH-128143) (#129092) 2025-01-20 20:40:28 +00:00
zoneinfo [3.12] gh-106233: Fix stacklevel in zoneinfo.InvalidTZPathWarning (GH-106234) (GH-115081) 2024-02-06 13:26:39 +00:00
__future__.py
__hello__.py
_aix_support.py
_collections_abc.py [3.12] gh-116938: Clarify documentation of dict and dict.update regarding the positional argument they accept (GH-125213) (#125337) 2024-10-11 23:23:54 +00:00
_compat_pickle.py
_compression.py
_markupbase.py
_osx_support.py [3.12] gh-102362: Fix macOS version number in result of sysconfig.get_platform() (GH-112942) (#113264) 2023-12-19 19:51:17 +01:00
_py_abc.py
_pydatetime.py [3.12] gh-127553: Remove outdated TODO comment in _pydatetime (GH-127564) (#128501) 2025-01-04 22:55:24 +00:00
_pydecimal.py [3.12] Fix typos in Lib/_pydecimal.py (GH-127700) (#127888) 2024-12-12 20:45:20 +00:00
_pyio.py [3.12] gh-95782: Fix io.BufferedReader.tell() etc. being able to return offsets < 0 (GH-99709) (GH-115599) 2024-02-17 14:56:00 +02:00
_pylong.py [3.12] gh-118164: Break a loop between _pydecimal and _pylong and optimize int to str conversion (GH-118483) (GH-118590) 2024-05-06 12:10:05 +03:00
_sitebuiltins.py
_strptime.py [3.12] gh-127552: Remove comment questioning 4-digit restriction for ‘Y’ in datetime.strptime patterns (GH-127590) (#127649) 2024-12-10 09:20:54 +01:00
_threading_local.py
_weakrefset.py
abc.py
aifc.py
antigravity.py
argparse.py [3.12] gh-125355: Rewrite parse_intermixed_args() in argparse (GH-125356) (GH-125839) 2024-10-22 13:23:30 +00:00
ast.py [3.12] gh-127975: Avoid reusing quote types in ast.unparse if not needed (GH-127980) (#129601) 2025-02-02 22:58:22 +00:00
base64.py [3.12] Clarify base64.a85encode docs: *wrapcols* doesn't count the newline (GH-119409) (GH-119482) 2024-05-28 16:55:43 +02:00
bdb.py [3.12] gh-58956: Set f_trace on frames with breakpoints after setting a new breakpoint (GH-124454) (#125549) 2025-01-25 15:12:19 -05:00
bisect.py
bz2.py
calendar.py [3.12] gh-126476: Raise IllegalMonthError for calendar.formatmonth() when the input month is not correct (GH-126484) (GH-126878) 2024-11-15 15:20:10 -08:00
cgi.py
cgitb.py
chunk.py
cmd.py
code.py [3.12] gh-122478: Remove internal frames from tracebacks in REPL (GH-122528) (GH-122816) 2024-08-23 09:27:03 +03:00
codecs.py [3.12] gh-50644: Forbid pickling of codecs streams (GH-109180) (#109231) 2023-10-02 16:55:52 +02:00
codeop.py [3.12] gh-111366: Correctly show custom syntax error messages in the codeop module functions (GH-111384). (#111517) 2023-10-30 19:53:01 +00:00
colorsys.py [3.12] gh-121905: Consistently use "floating-point" instead of "floating point" (GH-121907) (GH-122013) 2024-07-19 09:08:33 +00:00
compileall.py
configparser.py [3.12] gh-116957: configparser: Do post-process values after DuplicateOptionError (GH-116958) (GH-117013) 2024-03-19 18:18:50 +01:00
contextlib.py [3.12] gh-103791: handle BaseExceptionGroup in contextlib.suppress() (GH-111910) (#111955) 2023-11-10 14:00:48 +00:00
contextvars.py [3.12] gh-126451: Revert backports of ABC registrations for contextvars.Context and multiprocessing proxies (#126735) 2024-11-12 12:26:23 +00:00
copy.py
copyreg.py
cProfile.py
crypt.py
csv.py
dataclasses.py [3.12] gh-123935: Fix typo in _get_slots in dataclasses.py (GH-123941) (#123992) 2024-09-12 07:48:01 +00:00
datetime.py
decimal.py [3.12] gh-121905: Consistently use "floating-point" instead of "floating point" (GH-121907) (GH-122013) 2024-07-19 09:08:33 +00:00
difflib.py
dis.py [3.12] gh-127637: add tests for dis command-line interface (#127759) (#127780) 2025-01-18 12:01:56 +01:00
doctest.py [3.12] gh-117692: Fix AttributeError in DocTestFinder on wrapped builtin_or_method (GH-117699) (#117708) 2024-04-10 14:17:15 +00:00
enum.py [3.12] gh-125259: Fix error notes removal in enum initialization (GH-125647) (GH-125953) 2024-10-25 16:03:52 -07:00
filecmp.py [3.12] gh-122400: Handle ValueError in filecmp (GH-122401) (GH-122442) 2024-07-30 09:07:06 +00:00
fileinput.py
fnmatch.py
fractions.py [3.12] gh-119189: Fix the power operator for Fraction (GH-119242) (GH-119835) 2024-07-16 10:44:05 +03:00
ftplib.py [3.12] gh-114241: Fix and improve the ftplib CLI (GH-114242) (GH-114404) 2024-01-21 20:48:12 +00:00
functools.py [3.12] gh-127537: Add __class_getitem__ to the python implementation of functools.partial (#127537) (#128282) 2024-12-27 01:25:07 +00:00
genericpath.py
getopt.py
getpass.py
gettext.py [3.12] gh-110519: Improve deprecation warning in the gettext module (GH-110520) (GH-110563) 2023-10-09 16:27:01 +02:00
glob.py [3.12] gh-79382: Fix recursive glob() with trailing "**" (GH-115134) (GH-115290) 2024-02-11 10:57:40 +00:00
graphlib.py [3.12] gh-129892: Doc: Remove unnecessary role directive in graphlib.py (GH-129896) (#129905) 2025-02-09 15:39:23 +00:00
gzip.py [3.12] gh-108111: Flush gzip write buffer before seeking, fixing bad writes (GH-108341) (#108402) 2023-08-24 12:30:16 +02:00
hashlib.py
heapq.py
hmac.py [3.12] gh-112999: Replace the outdated "deprecated" directives with "versionchanged" (GH-113000) (GH-113019) 2023-12-12 17:20:51 +00:00
imaplib.py [3.12] gh-119511: Fix a potential denial of service in imaplib (GH-119514) (GH-129356) 2025-01-27 14:06:14 -08:00
imghdr.py
inspect.py [3.12] gh-70764: inspect.getclosurevars now identifies global variables with LOAD_GLOBAL (GH-120143) (#126460) 2024-11-06 00:12:08 +00:00
io.py gh-111356: io: Add missing documented objects to io.__all__ (GH-111370) 2023-11-10 07:37:19 +00:00
ipaddress.py [3.12] gh-124217, ipaddress: Add RFC 9637 reserved IPv6 block 3fff::/20 (GH-124240) (#124283) 2024-09-20 14:20:27 +02:00
keyword.py
linecache.py [3.12] gh-126775: make linecache.checkcache threadsafe and GC re-entrency safe (GH-126776) (#127779) 2024-12-10 08:02:22 +00:00
locale.py [3.12] gh-91565: Replace bugs.python.org links with Devguide/GitHub ones (GH-91568) (GH-117890) 2024-04-15 12:59:34 +00:00
lzma.py
mailbox.py [3.12] gh-117467: Add preserving of mailbox owner on flush (GH-117510) (GH-117537) 2024-04-04 10:55:42 +00:00
mailcap.py
mimetypes.py gh-128703: Fix mimetypes.guess_type for empty Content-Type in registry (GH-128854) 2025-02-14 17:45:28 +00:00
modulefinder.py
netrc.py
nntplib.py
ntpath.py gh-119826: Improved fallback for ntpath.abspath() on Windows (GH-119938) 2024-12-02 20:03:44 +00:00
nturl2path.py [3.12] GH-127078: url2pathname(): handle extra slash before UNC drive in URL path (GH-127132) (#127136) 2024-11-22 04:37:51 +00:00
numbers.py
opcode.py
operator.py
optparse.py
os.py [3.12] GH-89727: Fix FD leak on os.fwalk() generator finalization. (GH-119766) (#119768) 2024-05-30 05:30:37 +01:00
pathlib.py [3.12] GH-125069: Fix inconsistent joining in WindowsPath(PosixPath(...)) (GH-125156) (#125410) 2024-10-13 18:18:41 +00:00
pdb.py [3.12] gh-58956: Fix a frame refleak in bdb (GH-128190) (#128953) 2025-01-17 14:19:37 -05:00
pickle.py [3.12] gh-126489: Do not call persistent_id() for a persistent id in Python pickle (GH-126490) (GH-126516) 2024-11-06 21:11:37 +00:00
pickletools.py [3.12] gh-126997: Fix support of non-ASCII strings in pickletools (GH-127062) (GH-127095) 2024-11-21 11:32:16 +00:00
pipes.py
pkgutil.py
platform.py gh-127732: Add Windows Server 2025 detection to platform module (GH-127733) 2024-12-09 12:42:37 +00:00
plistlib.py
poplib.py [3.12] Give poplib.POP3.rpop a proper docstring (GH-127370) (#127722) 2024-12-07 16:33:04 +00:00
posixpath.py gh-118263: Add additional arguments to path_t (Argument Clinic type) in posixmodule (GH-119608) 2024-05-28 11:13:01 +01:00
pprint.py [3.12] [pprint]: Add docstring about PrettyPrinter.underscore_numbers parameter (GH-112963) (#113053) 2023-12-13 12:38:07 +00:00
profile.py
pstats.py [3.12] gh-121905: Consistently use "floating-point" instead of "floating point" (GH-121907) (GH-122013) 2024-07-19 09:08:33 +00:00
pty.py
py_compile.py
pyclbr.py
pydoc.py [3.12] gh-128772: Fix pydoc for methods with __module__ is None (GH-129177) (GH-129654) 2025-02-04 14:44:02 +00:00
queue.py
quopri.py
random.py [3.12] gh-109653: Reduce the import time of random by 60% (GH-110221) (#110247) 2023-10-02 23:31:55 +00:00
reprlib.py [3.12] gh-113570: reprlib.repr does not use builtin __repr__ for reshadowed builtins (GH-113577) (GH-125655) 2024-10-17 16:59:01 +00:00
rlcompleter.py
runpy.py [3.12] gh-99437: runpy: decode path-like objects before setting globals (#114838) 2024-08-12 11:22:13 +03:00
sched.py [3.12] gh-121905: Consistently use "floating-point" instead of "floating point" (GH-121907) (GH-122013) 2024-07-19 09:08:33 +00:00
secrets.py
selectors.py [3.12] gh-110038: KqueueSelector must count all read/write events (GH-110039) (#110043) 2023-10-02 17:42:55 +02:00
shelve.py
shlex.py
shutil.py [3.12] gh-127001: Fix PATHEXT issues in shutil.which() on Windows (GH-127035) (GH-127158) 2024-11-22 16:33:50 +00:00
signal.py [3.12] gh-112559: Avoid unnecessary conversion attempts to enum_klass in signal.py (GH-113040) (#113443) 2023-12-23 18:09:59 -08:00
site.py [3.12] gh-126911: Update credits output (GH-126913) (#126974) 2024-11-18 15:58:22 +00:00
smtplib.py
sndhdr.py
socket.py [3.12] gh-128916: Do not set SO_REUSEPORT on non-AF_INET* sockets (GH-128933) (#128970) 2025-01-18 01:06:45 +00:00
socketserver.py [3.12] gh-128916: Do not set SO_REUSEPORT on non-AF_INET* sockets (GH-128933) (#128970) 2025-01-18 01:06:45 +00:00
sre_compile.py
sre_constants.py
sre_parse.py
ssl.py [3.12] gh-79846: Make ssl.create_default_context() ignore invalid certificates (GH-91740) (#122769) 2024-08-09 12:55:36 -04:00
stat.py
statistics.py [3.12] gh-121905: Consistently use "floating-point" instead of "floating point" (GH-121907) (GH-122013) 2024-07-19 09:08:33 +00:00
string.py
stringprep.py
struct.py
subprocess.py [3.12] gh-118761: Revert "Improve import time of subprocess (GH-129427)" (GH-130201) (#130205) 2025-02-16 18:56:18 +00:00
sunau.py
symtable.py [3.12] gh-119698: fix a special case in symtable.Class.get_methods (GH-121802) (#121910) 2024-07-17 22:32:29 +00:00
sysconfig.py [3.12] gh-128696: Add arm64 to the get_platform return val description (GH-128701) (#128773) 2025-02-04 00:29:16 +01:00
tabnanny.py [3.12] gh-120495: Fix incorrect exception handling in Tab Nanny (GH-120498) (#120549) 2024-06-15 11:21:05 +00:00
tarfile.py [3.12] gh-121285: Remove backtracking when parsing tarfile headers (GH-121286) (GH-123543) 2024-08-31 22:35:24 +00:00
telnetlib.py [3.12] gh-118042: Fix error in Telnet.__del__ when __init__() was not called (GH-118274) 2024-04-26 08:53:54 +03:00
tempfile.py [3.12] gh-79325: Fix recursion error in TemporaryDirectory cleanup on Windows (GH-112762) (GH-112847) 2023-12-07 17:36:29 +00:00
textwrap.py
this.py
threading.py [3.12] gh-129403: Fix ValueError messages in asyncio.Barrier and threading.Barrier (GH-129419) (#129469) 2025-01-30 08:28:06 +00:00
timeit.py [3.12] gh-105052:update timeit function's description (GH-105060) (#108534) 2023-08-27 16:15:01 +02:00
token.py [3.12] gh-127303: Add docs for token.EXACT_TOKEN_TYPES (GH-127304) (#127391) 2024-11-29 09:22:27 +00:00
tokenize.py [3.12] gh-128519: Align the docstring of untokenize() to match the docs (GH-128521) (#128532) 2025-01-06 08:59:24 +00:00
trace.py [3.12] gh-103956: Fix trace output in case of missing source line (GH-103958) (GH-118832) 2024-05-09 12:51:03 +00:00
traceback.py [3.12] gh-113358: Fix rendering tracebacks with exceptions with a broken __getattr__ (GH-113359) (#114173) 2024-01-21 17:12:17 +00:00
tracemalloc.py
tty.py [3.12] gh-114328: tty cbreak mode should not alter ICRNL (GH-114335) (#114410) 2024-01-21 23:41:03 +00:00
turtle.py [3.12] Fix print usage in turtle doctests (GH-122940) (#122978) 2024-08-13 16:58:37 +00:00
types.py [3.12] gh-107576: Ensure __orig_bases__ are our own in get_original_bases (GH-107584) (#107592) 2023-08-03 17:07:43 +02:00
typing.py [3.12] gh-88834: Unify the instance check for typing.Union and types.UnionType (GH-128363) (GH-128371) 2024-12-31 08:19:45 +00:00
uu.py
uuid.py
warnings.py [3.12] gh-117535: Ignore made up file name "sys" for warnings (#118014) 2024-04-19 04:07:05 +00:00
wave.py
weakref.py
webbrowser.py [3.12] gh-123494: Improve documentation for `webbrowser` return types (GH-123495) (#123549) 2024-09-01 05:36:18 +00:00
xdrlib.py
zipapp.py
zipimport.py [3.12] gh-121735: Fix module-adjacent references in zip files (gh-123037) (#124011) 2024-09-24 10:19:43 -07:00