Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-typing_extensions for
openSUSE:Factory checked in at 2025-07-21 19:58:36
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-typing_extensions (Old)
and /work/SRC/openSUSE:Factory/.python-typing_extensions.new.8875 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-typing_extensions"
Mon Jul 21 19:58:36 2025 rev:30 rq:1294417 version:4.14.1
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-typing_extensions/python-typing_extensions.changes
2025-07-10 23:15:16.317097685 +0200
+++
/work/SRC/openSUSE:Factory/.python-typing_extensions.new.8875/python-typing_extensions.changes
2025-07-21 19:58:40.651057594 +0200
@@ -1,0 +2,9 @@
+Fri Jul 18 16:11:33 UTC 2025 - Dirk Müller <[email protected]>
+
+- update to 4.14.1:
+ * Fix usage of `typing_extensions.TypedDict` nested inside
+ other types (e.g., `typing.Type[typing_extensions.TypedDict]`).
+ This is not allowed by the type system but worked on older
+ versions, so we maintain support.
+
+-------------------------------------------------------------------
Old:
----
typing_extensions-4.14.0.tar.gz
New:
----
typing_extensions-4.14.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-typing_extensions.spec ++++++
--- /var/tmp/diff_new_pack.vRbXWE/_old 2025-07-21 19:58:41.223081067 +0200
+++ /var/tmp/diff_new_pack.vRbXWE/_new 2025-07-21 19:58:41.227081232 +0200
@@ -27,7 +27,7 @@
%{?sle15_python_module_pythons}
Name: python-typing_extensions%{psuffix}
-Version: 4.14.0
+Version: 4.14.1
Release: 0
Summary: Backported and Experimental Type Hints for Python 3.8+
License: Python-2.0
++++++ typing_extensions-4.14.0.tar.gz -> typing_extensions-4.14.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/typing_extensions-4.14.0/CHANGELOG.md
new/typing_extensions-4.14.1/CHANGELOG.md
--- old/typing_extensions-4.14.0/CHANGELOG.md 2025-06-02 16:51:14.748456200
+0200
+++ new/typing_extensions-4.14.1/CHANGELOG.md 2025-07-04 15:27:15.427119300
+0200
@@ -1,3 +1,9 @@
+# Release 4.14.1 (July 4, 2025)
+
+- Fix usage of `typing_extensions.TypedDict` nested inside other types
+ (e.g., `typing.Type[typing_extensions.TypedDict]`). This is not allowed by
the
+ type system but worked on older versions, so we maintain support.
+
# Release 4.14.0 (June 2, 2025)
Changes since 4.14.0rc1:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/typing_extensions-4.14.0/PKG-INFO
new/typing_extensions-4.14.1/PKG-INFO
--- old/typing_extensions-4.14.0/PKG-INFO 1970-01-01 01:00:00.000000000
+0100
+++ new/typing_extensions-4.14.1/PKG-INFO 1970-01-01 01:00:00.000000000
+0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: typing_extensions
-Version: 4.14.0
+Version: 4.14.1
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]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/typing_extensions-4.14.0/pyproject.toml
new/typing_extensions-4.14.1/pyproject.toml
--- old/typing_extensions-4.14.0/pyproject.toml 2025-06-02 16:51:14.749456400
+0200
+++ new/typing_extensions-4.14.1/pyproject.toml 2025-07-04 15:27:15.428119400
+0200
@@ -6,7 +6,7 @@
# Project metadata
[project]
name = "typing_extensions"
-version = "4.14.0"
+version = "4.14.1"
description = "Backported and Experimental Type Hints for Python 3.9+"
readme = "README.md"
requires-python = ">=3.9"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/typing_extensions-4.14.0/src/test_typing_extensions.py
new/typing_extensions-4.14.1/src/test_typing_extensions.py
--- old/typing_extensions-4.14.0/src/test_typing_extensions.py 2025-06-02
16:51:14.750456300 +0200
+++ new/typing_extensions-4.14.1/src/test_typing_extensions.py 2025-07-04
15:27:15.429119300 +0200
@@ -525,7 +525,7 @@
type(self.bottom_type)()
def test_pickle(self):
- for proto in range(pickle.HIGHEST_PROTOCOL):
+ for proto in range(pickle.HIGHEST_PROTOCOL + 1):
pickled = pickle.dumps(self.bottom_type, protocol=proto)
self.assertIs(self.bottom_type, pickle.loads(pickled))
@@ -4202,6 +4202,12 @@
self.assertEqual(Emp.__annotations__, {'name': str, 'id': int})
self.assertEqual(Emp.__total__, True)
+ def test_allowed_as_type_argument(self):
+ # https://github.com/python/typing_extensions/issues/613
+ obj = typing.Type[typing_extensions.TypedDict]
+ self.assertIs(typing_extensions.get_origin(obj), type)
+ self.assertEqual(typing_extensions.get_args(obj),
(typing_extensions.TypedDict,))
+
@skipIf(sys.version_info < (3, 13), "Change in behavior in 3.13")
def test_keywords_syntax_raises_on_3_13(self):
with self.assertRaises(TypeError),
self.assertWarns(DeprecationWarning):
@@ -5284,6 +5290,8 @@
'z': 'Required[undefined]'},
)
+ def test_dunder_dict(self):
+ self.assertIsInstance(TypedDict.__dict__, dict)
class AnnotatedTests(BaseTestCase):
@@ -5896,7 +5904,7 @@
P_co = ParamSpec('P_co', covariant=True)
P_contra = ParamSpec('P_contra', contravariant=True)
P_default = ParamSpec('P_default', default=[int])
- for proto in range(pickle.HIGHEST_PROTOCOL):
+ for proto in range(pickle.HIGHEST_PROTOCOL + 1):
with self.subTest(f'Pickle protocol {proto}'):
for paramspec in (P, P_co, P_contra, P_default):
z = pickle.loads(pickle.dumps(paramspec, proto))
@@ -6319,7 +6327,7 @@
self.assertIs(StrT.__bound__, LiteralString)
def test_pickle(self):
- for proto in range(pickle.HIGHEST_PROTOCOL):
+ for proto in range(pickle.HIGHEST_PROTOCOL + 1):
pickled = pickle.dumps(LiteralString, protocol=proto)
self.assertIs(LiteralString, pickle.loads(pickled))
@@ -6366,7 +6374,7 @@
return (self, self)
def test_pickle(self):
- for proto in range(pickle.HIGHEST_PROTOCOL):
+ for proto in range(pickle.HIGHEST_PROTOCOL + 1):
pickled = pickle.dumps(Self, protocol=proto)
self.assertIs(Self, pickle.loads(pickled))
@@ -6578,7 +6586,7 @@
Ts = TypeVarTuple('Ts')
Ts_default = TypeVarTuple('Ts_default', default=Unpack[Tuple[int,
str]])
- for proto in range(pickle.HIGHEST_PROTOCOL):
+ for proto in range(pickle.HIGHEST_PROTOCOL + 1):
for typevartuple in (Ts, Ts_default):
z = pickle.loads(pickle.dumps(typevartuple, proto))
self.assertEqual(z.__name__, typevartuple.__name__)
@@ -7589,7 +7597,7 @@
U_co = typing_extensions.TypeVar('U_co', covariant=True)
U_contra = typing_extensions.TypeVar('U_contra', contravariant=True)
U_default = typing_extensions.TypeVar('U_default', default=int)
- for proto in range(pickle.HIGHEST_PROTOCOL):
+ for proto in range(pickle.HIGHEST_PROTOCOL + 1):
for typevar in (U, U_co, U_contra, U_default):
z = pickle.loads(pickle.dumps(typevar, proto))
self.assertEqual(z.__name__, typevar.__name__)
@@ -7738,7 +7746,7 @@
global U, U_infer # pickle wants to reference the class by name
U = typing_extensions.TypeVar('U')
U_infer = typing_extensions.TypeVar('U_infer', infer_variance=True)
- for proto in range(pickle.HIGHEST_PROTOCOL):
+ for proto in range(pickle.HIGHEST_PROTOCOL + 1):
for typevar in (U, U_infer):
z = pickle.loads(pickle.dumps(typevar, proto))
self.assertEqual(z.__name__, typevar.__name__)
@@ -8343,7 +8351,7 @@
def test_pickle(self):
doc_info = Doc("Who to say hi to")
- for proto in range(pickle.HIGHEST_PROTOCOL):
+ for proto in range(pickle.HIGHEST_PROTOCOL + 1):
pickled = pickle.dumps(doc_info, protocol=proto)
self.assertEqual(doc_info, pickle.loads(pickled))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/typing_extensions-4.14.0/src/typing_extensions.py
new/typing_extensions-4.14.1/src/typing_extensions.py
--- old/typing_extensions-4.14.0/src/typing_extensions.py 2025-06-02
16:51:14.751456300 +0200
+++ new/typing_extensions-4.14.1/src/typing_extensions.py 2025-07-04
15:27:15.430119500 +0200
@@ -221,7 +221,55 @@
ClassVar = typing.ClassVar
+# Vendored from cpython typing._SpecialFrom
+# Having a separate class means that instances will not be rejected by
+# typing._type_check.
+class _SpecialForm(typing._Final, _root=True):
+ __slots__ = ('_name', '__doc__', '_getitem')
+
+ def __init__(self, getitem):
+ self._getitem = getitem
+ self._name = getitem.__name__
+ self.__doc__ = getitem.__doc__
+
+ def __getattr__(self, item):
+ if item in {'__name__', '__qualname__'}:
+ return self._name
+
+ raise AttributeError(item)
+
+ def __mro_entries__(self, bases):
+ raise TypeError(f"Cannot subclass {self!r}")
+
+ def __repr__(self):
+ return f'typing_extensions.{self._name}'
+
+ def __reduce__(self):
+ return self._name
+
+ def __call__(self, *args, **kwds):
+ raise TypeError(f"Cannot instantiate {self!r}")
+
+ def __or__(self, other):
+ return typing.Union[self, other]
+
+ def __ror__(self, other):
+ return typing.Union[other, self]
+
+ def __instancecheck__(self, obj):
+ raise TypeError(f"{self} cannot be used with isinstance()")
+
+ def __subclasscheck__(self, cls):
+ raise TypeError(f"{self} cannot be used with issubclass()")
+
+ @typing._tp_cache
+ def __getitem__(self, parameters):
+ return self._getitem(self, parameters)
+
+# Note that inheriting from this class means that the object will be
+# rejected by typing._type_check, so do not use it if the special form
+# is arguably valid as a type by itself.
class _ExtensionsSpecialForm(typing._SpecialForm, _root=True):
def __repr__(self):
return 'typing_extensions.' + self._name
@@ -1223,7 +1271,7 @@
td.__orig_bases__ = (TypedDict,)
return td
- class _TypedDictSpecialForm(_ExtensionsSpecialForm, _root=True):
+ class _TypedDictSpecialForm(_SpecialForm, _root=True):
def __call__(
self,
typename,
@@ -2201,48 +2249,6 @@
return typing._GenericAlias(self, (item,))
-# Vendored from cpython typing._SpecialFrom
-class _SpecialForm(typing._Final, _root=True):
- __slots__ = ('_name', '__doc__', '_getitem')
-
- def __init__(self, getitem):
- self._getitem = getitem
- self._name = getitem.__name__
- self.__doc__ = getitem.__doc__
-
- def __getattr__(self, item):
- if item in {'__name__', '__qualname__'}:
- return self._name
-
- raise AttributeError(item)
-
- def __mro_entries__(self, bases):
- raise TypeError(f"Cannot subclass {self!r}")
-
- def __repr__(self):
- return f'typing_extensions.{self._name}'
-
- def __reduce__(self):
- return self._name
-
- def __call__(self, *args, **kwds):
- raise TypeError(f"Cannot instantiate {self!r}")
-
- def __or__(self, other):
- return typing.Union[self, other]
-
- def __ror__(self, other):
- return typing.Union[other, self]
-
- def __instancecheck__(self, obj):
- raise TypeError(f"{self} cannot be used with isinstance()")
-
- def __subclasscheck__(self, cls):
- raise TypeError(f"{self} cannot be used with issubclass()")
-
- @typing._tp_cache
- def __getitem__(self, parameters):
- return self._getitem(self, parameters)
if hasattr(typing, "LiteralString"): # 3.11+