Repository navigation
Commit cbac9a6
committed
gh-153581: Fix create_autospec producing an uncallable mock for functools.partialmethod
functools.partialmethod objects have no __call__ of their own (they are
non-data descriptors, only callable once resolved through attribute
access), so create_autospec's _callable() check treated them as
non-callable and forced Klass = NonCallableMagicMock. Autospeccing such
an attribute directly (e.g.: mock.patch.object(cls, name, autospec=True))
therefore produced a mock that raised TypeError on every call, even
though the real attribute is perfectly callable.
_callable() now judges callability from the wrapped function
(partialmethod.func) instead. _get_signature_object() gained a matching
branch that computes the partialmethod's effective signature, self
dropped, the partialmethod's own pre-bound positional/keyword arguments
applied, so the resulting mock also enforces the correct call
signature rather than accepting anything.1 parent c71bf4d commit cbac9a6
3 files changed
Lines changed: 53 additions & 1 deletion
File tree
- Lib
- test/test_unittest/testmock
- unittest
- Misc/NEWS.d/next/Library
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
| |||
1077 | 1078 | | |
1078 | 1079 | | |
1079 | 1080 | | |
| 1081 | + | |
| 1082 | + | |
| 1083 | + | |
| 1084 | + | |
| 1085 | + | |
| 1086 | + | |
| 1087 | + | |
| 1088 | + | |
| 1089 | + | |
| 1090 | + | |
| 1091 | + | |
| 1092 | + | |
| 1093 | + | |
| 1094 | + | |
| 1095 | + | |
| 1096 | + | |
| 1097 | + | |
| 1098 | + | |
| 1099 | + | |
| 1100 | + | |
| 1101 | + | |
| 1102 | + | |
| 1103 | + | |
| 1104 | + | |
1080 | 1105 | | |
1081 | 1106 | | |
1082 | 1107 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
37 | 37 | | |
38 | 38 | | |
39 | 39 | | |
40 | | - | |
| 40 | + | |
41 | 41 | | |
42 | 42 | | |
43 | 43 | | |
| |||
107 | 107 | | |
108 | 108 | | |
109 | 109 | | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
110 | 124 | | |
111 | 125 | | |
112 | 126 | | |
| |||
155 | 169 | | |
156 | 170 | | |
157 | 171 | | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
158 | 179 | | |
159 | 180 | | |
160 | 181 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
0 commit comments