diff options
author | robot-piglet <[email protected]> | 2025-09-11 08:06:39 +0300 |
---|---|---|
committer | robot-piglet <[email protected]> | 2025-09-11 08:16:10 +0300 |
commit | 3d074bf38508aeeb55ffd8d0e36c77cf8333b93a (patch) | |
tree | 9d503a148abec97b4ab7b2e6514be355a2736c66 | |
parent | 922003ece4579a034cc70774503977e67ee70e95 (diff) |
Intermediate changes
commit_hash:e45b03361aed37ad274db5c4f814e688c27a2598
4 files changed, 103 insertions, 22 deletions
diff --git a/contrib/python/typing-extensions/py3/.dist-info/METADATA b/contrib/python/typing-extensions/py3/.dist-info/METADATA index b1fe93ff44d..b09cb50e1f9 100644 --- a/contrib/python/typing-extensions/py3/.dist-info/METADATA +++ b/contrib/python/typing-extensions/py3/.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: typing_extensions -Version: 4.14.1 +Version: 4.15.0 Summary: Backported and Experimental Type Hints for Python 3.9+ Keywords: annotations,backport,checker,checking,function,hinting,hints,type,typechecking,typehinting,typehints,typing Author-email: "Guido van Rossum, Jukka Lehtosalo, Ćukasz Langa, Michael Lee" <[email protected]> @@ -53,8 +53,12 @@ way as equivalent forms in `typing`. [Semantic Versioning](https://semver.org/). The major version will be incremented only for backwards-incompatible changes. Therefore, it's safe to depend -on `typing_extensions` like this: `typing_extensions >=x.y, <(x+1)`, +on `typing_extensions` like this: `typing_extensions ~=x.y`, where `x.y` is the first version that includes all features you need. +[This](https://packaging.python.org/en/latest/specifications/version-specifiers/#compatible-release) +is equivalent to `typing_extensions >=x.y, <(x+1)`. Do not depend on `~= x.y.z` +unless you really know what you're doing; that defeats the purpose of +semantic versioning. ## Included items diff --git a/contrib/python/typing-extensions/py3/README.md b/contrib/python/typing-extensions/py3/README.md index 1eddb2a14b6..106e83b19c6 100644 --- a/contrib/python/typing-extensions/py3/README.md +++ b/contrib/python/typing-extensions/py3/README.md @@ -23,8 +23,12 @@ way as equivalent forms in `typing`. [Semantic Versioning](https://semver.org/). The major version will be incremented only for backwards-incompatible changes. Therefore, it's safe to depend -on `typing_extensions` like this: `typing_extensions >=x.y, <(x+1)`, +on `typing_extensions` like this: `typing_extensions ~=x.y`, where `x.y` is the first version that includes all features you need. +[This](https://packaging.python.org/en/latest/specifications/version-specifiers/#compatible-release) +is equivalent to `typing_extensions >=x.y, <(x+1)`. Do not depend on `~= x.y.z` +unless you really know what you're doing; that defeats the purpose of +semantic versioning. ## Included items diff --git a/contrib/python/typing-extensions/py3/typing_extensions.py b/contrib/python/typing-extensions/py3/typing_extensions.py index efa09d55236..77f33e1614f 100644 --- a/contrib/python/typing-extensions/py3/typing_extensions.py +++ b/contrib/python/typing-extensions/py3/typing_extensions.py @@ -14,6 +14,7 @@ import types as _types import typing import warnings +# Breakpoint: https://github.com/python/cpython/pull/119891 if sys.version_info >= (3, 14): import annotationlib @@ -70,6 +71,7 @@ __all__ = [ 'clear_overloads', 'dataclass_transform', 'deprecated', + 'disjoint_base', 'Doc', 'evaluate_forward_ref', 'get_overloads', @@ -100,6 +102,7 @@ __all__ = [ 'TypeGuard', 'TypeIs', 'TYPE_CHECKING', + 'type_repr', 'Never', 'NoReturn', 'ReadOnly', @@ -151,6 +154,7 @@ __all__ = [ # for backward compatibility PEP_560 = True GenericMeta = type +# Breakpoint: https://github.com/python/cpython/pull/116129 _PEP_696_IMPLEMENTED = sys.version_info >= (3, 13, 0, "beta") # Added with bpo-45166 to 3.10.1+ and some 3.9 versions @@ -168,6 +172,7 @@ class _Sentinel: _marker = _Sentinel() +# Breakpoint: https://github.com/python/cpython/pull/27342 if sys.version_info >= (3, 10): def _should_collect_from_parameters(t): return isinstance( @@ -189,6 +194,7 @@ T_co = typing.TypeVar('T_co', covariant=True) # Any type covariant containers. T_contra = typing.TypeVar('T_contra', contravariant=True) # Ditto contravariant. +# Breakpoint: https://github.com/python/cpython/pull/31841 if sys.version_info >= (3, 11): from typing import Any else: @@ -277,6 +283,7 @@ class _ExtensionsSpecialForm(typing._SpecialForm, _root=True): Final = typing.Final +# Breakpoint: https://github.com/python/cpython/pull/30530 if sys.version_info >= (3, 11): final = typing.final else: @@ -315,11 +322,39 @@ else: return f +if hasattr(typing, "disjoint_base"): # 3.15 + disjoint_base = typing.disjoint_base +else: + def disjoint_base(cls): + """This decorator marks a class as a disjoint base. + + Child classes of a disjoint base cannot inherit from other disjoint bases that are + not parent classes of the disjoint base. + + For example: + + @disjoint_base + class Disjoint1: pass + + @disjoint_base + class Disjoint2: pass + + class Disjoint3(Disjoint1, Disjoint2): pass # Type checker error + + Type checkers can use knowledge of disjoint bases to detect unreachable code + and determine when two types can overlap. + + See PEP 800.""" + cls.__disjoint_base__ = True + return cls + + def IntVar(name): return typing.TypeVar(name) # A Literal bug was fixed in 3.11.0, 3.10.1 and 3.9.8 +# Breakpoint: https://github.com/python/cpython/pull/29334 if sys.version_info >= (3, 10, 1): Literal = typing.Literal else: @@ -480,6 +515,7 @@ Text = typing.Text TYPE_CHECKING = typing.TYPE_CHECKING +# Breakpoint: https://github.com/python/cpython/pull/118681 if sys.version_info >= (3, 13, 0, "beta"): from typing import AsyncContextManager, AsyncGenerator, ContextManager, Generator else: @@ -590,6 +626,7 @@ def _caller(depth=1, default='__main__'): # `__match_args__` attribute was removed from protocol members in 3.13, # we want to backport this change to older Python versions. +# Breakpoint: https://github.com/python/cpython/pull/110683 if sys.version_info >= (3, 13): Protocol = typing.Protocol else: @@ -770,6 +807,7 @@ else: cls.__init__ = _no_init +# Breakpoint: https://github.com/python/cpython/pull/113401 if sys.version_info >= (3, 13): runtime_checkable = typing.runtime_checkable else: @@ -830,6 +868,7 @@ runtime = runtime_checkable # Our version of runtime-checkable protocols is faster on Python <=3.11 +# Breakpoint: https://github.com/python/cpython/pull/112717 if sys.version_info >= (3, 12): SupportsInt = typing.SupportsInt SupportsFloat = typing.SupportsFloat @@ -1159,6 +1198,7 @@ else: mutable_keys.add(annotation_key) readonly_keys.discard(annotation_key) + # Breakpoint: https://github.com/python/cpython/pull/119891 if sys.version_info >= (3, 14): def __annotate__(format): annos = {} @@ -1249,6 +1289,7 @@ else: raise TypeError("TypedDict takes either a dict or keyword arguments," " but not both") if kwargs: + # Breakpoint: https://github.com/python/cpython/pull/104891 if sys.version_info >= (3, 13): raise TypeError("TypedDict takes no keyword arguments") warnings.warn( @@ -1458,6 +1499,7 @@ else: # <=3.13 hint = typing.get_type_hints( obj, globalns=globalns, localns=localns, include_extras=True ) + # Breakpoint: https://github.com/python/cpython/pull/30304 if sys.version_info < (3, 11): _clean_optional(obj, hint, globalns, localns) if include_extras: @@ -1530,7 +1572,8 @@ else: # <=3.13 # Python 3.9 has get_origin() and get_args() but those implementations don't support # ParamSpecArgs and ParamSpecKwargs, so only Python 3.10's versions will do. -if sys.version_info[:2] >= (3, 10): +# Breakpoint: https://github.com/python/cpython/pull/25298 +if sys.version_info >= (3, 10): get_origin = typing.get_origin get_args = typing.get_args # 3.9 @@ -2096,6 +2139,7 @@ def _concatenate_getitem(self, parameters): # 3.11+; Concatenate does not accept ellipsis in 3.10 +# Breakpoint: https://github.com/python/cpython/pull/30969 if sys.version_info >= (3, 11): Concatenate = typing.Concatenate # <=3.10 @@ -2432,7 +2476,9 @@ For more information, see PEP 646 and PEP 692. """ -if sys.version_info >= (3, 12): # PEP 692 changed the repr of Unpack[] +# PEP 692 changed the repr of Unpack[] +# Breakpoint: https://github.com/python/cpython/pull/104048 +if sys.version_info >= (3, 12): Unpack = typing.Unpack def _is_unpack(obj): @@ -2695,8 +2741,9 @@ else: # <=3.10 raise AssertionError(f"Expected code to be unreachable, but got: {value}") +# dataclass_transform exists in 3.11 but lacks the frozen_default parameter +# Breakpoint: https://github.com/python/cpython/pull/99958 if sys.version_info >= (3, 12): # 3.12+ - # dataclass_transform exists in 3.11 but lacks the frozen_default parameter dataclass_transform = typing.dataclass_transform else: # <=3.11 def dataclass_transform( @@ -2827,6 +2874,7 @@ else: # <=3.11 # Python 3.13.3+ contains a fix for the wrapped __new__ +# Breakpoint: https://github.com/python/cpython/pull/132160 if sys.version_info >= (3, 13, 3): deprecated = warnings.deprecated else: @@ -2956,6 +3004,7 @@ else: return arg(*args, **kwargs) if asyncio.coroutines.iscoroutinefunction(arg): + # Breakpoint: https://github.com/python/cpython/pull/99247 if sys.version_info >= (3, 12): wrapper = inspect.markcoroutinefunction(wrapper) else: @@ -2969,6 +3018,7 @@ else: f"a class or callable, not {arg!r}" ) +# Breakpoint: https://github.com/python/cpython/pull/23702 if sys.version_info < (3, 10): def _is_param_expr(arg): return arg is ... or isinstance( @@ -3045,6 +3095,7 @@ if not hasattr(typing, "TypeVarTuple"): expect_val = f"at least {elen}" + # Breakpoint: https://github.com/python/cpython/pull/27515 things = "arguments" if sys.version_info >= (3, 10) else "parameters" raise TypeError(f"Too {'many' if alen > elen else 'few'} {things}" f" for {cls}; actual {alen}, expected {expect_val}") @@ -3238,6 +3289,7 @@ else: # This was explicitly disallowed in 3.9-3.10, and only half-worked in <=3.8. # On 3.12, we added __orig_bases__ to call-based NamedTuples # On 3.13, we deprecated kwargs-based NamedTuples +# Breakpoint: https://github.com/python/cpython/pull/105609 if sys.version_info >= (3, 13): NamedTuple = typing.NamedTuple else: @@ -3313,6 +3365,7 @@ else: # using add_note() until py312. # Making sure exceptions are raised in the same way # as in "normal" classes seems most important here. + # Breakpoint: https://github.com/python/cpython/pull/95915 if sys.version_info >= (3, 12): e.add_note(msg) raise @@ -3461,6 +3514,7 @@ else: # NewType is a class on Python 3.10+, making it pickleable # The error message for subclassing instances of NewType was improved on 3.11+ +# Breakpoint: https://github.com/python/cpython/pull/30268 if sys.version_info >= (3, 11): NewType = typing.NewType else: @@ -3513,6 +3567,7 @@ else: def __reduce__(self): return self.__qualname__ + # Breakpoint: https://github.com/python/cpython/pull/21515 if sys.version_info >= (3, 10): # PEP 604 methods # It doesn't make sense to have these methods on Python <3.10 @@ -3524,10 +3579,12 @@ else: return typing.Union[other, self] +# Breakpoint: https://github.com/python/cpython/pull/124795 if sys.version_info >= (3, 14): TypeAliasType = typing.TypeAliasType # <=3.13 else: + # Breakpoint: https://github.com/python/cpython/pull/103764 if sys.version_info >= (3, 12): # 3.12-3.13 def _is_unionable(obj): @@ -3723,6 +3780,7 @@ else: def __call__(self): raise TypeError("Type alias is not callable") + # Breakpoint: https://github.com/python/cpython/pull/21515 if sys.version_info >= (3, 10): def __or__(self, right): # For forward compatibility with 3.12, reject Unions @@ -3835,15 +3893,19 @@ if _CapsuleType is not None: __all__.append("CapsuleType") -if sys.version_info >= (3,14): +if sys.version_info >= (3, 14): from annotationlib import Format, get_annotations else: + # Available since Python 3.14.0a3 + # PR: https://github.com/python/cpython/pull/124415 class Format(enum.IntEnum): VALUE = 1 VALUE_WITH_FAKE_GLOBALS = 2 FORWARDREF = 3 STRING = 4 + # Available since Python 3.14.0a1 + # PR: https://github.com/python/cpython/pull/119891 def get_annotations(obj, *, globals=None, locals=None, eval_str=False, format=Format.VALUE): """Compute the annotations dict for an object. @@ -4031,23 +4093,13 @@ else: # as a way of emulating annotation scopes when calling `eval()` type_params = getattr(owner, "__type_params__", None) - # type parameters require some special handling, - # as they exist in their own scope - # but `eval()` does not have a dedicated parameter for that scope. - # For classes, names in type parameter scopes should override - # names in the global scope (which here are called `localns`!), - # but should in turn be overridden by names in the class scope - # (which here are called `globalns`!) + # Type parameters exist in their own scope, which is logically + # between the locals and the globals. We simulate this by adding + # them to the globals. if type_params is not None: globals = dict(globals) - locals = dict(locals) for param in type_params: - param_name = param.__name__ - if ( - _FORWARD_REF_HAS_CLASS and not forward_ref.__forward_is_class__ - ) or param_name not in globals: - globals[param_name] = param - locals.pop(param_name, None) + globals[param.__name__] = param arg = forward_ref.__forward_arg__ if arg.isidentifier() and not keyword.iskeyword(arg): @@ -4181,6 +4233,7 @@ class Sentinel: def __call__(self, *args, **kwargs): raise TypeError(f"{type(self).__name__!r} object is not callable") + # Breakpoint: https://github.com/python/cpython/pull/21515 if sys.version_info >= (3, 10): def __or__(self, other): return typing.Union[self, other] @@ -4192,6 +4245,26 @@ class Sentinel: raise TypeError(f"Cannot pickle {type(self).__name__!r} object") +if sys.version_info >= (3, 14, 0, "beta"): + type_repr = annotationlib.type_repr +else: + def type_repr(value): + """Convert a Python value to a format suitable for use with the STRING format. + + This is intended as a helper for tools that support the STRING format but do + not have access to the code that originally produced the annotations. It uses + repr() for most objects. + + """ + if isinstance(value, (type, _types.FunctionType, _types.BuiltinFunctionType)): + if value.__module__ == "builtins": + return value.__qualname__ + return f"{value.__module__}.{value.__qualname__}" + if value is ...: + return "..." + return repr(value) + + # Aliases for items that are in typing in all supported versions. # We use hasattr() checks so this library will continue to import on # future versions of Python that may remove these names. diff --git a/contrib/python/typing-extensions/py3/ya.make b/contrib/python/typing-extensions/py3/ya.make index 76478f5cdfb..7bffd55961d 100644 --- a/contrib/python/typing-extensions/py3/ya.make +++ b/contrib/python/typing-extensions/py3/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(4.14.1) +VERSION(4.15.0) LICENSE(PSF-2.0) |