cpython/Lib
Ethan Furman 7aaeb2a3d6
bpo-38250: [Enum] single-bit flags are canonical (GH-24215)
Flag members are now divided by one-bit verses multi-bit, with multi-bit being treated as aliases. Iterating over a flag only returns the contained single-bit flags.

Iterating, repr(), and str() show members in definition order.

When constructing combined-member flags, any extra integer values are either discarded (CONFORM), turned into ints (EJECT) or treated as errors (STRICT). Flag classes can specify which of those three behaviors is desired:

>>> class Test(Flag, boundary=CONFORM):
...     ONE = 1
...     TWO = 2
...
>>> Test(5)
<Test.ONE: 1>

Besides the three above behaviors, there is also KEEP, which should not be used unless necessary -- for example, _convert_ specifies KEEP as there are flag sets in the stdlib that are incomplete and/or inconsistent (e.g. ssl.Options). KEEP will, as the name suggests, keep all bits; however, iterating over a flag with extra bits will only return the canonical flags contained, not the extra bits.

Iteration is now in member definition order.  If member definition order
matches increasing value order, then a more efficient method of flag
decomposition is used; otherwise, sort() is called on the results of
that method to get definition order.


``re`` module:

repr() has been modified to support as closely as possible its previous
output; the big difference is that inverted flags cannot be output as
before because the inversion operation now always returns the comparable
positive result; i.e.

   re.A|re.I|re.M|re.S is ~(re.L|re.U|re.S|re.T|re.DEBUG)

in both of the above terms, the ``value`` is 282.

