|
160 | 160 | # Added with bpo-45166 to 3.10.1+ and some 3.9 versions
|
161 | 161 | _FORWARD_REF_HAS_CLASS = "__forward_is_class__" in typing.ForwardRef.__slots__
|
162 | 162 |
|
163 |
| -# The functions below are modified copies of typing internal helpers. |
164 |
| -# They are needed by _ProtocolMeta and they provide support for PEP 646. |
| 163 | +class Sentinel: |
| 164 | + """Create a unique sentinel object. |
| 165 | +
|
| 166 | + *name* should be the name of the variable to which the return value shall be assigned. |
165 | 167 |
|
| 168 | + *repr*, if supplied, will be used for the repr of the sentinel object. |
| 169 | + If not provided, "<name>" will be used. |
| 170 | + """ |
| 171 | + |
| 172 | + def __init__( |
| 173 | + self, |
| 174 | + name: str, |
| 175 | + repr: typing.Optional[str] = None, |
| 176 | + ): |
| 177 | + self._name = name |
| 178 | + self._repr = repr if repr is not None else f'<{name}>' |
166 | 179 |
|
167 |
| -class _Sentinel: |
168 | 180 | def __repr__(self):
|
169 |
| - return "<sentinel>" |
| 181 | + return self._repr |
| 182 | + |
| 183 | + if sys.version_info < (3, 11): |
| 184 | + # The presence of this method convinces typing._type_check |
| 185 | + # that Sentinels are types. |
| 186 | + def __call__(self, *args, **kwargs): |
| 187 | + raise TypeError(f"{type(self).__name__!r} object is not callable") |
170 | 188 |
|
| 189 | + # Breakpoint: https://github.com/python/cpython/pull/21515 |
| 190 | + if sys.version_info >= (3, 10): |
| 191 | + def __or__(self, other): |
| 192 | + return typing.Union[self, other] |
| 193 | + |
| 194 | + def __ror__(self, other): |
| 195 | + return typing.Union[other, self] |
| 196 | + |
| 197 | + def __getstate__(self): |
| 198 | + raise TypeError(f"Cannot pickle {type(self).__name__!r} object") |
171 | 199 |
|
172 |
| -_marker = _Sentinel() |
173 | 200 |
|
| 201 | +_marker = Sentinel("sentinel") |
| 202 | + |
| 203 | +# The functions below are modified copies of typing internal helpers. |
| 204 | +# They are needed by _ProtocolMeta and they provide support for PEP 646. |
174 | 205 |
|
175 | 206 | # Breakpoint: https://github.com/python/cpython/pull/27342
|
176 | 207 | if sys.version_info >= (3, 10):
|
@@ -4207,44 +4238,6 @@ def evaluate_forward_ref(
|
4207 | 4238 | )
|
4208 | 4239 |
|
4209 | 4240 |
|
4210 |
| -class Sentinel: |
4211 |
| - """Create a unique sentinel object. |
4212 |
| -
|
4213 |
| - *name* should be the name of the variable to which the return value shall be assigned. |
4214 |
| -
|
4215 |
| - *repr*, if supplied, will be used for the repr of the sentinel object. |
4216 |
| - If not provided, "<name>" will be used. |
4217 |
| - """ |
4218 |
| - |
4219 |
| - def __init__( |
4220 |
| - self, |
4221 |
| - name: str, |
4222 |
| - repr: typing.Optional[str] = None, |
4223 |
| - ): |
4224 |
| - self._name = name |
4225 |
| - self._repr = repr if repr is not None else f'<{name}>' |
4226 |
| - |
4227 |
| - def __repr__(self): |
4228 |
| - return self._repr |
4229 |
| - |
4230 |
| - if sys.version_info < (3, 11): |
4231 |
| - # The presence of this method convinces typing._type_check |
4232 |
| - # that Sentinels are types. |
4233 |
| - def __call__(self, *args, **kwargs): |
4234 |
| - raise TypeError(f"{type(self).__name__!r} object is not callable") |
4235 |
| - |
4236 |
| - # Breakpoint: https://github.com/python/cpython/pull/21515 |
4237 |
| - if sys.version_info >= (3, 10): |
4238 |
| - def __or__(self, other): |
4239 |
| - return typing.Union[self, other] |
4240 |
| - |
4241 |
| - def __ror__(self, other): |
4242 |
| - return typing.Union[other, self] |
4243 |
| - |
4244 |
| - def __getstate__(self): |
4245 |
| - raise TypeError(f"Cannot pickle {type(self).__name__!r} object") |
4246 |
| - |
4247 |
| - |
4248 | 4241 | if sys.version_info >= (3, 14, 0, "beta"):
|
4249 | 4242 | type_repr = annotationlib.type_repr
|
4250 | 4243 | else:
|
|
0 commit comments