cpython/Lib
Miss Islington (bot) 2ce8af3cbc
bpo-42073: allow classmethod to wrap other classmethod-like descriptors (GH-27115) (GH-27162)
Patch by Erik Welch.

bpo-19072 (GH-8405) allows `classmethod` to wrap other descriptors, but this does
not work when the wrapped descriptor mimics classmethod.  The current PR fixes
this.

In Python 3.8 and before, one could create a callable descriptor such that this
works as expected (see Lib/test/test_decorators.py for examples):
```python
class A:
    @myclassmethod
    def f1(cls):
        return cls

    @classmethod
    @myclassmethod
    def f2(cls):
        return cls
```
In Python 3.8 and before, `A.f2()` return `A`. Currently in Python 3.9, it
returns `type(A)`.  This PR make `A.f2()` return `A` again.

As of GH-8405, classmethod calls `obj.__get__(type)` if `obj` has `__get__`.
This allows one to chain `@classmethod` and `@property` together.  When
using classmethod-like descriptors, it's the second argument to `__get__`--the
owner or the type--that is important, but this argument is currently missing.
Since it is None, the "owner" argument is assumed to be the type of the first
argument, which, in this case, is wrong (we want `A`, not `type(A)`).

This PR updates classmethod to call `obj.__get__(type, type)` if `obj` has
`__get__`.