re's tests have been updated to reflect the modifications to repr().
2021-01-25 14:26:19 -08:00
..
asyncio bpo-41891: ensure asyncio.wait_for waits for task completion (#22461) 2020-12-18 09:26:04 -08:00
collections bpo-37324: Remove ABC aliases from collections (GH-23754) 2021-01-13 00:16:37 +01:00
concurrent bpo-39349: Add cancel_futures to Executor.shutdown base class (GH-22023) 2020-09-01 17:18:07 -04:00
ctypes closes bpo-43011: Fix DeprecationWarnings in test_ctypes (GH-24305) 2021-01-23 10:34:01 -06:00
curses
dbm
distutils bpo-42802: Remove distutils bdist_wininst command (GH-24043) 2021-01-09 00:35:01 +01:00
email bpo-30681: Support invalid date format or value in email Date header (GH-22090) 2020-10-26 17:31:06 -07:00
encodings bpo-39337: encodings.normalize_encoding() now ignores non-ASCII characters (GH-22219) 2020-10-14 17:43:31 +02:00
ensurepip bpo-42856: Add --with-wheel-pkg-dir=PATH configure option (GH-24210) 2021-01-20 17:07:21 +01:00
html
http Fix typo in docstring (GH-23515) 2020-12-21 16:06:31 +02:00
idlelib bpo-43013: Fix old tkinter module names in idlelib (GH-24326) 2021-01-25 06:33:18 -05:00
importlib bpo-42382: In importlib.metadata, EntryPoint objects now expose dist (#23758) 2020-12-31 12:56:43 -05:00
json
lib2to3 bpo-36541: Add lib2to3 grammar PEP-570 pos-only arg parsing (GH-23759) 2020-12-14 09:10:10 -08:00
logging bpo-42644: Validate values in logging.disable() (#23786) 2020-12-16 11:43:39 +02:00
msilib
multiprocessing bpo-41344: Raise ValueError when creating shared memory of size 0 (GH-21556) 2020-08-30 20:03:11 +01:00
pydoc_data Python 3.10.0a4 2021-01-04 17:26:00 +00:00
site-packages
sqlite3 bpo-24464: Fix sqlite3.enable_shared_cache() deprecation wrapper (GH-24170) 2021-01-09 13:25:55 +02:00
test bpo-38250: [Enum] single-bit flags are canonical (GH-24215) 2021-01-25 14:26:19 -08:00
tkinter bpo-33289: Return RGB triplet of ints instead of floats from tkinter.colorchooser (GH-6578) 2021-01-21 21:14:04 +02:00
turtledemo bpo-40431: Fix syntax typo in turtledemo (GH-19777) 2020-04-29 02:00:07 +02:00
unittest bpo-42934: use TracebackException(compact=True) in unittest.TestResult (GH-24221) 2021-01-15 07:59:44 -08:00
urllib Allow / character in username,password fields in _PROXY envvars. (#23973) 2020-12-29 04:18:42 -08:00
venv bpo-35328: Set VIRTUAL_ENV_PROMPT at venv activation (GH-21587) 2020-07-28 09:41:57 +01:00
wsgiref
xml bpo-40624: Add support for the XPath != operator in xml.etree (GH-22147) 2020-11-09 08:02:39 +01:00
xmlrpc
zoneinfo bpo-41065: Use zip-strict in zoneinfo (GH-21031) 2020-06-23 10:21:26 -04:00
__future__.py bpo-41314: fixed annotations __future__ version (GH-21616) 2020-07-25 14:42:49 -07:00
__phello__.foo.py
_aix_support.py
_bootsubprocess.py bpo-40094: Add os.waitstatus_to_exitcode() (GH-19201) 2020-04-01 18:49:29 +02:00
_collections_abc.py bpo-41559: Implement PEP 612 - Add ParamSpec and Concatenate to typing (#23702) 2020-12-23 20:33:48 -08:00
_compat_pickle.py
_compression.py
_markupbase.py bpo-31844: Remove _markupbase.ParserBase.error() (GH-8562) 2020-07-16 09:13:05 +03:00
_osx_support.py bpo-41116: Ensure system supplied libraries are found on macOS 11 (GH-23301) 2020-11-22 00:14:25 -05:00
_py_abc.py
_pydecimal.py Revert "bpo-26680: Incorporate is_integer in all built-in and standard library numeric types (GH-6121)" (GH-22584) 2020-10-07 16:43:44 -07:00
_pyio.py
_sitebuiltins.py
_strptime.py
_threading_local.py
_weakrefset.py bpo-39481: Make weakref and WeakSet generic (GH-19497) 2020-04-13 21:54:40 -07:00
abc.py bpo-41905: Add abc.update_abstractmethods() (GH-22485) 2020-10-06 10:40:50 -07:00
aifc.py
antigravity.py bpo-9216: Nobody expects the geohashing FIPS inquisition (GH-19520) 2020-04-14 12:49:11 -07:00
argparse.py bpo-9694: Fix misleading phrase "optional arguments" (GH-23858) 2020-12-23 09:40:56 -08:00
ast.py bpo-28964: add line number of node (if available) to ast.literal_eval error messages (GH-23677) 2020-12-25 20:04:31 +03:00
asynchat.py
asyncore.py bpo-42427: Use the errno attribute of OSError instead of args[0] (GH-23449) 2020-11-22 10:28:34 +02:00
base64.py bpo-39068: Fix race condition in base64 (GH-17627) 2020-12-31 11:44:46 +02:00
bdb.py
binhex.py bpo-29566: binhex.binhex now consitently writes MacOS 9 line endings. (GH-23059) 2020-11-01 01:08:48 -08:00
bisect.py bpo-4356: Add key function support to the bisect module (GH-20556) 2020-10-19 22:04:01 -07:00
bz2.py bpo-40443: Remove unused imports in the stdlib (GH-19803) 2020-04-30 11:26:33 +02:00
calendar.py bpo-35078: Allow customization of CSS class name of a month in calendar module (gh-10137) 2020-06-02 13:33:09 +02:00
cgi.py Correct referenced RFC number in cgi module (GH-22827) 2020-12-16 17:34:19 -08:00
cgitb.py
chunk.py
cmd.py
code.py
codecs.py bpo-14014: Clarify StreamWriter.reset() documentation (GH-13716) 2021-01-06 04:14:42 +02:00
codeop.py bpo-41520: Fix second codeop regression (GH-21848) 2020-08-13 13:18:49 -04:00
colorsys.py bpo-42452: Improve colorsys.rgb_to_hls code (GH-23306) 2020-11-28 02:11:19 -05:00
compileall.py bpo-40495: compileall option to hardlink duplicate pyc files (GH-19901) 2020-05-14 16:17:22 +02:00
configparser.py
contextlib.py bpo-42395: Add aclosing to __all__ (GH-23356) 2020-11-17 15:18:05 -08:00
contextvars.py
copy.py bpo-40792: Make the result of PyNumber_Index() always having exact type int. (GH-20443) 2020-05-28 10:33:45 +03:00
copyreg.py bpo-41052: Fix pickling heap types implemented in C with protocols 0 and 1 (GH-22870) 2020-10-24 21:14:23 +03:00
cProfile.py bpo-42005: profile and cProfile catch BrokenPipeError (GH-22643) 2021-01-20 09:56:21 +01:00
crypt.py
csv.py
dataclasses.py bpo-41747: Ensure all dataclass methods uses their parents' qualname (GH-22155) 2020-10-21 09:49:22 -04:00
datetime.py bpo-41966: Fix pickling pure datetime.time subclasses (GH-22731) 2020-10-18 17:49:48 +03:00
decimal.py
difflib.py bpo-40394 - difflib.SequenceMatched.find_longest_match default args (GH-19742) 2020-04-29 22:42:45 -05:00
dis.py bpo-42562: Fix issue when dis failed to parse function that has no line numbers (GH-23632) 2020-12-04 15:20:53 +00:00
doctest.py bpo-42133: update parts of the stdlib to fall back to __spec__.loader when __loader__ is missing (#22929) 2020-11-06 18:45:56 -08:00
enum.py bpo-38250: [Enum] single-bit flags are canonical (GH-24215) 2021-01-25 14:26:19 -08:00
filecmp.py bpo-15450: Allow subclassing of dircmp (GH-23424) (#23424) 2020-11-23 18:29:37 +02:00
fileinput.py bpo-39481: PEP 585 for difflib, filecmp, fileinput (#19422) 2020-04-09 21:47:31 -07:00
fnmatch.py bpo-36769: Document that fnmatch.filter supports any kind of iterable (#13039) 2020-12-18 20:10:20 +01:00
fractions.py
ftplib.py bpo-39380: Change ftplib encoding from latin-1 to utf-8 (GH-18048) 2020-04-14 01:07:56 +02:00
functools.py bpo-31082: Use "iterable" in the docstring for functools.reduce() (GH-20796) 2020-06-28 15:40:54 +09:00
genericpath.py
getopt.py
getpass.py
gettext.py bpo-40275: Import locale module lazily in gettext (GH-19905) 2020-05-14 03:22:30 +02:00
glob.py bpo-38144: Re-add accidentally removed audition for glob. (GH-22805) 2020-10-20 19:45:38 +03:00
graphlib.py [doc] Fix typo in the graphlib docs (GH-22661) 2020-10-12 07:33:34 -07:00
gzip.py
hashlib.py Improve blake2 comment for Victor (GH-20981) 2020-06-19 07:11:02 -07:00
heapq.py Revert "Fix all Python Cookbook links (#22205)" (GH-22424) 2020-09-27 01:47:25 +01:00
hmac.py bpo-40791: Use CRYPTO_memcmp() for compare_digest (#20456) 2020-05-27 21:50:06 +02:00
imaplib.py bpo-26543: Fix IMAP4.noop when debug mode is enabled (GH-15206) 2020-06-02 03:17:45 +02:00
imghdr.py bpo-41043: Escape literal part of the path for glob(). (GH-20994) 2020-06-20 11:10:31 +03:00
imp.py
inspect.py bpo-42901: [Enum] move member creation to __set_name__ (GH-24196) 2021-01-12 23:47:57 -08:00
io.py
ipaddress.py bpo-41521: Replace whitelist/blacklist with allowlist/denylist (GH-21822) 2020-08-11 06:26:59 -07:00
keyword.py Delete remaining references to Grammar/Grammar from docs (#21624) 2020-07-26 08:27:52 -07:00
linecache.py bpo-42133: update parts of the stdlib to fall back to __spec__.loader when __loader__ is missing (#22929) 2020-11-06 18:45:56 -08:00
locale.py bpo-42208: Add _locale._get_locale_encoding() (GH-23052) 2020-10-31 01:32:11 +01:00
lzma.py
mailbox.py bpo-39481: PEP 585 for dataclasses, mailbox, contextvars (GH-19425) 2020-04-14 16:14:15 -07:00
mailcap.py bpo-40094: mailcap.test() uses waitstatus_to_exitcode() (GH-19287) 2020-04-02 02:00:06 +02:00
mimetypes.py bpo-41048: mimetypes should read the rule file using UTF-8, not the locale encoding (GH-20998) 2020-06-29 11:36:48 +03:00
modulefinder.py bpo-40443: Remove unused imports in the stdlib (GH-19803) 2020-04-30 11:26:33 +02:00
netrc.py
nntplib.py bpo-39305: Update nntplib to merge nntplib.NNTP and nntplib._NNTPBase (GH-19817) 2020-05-16 19:31:54 +09:00
ntpath.py
nturl2path.py
numbers.py Revert "bpo-26680: Incorporate is_integer in all built-in and standard library numeric types (GH-6121)" (GH-22584) 2020-10-07 16:43:44 -07:00
opcode.py bpo-42246: Make sure that f_lasti, and thus f_lineno, is set correctly after raising or reraising an exception (GH-23803) 2020-12-17 13:55:28 +00:00
operator.py
optparse.py
os.py bpo-31904: Disable os.popen and popen test cases on VxWorks (GH-21687) 2020-12-15 22:20:07 +01:00
pathlib.py Added support for negative indexes to PurePath.parents (GH-21799) 2020-11-23 15:06:22 -05:00
pdb.py bpo-42384: pdb: correctly populate sys.path[0] (GH-23338) 2021-01-21 17:19:51 -08:00
pickle.py bpo-42406: Fix whichmodule() with multiprocessing (GH-23403) 2020-11-29 10:23:15 -08:00
pickletools.py
pipes.py
pkgutil.py bpo-41006: pkgutil imports lazily re (GH-20939) 2020-06-17 19:11:50 +02:00
platform.py handle empty string in variable executable in platform.libc_ver() (#23140) 2021-01-02 17:03:53 +01:00
plistlib.py bpo-42249: Fix writing binary Plist files larger than 4 GiB. (GH-23121) 2020-11-03 16:15:56 +02:00
poplib.py
posixpath.py bpo-31904: posixpath.expanduser() handles None user home on VxWorks (GH-23530) 2020-12-17 20:22:29 +01:00
pprint.py bpo-28850: Fix PrettyPrinter.format overrides ignored for contents of small containers (GH-22120) 2020-11-23 15:31:31 +02:00
profile.py bpo-42005: profile and cProfile catch BrokenPipeError (GH-22643) 2021-01-20 09:56:21 +01:00
pstats.py bpo-41811: create SortKey members using first given value (GH-22316) 2020-09-19 11:12:57 -07:00
pty.py
py_compile.py bpo-38731: Add --quiet option to py_compile CLI (GH-17134) 2020-07-25 22:58:45 +03:00
pyclbr.py bpo-39411: pyclbr rewrite on AST (#18103) 2020-11-11 10:14:12 +03:00
pydoc.py bpo-42869: Avoid an HTTP redirection. (GH-24174) 2021-01-25 15:50:14 +01:00
queue.py bpo-39481: PEP 585 for a variety of modules (GH-19423) 2020-04-10 07:46:36 -07:00
quopri.py
random.py bpo-37319: Improve documentation, code and tests of randrange. (GH-19112) 2021-01-25 23:02:04 +02:00
re.py bpo-38250: [Enum] single-bit flags are canonical (GH-24215) 2021-01-25 14:26:19 -08:00
reprlib.py
rlcompleter.py bpo-39314: Closes parenthesis when autocompleting for functions that take no arguments (GH-20562) 2020-06-30 22:48:15 +09:00
runpy.py bpo-40108: Improve the error message in runpy when importing a module that includes the extension (GH-19239) 2020-03-31 12:23:55 +01:00
sched.py bpo-19270: Fixed sched.scheduler.cancel to cancel correct event (GH-22729) 2020-10-19 10:33:43 +03:00
secrets.py bpo-40286: Add randbytes() method to random.Random (GH-19527) 2020-04-17 19:05:35 +02:00
selectors.py bpo-41182 selector: use DefaultSelector based upon implementation (GH-21257) 2020-07-22 20:13:37 -07:00
shelve.py bpo-34204: Use pickle.DEFAULT_PROTOCOL in shelve (GH-19639) 2020-10-29 02:44:35 -07:00
shlex.py bpo-33262: Deprecate passing None for s to shlex.split() (GH-6514) 2020-04-01 09:58:55 -04:00
shutil.py bpo-42014: shutil.rmtree: call onerror with correct function (GH-22585) 2020-11-10 08:06:02 -08:00
signal.py
site.py bpo-31904: Fix site and sysconfig modules for VxWorks RTOS (GH-21821) 2020-12-20 23:27:42 +01:00
smtpd.py bpo-42427: Use the errno attribute of OSError instead of args[0] (GH-23449) 2020-11-22 10:28:34 +02:00
smtplib.py bpo-42756: Configure LMTP Unix-domain socket to use global default timeout when timeout not provided (GH-23969) 2021-01-02 02:20:25 +09:00
sndhdr.py bpo-41043: Escape literal part of the path for glob(). (GH-20994) 2020-06-20 11:10:31 +03:00
socket.py bpo-42427: Use the errno attribute of OSError instead of args[0] (GH-23449) 2020-11-22 10:28:34 +02:00
socketserver.py bpo-37193: Remove thread objects which finished process its request (GH-23127) 2020-12-31 20:19:30 +00:00
sre_compile.py
sre_constants.py
sre_parse.py
ssl.py bpo-40443: Remove unused imports in stdlib (GH-19815) 2020-05-01 02:38:00 +02:00
stat.py
statistics.py bpo-38308: Add optional weighting to statistics.harmonic_mean() (GH-23914) 2020-12-23 19:52:09 -08:00
string.py
stringprep.py
struct.py
subprocess.py bpo-42388: Fix subprocess.check_output input=None when text=True (GH-23467) 2020-12-24 20:57:21 -08:00
sunau.py
symtable.py bpo-41840: Report module-level globals as both local and global in the symtable module (GH-22391) 2020-10-03 20:45:55 +01:00
sysconfig.py bpo-31904: Fix site and sysconfig modules for VxWorks RTOS (GH-21821) 2020-12-20 23:27:42 +01:00
tabnanny.py
tarfile.py bpo-39717: [tarfile] update nested exception raising (GH-23739) 2020-12-12 13:26:44 -08:00
telnetlib.py
tempfile.py tempfile: Use random.choises() instead of choise() (GH-23068) 2020-11-01 20:02:03 +09:00
textwrap.py bpo-28660: Make TextWrapper break long words on hyphens (GH-22721) 2020-10-18 20:01:15 +03:00
this.py
threading.py bpo-42350: Fix Thread._reset_internal_locks() (GH-23268) 2020-11-16 15:20:34 +01:00
timeit.py bpo-40670: More reliable validation of statements in timeit.Timer. (GH-22358) 2020-09-22 16:16:46 +03:00
token.py
tokenize.py bpo-43014: Improve performance of tokenize.tokenize by 20-30% 2021-01-24 12:23:17 +03:00
trace.py bpo-41138: Fix trace CLI for non-UTF-8 files. (GH-21177) 2020-06-28 13:34:22 +03:00
traceback.py bpo-42877: add the 'compact' param to TracebackException's __init__ (#24179) 2021-01-14 18:45:02 -08:00
tracemalloc.py bpo-37961: Fix regression in tracemalloc.Traceback.__repr__ (GH-23805) 2020-12-16 22:38:32 +01:00
tty.py
turtle.py bpo-41720: Add "return NotImplemented" in turtle.Vec2D.__rmul__(). (GH-22092) 2020-09-07 18:55:22 +03:00
types.py bpo-38250: [Enum] single-bit flags are canonical (GH-24215) 2021-01-25 14:26:19 -08:00
typing.py Fix various ParamSpec errors in typing (GH-24176) 2021-01-10 16:11:41 -08:00
uu.py
uuid.py bpo-41364: Reduce import overhead of uuid module (GH-21586) 2020-07-22 00:15:47 +01:00
warnings.py
wave.py
weakref.py bpo-36144: Add union operators to WeakValueDictionary584 (#19127) 2020-03-24 18:51:29 -07:00
webbrowser.py bpo-41754: Ignore NotADirectoryError in invocation of xdg-settings (GH-23075) 2020-11-08 10:46:55 +01:00
xdrlib.py
zipapp.py
zipfile.py bpo-42090: zipfile.Path.joinpath now accepts multiple arguments (GH-22976) 2020-12-15 18:12:54 -08:00
zipimport.py bpo-24792: Fix zipimporter masking the cause of import errors (GH-22204) 2020-12-18 16:09:54 -08:00