Co-authored-by: Erik Welch <erik.n.welch@gmail.com>
(cherry picked from commit b83861f026)
2021-07-15 15:42:11 +02:00
..
asyncio [3.10] bpo-43945: [Enum] reduce scope of new format() behavior (GH-26752) 2021-06-18 14:25:42 -07:00
collections bpo-25478: Add total() method to collections.Counter (GH-25829) 2021-05-02 20:19:51 -07:00
concurrent bpo-35930: Raising an exception raised in a "future" instance will create reference cycles (#24995) 2021-03-29 19:22:13 +02:00
ctypes bpo-29753: revert 0d7ad9f (GH-19850) (GH-27085) 2021-07-11 10:47:06 -07:00
curses
dbm
distutils bpo-44351: Restore back parse_makefile in distutils.sysconfig (GH-26637) (GH-26673) 2021-06-15 14:36:45 +02:00
email bpo-44395: Fix MIMEPart.as_string to pass unixfrom properly (GH-26685) 2021-06-21 07:27:26 -07:00
encodings bpo-39337: encodings.normalize_encoding() now ignores non-ASCII characters (GH-22219) 2020-10-14 17:43:31 +02:00
ensurepip [3.10] Update vendored pip to 21.1.3 (GH-26912) (gh-26917) 2021-06-26 20:58:39 +01:00
html bpo-41748: Handles unquoted attributes with commas (#24072) 2021-02-01 21:32:50 +01:00
http [3.10] bpo-44559: [Enum] revert enum module to 3.9 (GH-27010) 2021-07-03 21:08:42 -07:00
idlelib bpo-40128: Fix IDLE autocomplete on macOS (GH-26672) 2021-06-11 19:24:16 -04:00
importlib bpo-44464: Remove special exclusion for flake8 in the deprecation warnings. (GH-26807) (GH-26929) 2021-06-27 18:19:24 -04:00
json bpo-39828: Fix json.tool to catch BrokenPipeError (GH-18779) 2020-03-10 08:41:44 +01:00
lib2to3 bpo-43844: Fix PendingDeprecationWarning in test_lib2to3 (GH-25407) 2021-04-16 11:27:00 +02:00
logging bpo-43731: Add an encoding parameter to logging.fileConfig() (GH-25273) 2021-04-13 18:17:03 +09:00
msilib
multiprocessing bpo-30256: Add manager_owned keyword arg to AutoProxy (GH-16341) (#26987) 2021-07-01 21:15:47 -07:00
pydoc_data Python 3.10.0b4 2021-07-10 01:51:07 +01:00
site-packages
sqlite3 [3.10] bpo-43988: Add test.support.check_disallow_instantiation() (GH-25757) (GH-26885) 2021-06-23 16:46:25 -07:00
test bpo-42073: allow classmethod to wrap other classmethod-like descriptors (GH-27115) (GH-27162) 2021-07-15 15:42:11 +02:00
tkinter [3.10] bpo-44559: [Enum] revert enum module to 3.9 (GH-27010) 2021-07-03 21:08:42 -07:00
turtledemo bpo-44254: On Mac, remove disfunctional colors from turtledemo buttons (GH-26448) 2021-05-29 03:34:57 -04:00
unittest bpo-43478: Restrict use of Mock objects as specs (GH-25326) 2021-04-09 20:45:50 -07:00
urllib bpo-43882 Remove the newline, and tab early. From query and fragments. (GH-25936) 2021-05-05 16:04:38 -07:00
venv bpo-35328: Set VIRTUAL_ENV_PROMPT at venv activation (GH-21587) 2020-07-28 09:41:57 +01:00
wsgiref
xml bpo-43399: Fix ElementTree.extend not working on iterators (GH-24751) 2021-03-31 00:11:29 +03:00
xmlrpc bpo-43433: Preserve query and fragment in the URL of the server in ServerProxy. (GH-25057) 2021-03-29 22:39:31 +09:00
zoneinfo fix typo in warning (#20620) 2021-04-25 10:45:05 -07:00
__future__.py Set the release for __future__.annotations to 3.11 (#25596) 2021-04-25 17:09:24 +01:00
__phello__.foo.py
_aix_support.py bpo-39936: _aix_support uses _bootsubprocess (GH-18970) 2020-03-12 23:15:34 +01:00
_bootsubprocess.py bpo-40094: Add os.waitstatus_to_exitcode() (GH-19201) 2020-04-01 18:49:29 +02:00
_collections_abc.py bpo-43977: Use tp_flags for collection matching (GH-25723) 2021-04-30 09:50:28 +01:00
_compat_pickle.py
_compression.py bpo-41486: Faster bz2/lzma/zlib via new output buffering (GH-21740) 2021-04-27 23:58:54 -07:00
_markupbase.py bpo-31844: Remove _markupbase.ParserBase.error() (GH-8562) 2020-07-16 09:13:05 +03:00
_osx_support.py bpo-43425: Update _osx_support not to use distutils.log (GH-26968) 2021-06-30 18:20:24 -07:00
_py_abc.py
_pydecimal.py bpo-43475: Fix the Python implementation of hash of Decimal NaN (GH-26679) 2021-06-13 07:05:28 -07:00
_pyio.py bpo-43680: Deprecate io.OpenWrapper (GH-25357) 2021-04-14 03:24:33 +02:00
_sitebuiltins.py bpo-43651: PEP 597: Fix EncodingWarning in some tests (GH-25189) 2021-04-06 11:18:41 +09:00
_strptime.py bpo-43295: Fix error handling of datetime.strptime format string '%z' (GH-24627) 2021-03-03 08:58:57 -08:00
_threading_local.py
_weakrefset.py bpo-39481: Make weakref and WeakSet generic (GH-19497) 2020-04-13 21:54:40 -07:00
abc.py Clarify the order of a stacked abstractmethod (GH-26892) 2021-06-27 11:50:38 -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 [3.10] bpo-44559: [Enum] revert enum module to 3.9 (GH-27010) 2021-07-03 21:08:42 -07:00
asynchat.py [3.10] bpo-44498: Issue a deprecation warning on asynchat, asyncore and smtpd import (GH-26882) (GH-26904) 2021-06-24 12:57:55 -07:00
asyncore.py [3.10] bpo-44498: Issue a deprecation warning on asynchat, asyncore and smtpd import (GH-26882) (GH-26904) 2021-06-24 12:57:55 -07:00
base64.py bpo-39068: Fix race condition in base64 (GH-17627) 2020-12-31 11:44:46 +02:00
bdb.py fix docstring typo in bdb.py (GH-22323) (#26179) 2021-05-17 00:42:56 +01:00
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-44439: BZ2File.write() / LZMAFile.write() handle buffer protocol correctly (GH-26764) (GH-26845) 2021-06-22 16:59:53 +03: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 bpo-41139: Deprecate cgi.log() (GH-25625) 2021-04-29 11:36:04 +09: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-43202: More codeop._maybe_compile clean-ups (GH-24512) 2021-02-13 01:49:18 -05:00
colorsys.py bpo-42452: Improve colorsys.rgb_to_hls code (GH-23306) 2020-11-28 02:11:19 -05:00
compileall.py bpo-43651: Fix test_compileall with PEP 597 (GH-25128) 2021-04-02 09:01:57 +09:00
configparser.py bpo-38741: Definition of multiple ']' in header configparser (GH-17129) (#27110) 2021-07-13 16:35:30 +02:00
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 Fix dataclass comment typo _eq__ -> __eq__ (GH-26433) (GH-26436) 2021-05-28 21:07:27 -04:00
datetime.py Fix typo (GH-23019) 2021-02-03 13:25:28 -08: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-27129: Use instruction offsets, not byte offsets, in bytecode and internally. (GH-25069) 2021-04-01 16:00:31 +01:00
doctest.py bpo-35753: Fix crash in doctest with unwrap-able functions (GH-22981) (#25926) 2021-05-05 20:01:21 +02:00
enum.py [3.10] bpo-44559: [Enum] revert enum module to 3.9 (GH-27010) 2021-07-03 21:08:42 -07:00
filecmp.py bpo-15450: Allow subclassing of dircmp (GH-23424) (#23424) 2020-11-23 18:29:37 +02:00
fileinput.py bpo-43651: Fix EncodingWarning in fileinput and its test (GH-25648) 2021-04-27 15:47:16 +09: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 bpo-43420: Simple optimizations for Fraction's arithmetics (GH-24779) 2021-03-21 21:30:55 -05:00
ftplib.py bpo-43285 Make ftplib not trust the PASV response. (GH-24838) 2021-03-15 11:39:31 -07: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 update docstring for win_getpass to reflect code changes (GH-24967) 2021-05-04 00:08:09 -07:00
gettext.py bpo-40275: Import locale module lazily in gettext (GH-19905) 2020-05-14 03:22:30 +02:00
glob.py bpo-44482: Fix very unlikely resource leak in glob in non-CPython implementations (GH-26843) (GH-26872) 2021-06-23 13:28:08 +03:00
graphlib.py [doc] Fix typo in the graphlib docs (GH-22661) 2020-10-12 07:33:34 -07:00
gzip.py bpo-44439: BZ2File.write() / LZMAFile.write() handle buffer protocol correctly (GH-26764) (GH-26845) 2021-06-22 16:59:53 +03:00
hashlib.py bpo-43880: Show DeprecationWarnings for deprecated ssl module features (GH-25455) 2021-04-19 07:27:10 +02:00
heapq.py Revert "Fix all Python Cookbook links (#22205)" (GH-22424) 2020-09-27 01:47:25 +01:00
hmac.py bpo-40645: use C implementation of HMAC (GH-24920) 2021-03-27 06:55:03 -07: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 bpo-43720: Update import-related stdlib deprecation messages to say they will be removed in Python 3.12 (GH-25167) 2021-04-03 15:31:15 -07:00
inspect.py [3.10] bpo-44559: [Enum] revert enum module to 3.9 (GH-27010) 2021-07-03 21:08:42 -07:00
io.py bpo-43680: Deprecate io.OpenWrapper (GH-25357) 2021-04-14 03:24:33 +02:00
ipaddress.py bpo-33433 Fix private address checking for IPv4 mapped IPv6. (GH-26172) 2021-05-17 12:42:08 -07:00
keyword.py bpo-42128: Structural Pattern Matching (PEP 634) (GH-22917) 2021-02-26 14:51:55 -08: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-34311: Add locale.localize (GH-15275) 2021-04-12 14:17:40 +02:00
lzma.py bpo-44439: BZ2File.write() / LZMAFile.write() handle buffer protocol correctly (GH-26764) (GH-26845) 2021-06-22 16:59:53 +03:00
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-44582: Accelerate mimetypes.init on Windows with a native accelerator (GH-27059) 2021-07-08 09:13:06 -07:00
modulefinder.py bpo-40443: Remove unused imports in the stdlib (GH-19803) 2020-04-30 11:26:33 +02:00
netrc.py bpo-43733: netrc try to use UTF-8 before using locale encoding. (GH-25781) 2021-05-02 14:01:02 +09:00
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 bpo-43757: Make pathlib use os.path.realpath() to resolve symlinks in a path (GH-25264) 2021-04-28 16:50:17 +01:00
nturl2path.py bpo-43607: Fix urllib handling of Windows paths with \\?\ prefix (GH-25539) 2021-04-23 18:02:47 +01:00
numbers.py bpo-44072: fix Complex, Integral docs for ** (GH-25986) 2021-05-14 15:22:45 -07:00
opcode.py bpo-43754: Eliminate bindings for partial pattern matches (GH-25229) 2021-05-02 13:02:10 -07:00
operator.py bpo-44558: Match countOf is/== treatment to c (GH-27007) 2021-07-07 06:50:41 -07:00
optparse.py
os.py bpo-43651: Fix EncodingWarning in os.fdopen() and test_os (GH-25654) 2021-04-29 11:35:36 +09:00
pathlib.py bpo-39950: Fix deprecation warning in test for pathlib.Path.link_to() (GH-26155) (GH-26178) 2021-05-16 15:35:44 -07:00
pdb.py [3.10] bpo-34266: [pdb] handle ValueError from shlex.split() (GH-26656) (GH-27006) 2021-07-03 17:28:46 +01:00
pickle.py bpo-43907: add missing memoize call in pure python pickling of bytearray (GH-25501) 2021-04-23 23:27:14 +02:00
pickletools.py
pipes.py
pkgutil.py bpo-43720: Update import-related stdlib deprecation messages to say they will be removed in Python 3.12 (GH-25167) 2021-04-03 15:31:15 -07:00
platform.py bpo-44572: On Windows, disconnect STDIN in platform._syscmd_ver() to prevent erroneous STDIN consumption (GH-27092) (GH-27124) 2021-07-13 20:48:23 +01:00
plistlib.py [3.10] bpo-44559: [Enum] revert enum module to 3.9 (GH-27010) 2021-07-03 21:08:42 -07:00
poplib.py
posixpath.py bpo-26329: update os.path.normpath documentation (GH-20138) (GH-27094) 2021-07-12 17:07:46 +02:00
pprint.py bpo-43080: pprint for dataclass instances (GH-24389) 2021-04-13 19:59:24 -04:00
profile.py bpo-42005: profile and cProfile catch BrokenPipeError (GH-22643) 2021-01-20 09:56:21 +01:00
pstats.py [3.10] bpo-44559: [Enum] revert enum module to 3.9 (GH-27010) 2021-07-03 21:08:42 -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-40443: Remove unused imports (GH-25429) 2021-04-16 11:26:06 +02:00
pydoc.py bpo-43651: Fix EncodingWarning in pydoc. (GH-25644) 2021-04-27 12:46:20 +09: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-44018: random.seed() no longer mutates its inputs (GH-25856) (GH-25872) 2021-05-03 19:45:30 -07:00
re.py [3.10] bpo-44559: [Enum] revert enum module to 3.9 (GH-27010) 2021-07-03 21:08:42 -07: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-41718: runpy now imports pkgutil in functions (GH-24996) 2021-03-23 19:22:57 +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-43219: shutil.copyfile, raise a less confusing exception instead of IsADirectoryError (GH-27049) 2021-07-09 21:07:35 -07:00
signal.py
site.py bpo-43510: Implement PEP 597 opt-in EncodingWarning. (GH-19481) 2021-03-29 12:28:14 +09:00
smtpd.py [3.10] bpo-44498: Issue a deprecation warning on asynchat, asyncore and smtpd import (GH-26882) (GH-26904) 2021-06-24 12:57:55 -07:00
smtplib.py Quick pydoc update to smtplib.py (GH-22292) 2021-04-25 18:56:37 -07: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-43651: PEP 597: Fix socket.makefile() (GH-25645) 2021-04-27 13:16:28 +09: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 [3.10] bpo-44559: [Enum] revert enum module to 3.9 (GH-27010) 2021-07-03 21:08:42 -07:00
stat.py
statistics.py Update nonstandard variable names (GH-26540) (GH-26546) 2021-06-04 19:38:30 -07:00
string.py
stringprep.py
struct.py
subprocess.py bpo-43776: Remove list call from args in Popen repr (GH-25338) 2021-04-28 01:16:38 -07: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 Fix osx_framework_user include to match distutils (GH-27093) (GH-27159) 2021-07-15 12:10:57 +02:00
tabnanny.py
tarfile.py bpo-8978: improve tarfile.open error message when lzma / bz2 are missing (GH-24850) 2021-04-27 10:39:01 -07:00
telnetlib.py
tempfile.py bpo-43510: Implement PEP 597 opt-in EncodingWarning. (GH-19481) 2021-03-29 12:28:14 +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-44422: Fix threading.enumerate() reentrant call (GH-26727) 2021-06-15 07:34:42 -07: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 bpo-43822: Improve syntax errors for missing commas (GH-25377) 2021-04-15 21:38:45 +01:00
tokenize.py bpo-43014: Improve performance of tokenize.tokenize by 20-30% 2021-01-24 12:23:17 +03:00
trace.py Fix typo in Lib/trace.py (GH-24309) 2021-02-01 21:16:38 +05:30
traceback.py [3.10] bpo-44446: support lineno being None in traceback.FrameSummary (GH-26781) (GH-27072) 2021-07-08 17:47:12 +01: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-43935: Fix typo in Turtle.back() docstring (GH-25581) 2021-04-30 18:05:45 -04:00
types.py bpo-38250: [Enum] single-bit flags are canonical (GH-24215) 2021-01-25 14:26:19 -08:00
typing.py [3.10] bpo-44468: Never skip base classes in typing.get_type_hints(), even with invalid .__module__. (GH-26862) (GH-26920) 2021-06-26 16:52:28 -07:00
uu.py
uuid.py [3.10] bpo-44559: [Enum] revert enum module to 3.9 (GH-27010) 2021-07-03 21:08:42 -07: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-44059: Register the SerenityOS Browser in the webbrowser module (GH-25947) (GH-25950) 2021-05-06 12:49:26 -07:00
xdrlib.py
zipapp.py
zipfile.py bpo-43651: Fix EncodingWarning in zipfile (GH-25650) 2021-04-27 15:45:31 +09:00
zipimport.py bpo-42135: Deprecate implementations of find_module() and find_loader() (GH-25169) 2021-04-06 08:56:57 -07:00