Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-grpclib for openSUSE:Factory 
checked in at 2026-01-19 18:38:47
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-grpclib (Old)
 and      /work/SRC/openSUSE:Factory/.python-grpclib.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-grpclib"

Mon Jan 19 18:38:47 2026 rev:5 rq:1328090 version:0.4.9

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-grpclib/python-grpclib.changes    
2025-10-30 17:10:57.857534951 +0100
+++ /work/SRC/openSUSE:Factory/.python-grpclib.new.1928/python-grpclib.changes  
2026-01-19 18:42:44.737578939 +0100
@@ -1,0 +2,11 @@
+Mon Jan 19 10:48:52 UTC 2026 - John Paul Adrian Glaubitz 
<[email protected]>
+
+- Update to 0.4.9
+  * Added Python 3.14 support; pull request courtesy Thomas J. Fan @thomasjpfan
+  * Dropped Python 3.8 and 3.9 support
+  * Added support for a custom ``DescriptorPool`` for the server reflection
+    (#204); pull request courtesy Eric Daniels @edaniels
+- Drop support-new-pytest-asyncio.patch, merged upstream
+- Drop support-python-314.patch, merged upstream
+
+-------------------------------------------------------------------

Old:
----
  grpclib-0.4.8.tar.gz
  support-new-pytest-asyncio.patch
  support-python-314.patch

New:
----
  grpclib-0.4.9.tar.gz

----------(Old B)----------
  Old:    (#204); pull request courtesy Eric Daniels @edaniels
- Drop support-new-pytest-asyncio.patch, merged upstream
- Drop support-python-314.patch, merged upstream
  Old:- Drop support-new-pytest-asyncio.patch, merged upstream
- Drop support-python-314.patch, merged upstream
----------(Old E)----------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-grpclib.spec ++++++
--- /var/tmp/diff_new_pack.FSXLZE/_old  2026-01-19 18:42:45.237599628 +0100
+++ /var/tmp/diff_new_pack.FSXLZE/_new  2026-01-19 18:42:45.237599628 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-grpclib
 #
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,16 +18,12 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-grpclib
-Version:        0.4.8
+Version:        0.4.9
 Release:        0
 Summary:        Pure-Python gRPC implementation for asyncio
 License:        BSD-3-Clause
 URL:            https://github.com/vmagamedov/grpclib
 Source:         
https://github.com/vmagamedov/grpclib/archive/v%{version}.tar.gz#/grpclib-%{version}.tar.gz
-# PATCH-FIX-UPSTREAM gh#vmagamedov/grpclib#205
-Patch0:         support-new-pytest-asyncio.patch
-# PATCH-FIX-UPSTREAM gh#vmagamedov/grpclib#208
-Patch1:         support-python-314.patch
 BuildRequires:  %{python_module pip}
 BuildRequires:  %{python_module setuptools >= 40.6.0}
 BuildRequires:  %{python_module wheel}

++++++ grpclib-0.4.8.tar.gz -> grpclib-0.4.9.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/.github/workflows/release-dry-run.yaml 
new/grpclib-0.4.9/.github/workflows/release-dry-run.yaml
--- old/grpclib-0.4.8/.github/workflows/release-dry-run.yaml    2025-05-04 
18:21:46.000000000 +0200
+++ new/grpclib-0.4.9/.github/workflows/release-dry-run.yaml    2025-12-14 
23:21:58.000000000 +0100
@@ -9,7 +9,7 @@
     - uses: actions/checkout@v4
     - uses: actions/setup-python@v5
       with:
-        python-version: "3.8"
+        python-version: "3.10"
     - run: pip3 install -r requirements/release.txt
     - run: pip3 install -e .
     - run: make release
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/.github/workflows/release.yaml 
new/grpclib-0.4.9/.github/workflows/release.yaml
--- old/grpclib-0.4.8/.github/workflows/release.yaml    2025-05-04 
18:21:46.000000000 +0200
+++ new/grpclib-0.4.9/.github/workflows/release.yaml    2025-12-14 
23:21:58.000000000 +0100
@@ -13,7 +13,7 @@
         key: pip-${{ hashFiles('requirements/release.txt') }} }}
     - uses: actions/setup-python@v5
       with:
-        python-version: "3.8"
+        python-version: "3.10"
     - run: pip3 install -r requirements/release.txt
     - run: pip3 install -e .
     - run: make release
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/.github/workflows/test.yaml 
new/grpclib-0.4.9/.github/workflows/test.yaml
--- old/grpclib-0.4.8/.github/workflows/test.yaml       2025-05-04 
18:21:46.000000000 +0200
+++ new/grpclib-0.4.9/.github/workflows/test.yaml       2025-12-14 
23:21:58.000000000 +0100
@@ -13,7 +13,7 @@
         key: pip-${{ hashFiles('requirements/check.txt') }}
     - uses: actions/setup-python@v5
       with:
-        python-version: "3.8"
+        python-version: "3.10"
     - run: pip3 install -r requirements/check.txt
     - run: pip3 install -e .
     - run: make proto
@@ -24,7 +24,7 @@
     runs-on: ubuntu-latest
     strategy:
       matrix:
-        python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]
+        python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
     steps:
     - uses: actions/checkout@v4
     - uses: actions/cache@v4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/.readthedocs.yaml 
new/grpclib-0.4.9/.readthedocs.yaml
--- old/grpclib-0.4.8/.readthedocs.yaml 2025-05-04 18:21:46.000000000 +0200
+++ new/grpclib-0.4.9/.readthedocs.yaml 2025-12-14 23:21:58.000000000 +0100
@@ -2,7 +2,7 @@
 build:
   os: ubuntu-22.04
   tools:
-    python: "3.8"
+    python: "3.10"
 sphinx:
   configuration: docs/conf.py
 python:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/LICENSE.txt 
new/grpclib-0.4.9/LICENSE.txt
--- old/grpclib-0.4.8/LICENSE.txt       2025-05-04 18:21:46.000000000 +0200
+++ new/grpclib-0.4.9/LICENSE.txt       2025-12-14 23:21:58.000000000 +0100
@@ -1,4 +1,4 @@
-Copyright (c) 2019, Vladimir Magamedov
+Copyright (c) 2019, Volodymyr Magamedov
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/README.rst new/grpclib-0.4.9/README.rst
--- old/grpclib-0.4.8/README.rst        2025-05-04 18:21:46.000000000 +0200
+++ new/grpclib-0.4.9/README.rst        2025-12-14 23:21:58.000000000 +0100
@@ -2,11 +2,11 @@
 ===========================================
 
 .. image:: 
https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/7e1631d13476f1e870af0d5605b643fc14471a6d/banner-direct-single.svg
-  :target: https://standforukraine.com
+  :target: https://savelife.in.ua/en/
 
 |project|_ |documentation|_ |version|_ |tag|_ |downloads|_ |license|_
 
-This project is based on `hyper-h2`_ and **requires Python >= 3.8**.
+This project is based on `hyper-h2`_ and **requires Python >= 3.10**.
 
 .. contents::
   :local:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/docs/changelog/index.rst 
new/grpclib-0.4.9/docs/changelog/index.rst
--- old/grpclib-0.4.8/docs/changelog/index.rst  2025-05-04 18:21:46.000000000 
+0200
+++ new/grpclib-0.4.9/docs/changelog/index.rst  2025-12-14 23:21:58.000000000 
+0100
@@ -1,6 +1,14 @@
 Changelog
 =========
 
+0.4.9
+~~~~~
+
+  - Added Python 3.14 support; pull request courtesy Thomas J. Fan @thomasjpfan
+  - Dropped Python 3.8 and 3.9 support
+  - Added support for a custom ``DescriptorPool`` for the server reflection
+    (#204); pull request courtesy Eric Daniels @edaniels
+
 0.4.8
 ~~~~~
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/docs/conf.py 
new/grpclib-0.4.9/docs/conf.py
--- old/grpclib-0.4.8/docs/conf.py      2025-05-04 18:21:46.000000000 +0200
+++ new/grpclib-0.4.9/docs/conf.py      2025-12-14 23:21:58.000000000 +0100
@@ -14,8 +14,8 @@
 master_doc = 'index'
 
 project = 'grpclib'
-copyright = '2019, Vladimir Magamedov'
-author = 'Vladimir Magamedov'
+copyright = '2019, Volodymyr Magamedov'
+author = 'Volodymyr Magamedov'
 
 templates_path = []
 
@@ -27,4 +27,4 @@
 
 
 def setup(app):
-    app.add_stylesheet('style.css')
+    app.add_css_file('style.css')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/grpclib/__init__.py 
new/grpclib-0.4.9/grpclib/__init__.py
--- old/grpclib-0.4.8/grpclib/__init__.py       2025-05-04 18:21:46.000000000 
+0200
+++ new/grpclib-0.4.9/grpclib/__init__.py       2025-12-14 23:21:58.000000000 
+0100
@@ -1,7 +1,7 @@
 from .const import Status
 from .exceptions import GRPCError
 
-__version__ = '0.4.8'
+__version__ = '0.4.9'
 
 __all__ = (
     'Status',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/grpclib/_compat.py 
new/grpclib-0.4.9/grpclib/_compat.py
--- old/grpclib-0.4.8/grpclib/_compat.py        1970-01-01 01:00:00.000000000 
+0100
+++ new/grpclib-0.4.9/grpclib/_compat.py        2025-12-14 23:21:58.000000000 
+0100
@@ -0,0 +1,28 @@
+from typing import Dict, Any
+import sys
+
+PY314 = sys.version_info >= (3, 14)
+
+
+def get_annotations(params: Dict[str, Any]) -> Dict[str, Any]:
+    """Get annotations compatible with Python 3.14's deferred annotations."""
+
+    # This recipe was inferred from
+    # https://docs.python.org/3.14/library/annotationlib.html#recipes
+    annotations: Dict[str, Any]
+    if "__annotations__" in params:
+        annotations = params["__annotations__"]
+        return annotations
+    elif PY314:
+        # annotationlib introduced in Python 3.14 to inspect annotations
+        import annotationlib
+
+        annotate = annotationlib.get_annotate_from_class_namespace(params)
+        if annotate is None:
+            return {}
+        annotations = annotationlib.call_annotate_function(
+            annotate, format=annotationlib.Format.FORWARDREF
+        )
+        return annotations
+    else:
+        return {}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/grpclib/client.py 
new/grpclib-0.4.9/grpclib/client.py
--- old/grpclib-0.4.8/grpclib/client.py 2025-05-04 18:21:46.000000000 +0200
+++ new/grpclib-0.4.9/grpclib/client.py 2025-12-14 23:21:58.000000000 +0100
@@ -433,7 +433,7 @@
                 self._messages_received += 1
                 self._stream.connection.messages_received += 1
                 self._stream.connection.last_message_received = 
time.monotonic()
-                return message
+                return message  # type: ignore[no-any-return]
             else:
                 return None
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/grpclib/events.py 
new/grpclib-0.4.9/grpclib/events.py
--- old/grpclib-0.4.8/grpclib/events.py 2025-05-04 18:21:46.000000000 +0200
+++ new/grpclib-0.4.9/grpclib/events.py 2025-12-14 23:21:58.000000000 +0100
@@ -5,6 +5,7 @@
 
 from .const import Status
 from .metadata import Deadline, _Metadata
+from ._compat import get_annotations
 
 
 if TYPE_CHECKING:
@@ -41,7 +42,7 @@
 class _EventMeta(type):
 
     def __new__(mcs, name, bases, params):  # type: ignore
-        annotations = params.get('__annotations__') or {}
+        annotations = get_annotations(params)
         payload = params.get('__payload__') or ()
         params['__slots__'] = tuple(name for name in annotations)
         params['__readonly__'] = frozenset(name for name in annotations
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/grpclib/protocol.py 
new/grpclib-0.4.9/grpclib/protocol.py
--- old/grpclib-0.4.8/grpclib/protocol.py       2025-05-04 18:21:46.000000000 
+0200
+++ new/grpclib-0.4.9/grpclib/protocol.py       2025-12-14 23:21:58.000000000 
+0100
@@ -186,7 +186,7 @@
         self.stream_close_waiter = Event()
 
     def feed(self, data: bytes) -> List[H2Event]:
-        return self._connection.receive_data(data)  # type: ignore
+        return self._connection.receive_data(data)
 
     def ack(self, stream_id: int, size: int) -> None:
         if size:
@@ -414,6 +414,7 @@
         self.connection.headers_send_process()
 
     async def send_data(self, data: bytes, end_stream: bool = False) -> None:
+        assert self.id is not None
         f = BytesIO(data)
         f_pos, f_last = 0, len(data)
 
@@ -450,11 +451,13 @@
                 self.connection.data_send_process()
 
     async def end(self) -> None:
+        assert self.id is not None
         await self.connection.write_ready.wait()
         self._h2_connection.end_stream(self.id)
         self._transport.write(self._h2_connection.data_to_send())
 
     async def reset(self, error_code: ErrorCodes = ErrorCodes.NO_ERROR) -> 
None:
+        assert self.id is not None
         await self.connection.write_ready.wait()
         self._h2_connection.reset_stream(self.id, error_code=error_code)
         self._transport.write(self._h2_connection.data_to_send())
@@ -463,6 +466,7 @@
         self,
         error_code: ErrorCodes = ErrorCodes.NO_ERROR,
     ) -> None:
+        assert self.id is not None
         self._h2_connection.reset_stream(self.id, error_code=error_code)
         if self.connection.write_ready.is_set():
             self._transport.write(self._h2_connection.data_to_send())
@@ -476,6 +480,7 @@
 
     @property
     def closable(self) -> bool:
+        assert self.id is not None
         if self._transport.is_closing():
             return False
         if self._h2_connection.state_machine.state is ConnectionState.CLOSED:
@@ -569,18 +574,22 @@
         except AttributeError:
             pass  # connection was closed and self.processors was deleted
         else:
-            proc(event)
+            proc(event)  # type: ignore[operator]
 
     def process_request_received(self, event: RequestReceived) -> None:
         stream = self.connection.create_stream(stream_id=event.stream_id)
         release_stream = self.register(stream)
-        self.handler.accept(stream, event.headers, release_stream)
+        self.handler.accept(
+            stream,
+            event.headers,  # type: ignore[arg-type]
+            release_stream,
+        )
         # TODO: check EOF
 
     def process_response_received(self, event: ResponseReceived) -> None:
         stream = self.streams.get(event.stream_id)
         if stream is not None:
-            stream.headers = event.headers
+            stream.headers = event.headers  # type: ignore[assignment]
             stream.headers_received.set()
 
     def process_remote_settings_changed(
@@ -626,7 +635,7 @@
     def process_trailers_received(self, event: TrailersReceived) -> None:
         stream = self.streams.get(event.stream_id)
         if stream is not None:
-            stream.trailers = event.headers
+            stream.trailers = event.headers  # type: ignore[assignment]
             stream.trailers_received.set()
 
     def process_stream_ended(self, event: StreamEnded) -> None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/grpclib/reflection/_deprecated.py 
new/grpclib-0.4.9/grpclib/reflection/_deprecated.py
--- old/grpclib-0.4.8/grpclib/reflection/_deprecated.py 2025-05-04 
18:21:46.000000000 +0200
+++ new/grpclib-0.4.9/grpclib/reflection/_deprecated.py 2025-12-14 
23:21:58.000000000 +0100
@@ -14,7 +14,7 @@
 #     See the License for the specific language governing permissions and
 #     limitations under the License.
 #
-from typing import Collection
+from typing import Any, Collection, Optional
 
 from google.protobuf.descriptor import FileDescriptor
 from google.protobuf.descriptor_pb2 import FileDescriptorProto
@@ -35,10 +35,14 @@
     """
     Implements server reflection protocol.
     """
-    def __init__(self, *, _service_names: Collection[str]):
+    def __init__(
+        self, *,
+        _service_names: Collection[str],
+        _pool: Optional[Any] = None
+    ):
         self._service_names = _service_names
         # FIXME: DescriptorPool has incomplete typings
-        self._pool = Default()  # type: ignore
+        self._pool = _pool or Default()  # type: ignore
 
     def _not_found_response(self) -> ServerReflectionResponse:
         return ServerReflectionResponse(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/grpclib/reflection/service.py 
new/grpclib-0.4.9/grpclib/reflection/service.py
--- old/grpclib-0.4.8/grpclib/reflection/service.py     2025-05-04 
18:21:46.000000000 +0200
+++ new/grpclib-0.4.9/grpclib/reflection/service.py     2025-12-14 
23:21:58.000000000 +0100
@@ -14,7 +14,7 @@
 #     See the License for the specific language governing permissions and
 #     limitations under the License.
 #
-from typing import TYPE_CHECKING, Collection, List
+from typing import TYPE_CHECKING, Any, Collection, List, Optional
 
 from google.protobuf.descriptor import FileDescriptor
 from google.protobuf.descriptor_pb2 import FileDescriptorProto
@@ -41,10 +41,14 @@
     """
     Implements server reflection protocol.
     """
-    def __init__(self, *, _service_names: Collection[str]):
+    def __init__(
+        self, *,
+        _service_names: Collection[str],
+        _pool: Optional[Any] = None
+    ):
         self._service_names = _service_names
         # FIXME: DescriptorPool has incomplete typings
-        self._pool = Default()  # type: ignore
+        self._pool = _pool or Default()  # type: ignore
 
     def _not_found_response(self) -> ServerReflectionResponse:
         return ServerReflectionResponse(
@@ -161,7 +165,11 @@
             await stream.send_message(response)
 
     @classmethod
-    def extend(cls, services: 'Collection[IServable]') -> 'List[IServable]':
+    def extend(
+        cls, services: 'Collection[IServable]',
+        *,
+        pool: Optional[Any] = None
+    ) -> 'List[IServable]':
         """
         Extends services list with reflection service:
 
@@ -181,6 +189,7 @@
         for service in services:
             service_names.append(_service_name(service))
         services = list(services)
-        services.append(cls(_service_names=service_names))
-        services.append(_ServerReflectionV1Alpha(_service_names=service_names))
+        services.append(cls(_service_names=service_names, _pool=pool))
+        services.append(
+            _ServerReflectionV1Alpha(_service_names=service_names, _pool=pool))
         return services
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/grpclib/server.py 
new/grpclib-0.4.9/grpclib/server.py
--- old/grpclib-0.4.8/grpclib/server.py 2025-05-04 18:21:46.000000000 +0200
+++ new/grpclib-0.4.9/grpclib/server.py 2025-12-14 23:21:58.000000000 +0100
@@ -139,7 +139,7 @@
             self._messages_received += 1
             self._stream.connection.messages_received += 1
             self._stream.connection.last_message_received = time.monotonic()
-            return message
+            return message  # type: ignore[no-any-return]
         else:
             return None
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/requirements/check.in 
new/grpclib-0.4.9/requirements/check.in
--- old/grpclib-0.4.8/requirements/check.in     2025-05-04 18:21:46.000000000 
+0200
+++ new/grpclib-0.4.9/requirements/check.in     2025-12-14 23:21:58.000000000 
+0100
@@ -1,6 +1,5 @@
 -r runtime.in
-grpcio-tools
+grpcio-tools==1.62.1
 mypy
-mypy-protobuf
+mypy-protobuf==3.6.0
 flake8
-types-certifi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/requirements/check.txt 
new/grpclib-0.4.9/requirements/check.txt
--- old/grpclib-0.4.8/requirements/check.txt    2025-05-04 18:21:46.000000000 
+0200
+++ new/grpclib-0.4.9/requirements/check.txt    2025-12-14 23:21:58.000000000 
+0100
@@ -1,29 +1,30 @@
 #
-# This file is autogenerated by pip-compile with Python 3.8
+# This file is autogenerated by pip-compile with Python 3.10
 # by the following command:
 #
 #    pip-compile --annotation-style=line requirements/check.in
 #
-certifi==2024.2.2         # via -r requirements/runtime.in
-flake8==7.0.0             # via -r requirements/check.in
-googleapis-common-protos==1.63.0  # via -r requirements/runtime.in
-grpcio==1.62.1            # via grpcio-tools
+certifi==2025.11.12       # via -r requirements/runtime.in
+flake8==7.3.0             # via -r requirements/check.in
+googleapis-common-protos==1.72.0  # via -r requirements/runtime.in
+grpcio==1.76.0            # via grpcio-tools
 grpcio-tools==1.62.1      # via -r requirements/check.in
-h2==4.1.0                 # via -r requirements/../setup.txt
-hpack==4.0.0              # via -r requirements/../setup.txt, h2
-hyperframe==6.0.1         # via -r requirements/../setup.txt, h2
+h2==4.3.0                 # via -r setup.txt
+hpack==4.1.0              # via -r setup.txt, h2
+hyperframe==6.1.0         # via -r setup.txt, h2
+librt==0.7.3              # via mypy
 mccabe==0.7.0             # via flake8
-multidict==6.0.5          # via -r requirements/../setup.txt
-mypy==1.9.0               # via -r requirements/check.in
-mypy-extensions==1.0.0    # via mypy
+multidict==6.7.0          # via -r setup.txt
+mypy==1.19.0              # via -r requirements/check.in
+mypy-extensions==1.1.0    # via mypy
 mypy-protobuf==3.6.0      # via -r requirements/check.in
-protobuf==4.25.3          # via -r requirements/runtime.in, 
googleapis-common-protos, grpcio-tools, mypy-protobuf
-pycodestyle==2.11.1       # via flake8
-pyflakes==3.2.0           # via flake8
-tomli==2.0.1              # via mypy
-types-certifi==2021.10.8.3  # via -r requirements/check.in
-types-protobuf==4.25.0.20240417  # via mypy-protobuf
-typing-extensions==4.11.0  # via mypy
+pathspec==0.12.1          # via mypy
+protobuf==4.25.8          # via -r requirements/runtime.in, 
googleapis-common-protos, grpcio-tools, mypy-protobuf
+pycodestyle==2.14.0       # via flake8
+pyflakes==3.4.0           # via flake8
+tomli==2.3.0              # via mypy
+types-protobuf==6.32.1.20251210  # via mypy-protobuf
+typing-extensions==4.15.0  # via -r setup.txt, grpcio, multidict, mypy
 
 # The following packages are considered to be unsafe in a requirements file:
 # setuptools
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/requirements/docs.txt 
new/grpclib-0.4.9/requirements/docs.txt
--- old/grpclib-0.4.8/requirements/docs.txt     2025-05-04 18:21:46.000000000 
+0200
+++ new/grpclib-0.4.9/requirements/docs.txt     2025-12-14 23:21:58.000000000 
+0100
@@ -1,38 +1,37 @@
 #
-# This file is autogenerated by pip-compile with Python 3.8
+# This file is autogenerated by pip-compile with Python 3.10
 # by the following command:
 #
 #    pip-compile --annotation-style=line requirements/docs.in
 #
-alabaster==0.7.13         # via sphinx
-babel==2.14.0             # via sphinx
-certifi==2024.2.2         # via -r requirements/runtime.in, requests
-charset-normalizer==3.3.2  # via requests
-docutils==0.20.1          # via sphinx, sphinx-rtd-theme
-googleapis-common-protos==1.63.0  # via -r requirements/runtime.in
-h2==4.1.0                 # via -r requirements/../setup.txt
-hpack==4.0.0              # via -r requirements/../setup.txt, h2
-hyperframe==6.0.1         # via -r requirements/../setup.txt, h2
-idna==3.7                 # via requests
+alabaster==1.0.0          # via sphinx
+babel==2.17.0             # via sphinx
+certifi==2025.11.12       # via -r requirements/runtime.in, requests
+charset-normalizer==3.4.4  # via requests
+docutils==0.21.2          # via sphinx, sphinx-rtd-theme
+googleapis-common-protos==1.72.0  # via -r requirements/runtime.in
+h2==4.3.0                 # via -r setup.txt
+hpack==4.1.0              # via -r setup.txt, h2
+hyperframe==6.1.0         # via -r setup.txt, h2
+idna==3.11                # via requests
 imagesize==1.4.1          # via sphinx
-importlib-metadata==7.1.0  # via sphinx
-jinja2==3.1.3             # via sphinx
-markupsafe==2.1.5         # via jinja2
-multidict==6.0.5          # via -r requirements/../setup.txt
-packaging==24.0           # via sphinx
-protobuf==4.25.3          # via -r requirements/runtime.in, 
googleapis-common-protos
-pygments==2.17.2          # via sphinx
-pytz==2024.1              # via babel
-requests==2.31.0          # via sphinx
-snowballstemmer==2.2.0    # via sphinx
-sphinx==7.1.2             # via -r requirements/docs.in, sphinx-rtd-theme, 
sphinxcontrib-jquery
-sphinx-rtd-theme==2.0.0   # via -r requirements/docs.in
-sphinxcontrib-applehelp==1.0.4  # via sphinx
-sphinxcontrib-devhelp==1.0.2  # via sphinx
-sphinxcontrib-htmlhelp==2.0.1  # via sphinx
+jinja2==3.1.6             # via sphinx
+markupsafe==3.0.3         # via jinja2
+multidict==6.7.0          # via -r setup.txt
+packaging==25.0           # via sphinx
+protobuf==6.33.1          # via -r requirements/runtime.in, 
googleapis-common-protos
+pygments==2.19.2          # via sphinx
+requests==2.32.5          # via sphinx
+snowballstemmer==3.0.1    # via sphinx
+sphinx==8.1.3             # via -r requirements/docs.in, sphinx-rtd-theme, 
sphinxcontrib-jquery
+sphinx-rtd-theme==3.0.2   # via -r requirements/docs.in
+sphinxcontrib-applehelp==2.0.0  # via sphinx
+sphinxcontrib-devhelp==2.0.0  # via sphinx
+sphinxcontrib-htmlhelp==2.1.0  # via sphinx
 sphinxcontrib-jquery==4.1  # via sphinx-rtd-theme
 sphinxcontrib-jsmath==1.0.1  # via sphinx
-sphinxcontrib-qthelp==1.0.3  # via sphinx
-sphinxcontrib-serializinghtml==1.1.5  # via sphinx
-urllib3==2.2.1            # via requests
-zipp==3.18.1              # via importlib-metadata
+sphinxcontrib-qthelp==2.0.0  # via sphinx
+sphinxcontrib-serializinghtml==2.0.0  # via sphinx
+tomli==2.3.0              # via sphinx
+typing-extensions==4.15.0  # via -r setup.txt, multidict
+urllib3==2.5.0            # via requests
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/requirements/release.in 
new/grpclib-0.4.9/requirements/release.in
--- old/grpclib-0.4.8/requirements/release.in   2025-05-04 18:21:46.000000000 
+0200
+++ new/grpclib-0.4.9/requirements/release.in   2025-12-14 23:21:58.000000000 
+0100
@@ -1,5 +1,5 @@
 -r ../setup.txt
 twine
-grpcio-tools
-mypy-protobuf
+grpcio-tools==1.62.1
+mypy-protobuf==3.6.0
 wheel
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/requirements/release.txt 
new/grpclib-0.4.9/requirements/release.txt
--- old/grpclib-0.4.8/requirements/release.txt  2025-05-04 18:21:46.000000000 
+0200
+++ new/grpclib-0.4.9/requirements/release.txt  2025-12-14 23:21:58.000000000 
+0100
@@ -1,50 +1,45 @@
 #
-# This file is autogenerated by pip-compile with Python 3.8
+# This file is autogenerated by pip-compile with Python 3.10
 # by the following command:
 #
 #    pip-compile --annotation-style=line requirements/release.in
 #
-backports-tarfile==1.1.0  # via jaraco-context
-certifi==2024.2.2         # via requests
-cffi==1.16.0              # via cryptography
-charset-normalizer==3.3.2  # via requests
-cryptography==42.0.5      # via secretstorage
-docutils==0.20.1          # via readme-renderer
-grpcio==1.62.1            # via grpcio-tools
+backports-tarfile==1.2.0  # via jaraco-context
+certifi==2025.11.12       # via requests
+charset-normalizer==3.4.4  # via requests
+docutils==0.22.3          # via readme-renderer
+grpcio==1.76.0            # via grpcio-tools
 grpcio-tools==1.62.1      # via -r requirements/release.in
-h2==4.1.0                 # via -r requirements/../setup.txt
-hpack==4.0.0              # via -r requirements/../setup.txt, h2
-hyperframe==6.0.1         # via -r requirements/../setup.txt, h2
-idna==3.7                 # via requests
-importlib-metadata==7.1.0  # via keyring, twine
-importlib-resources==6.4.0  # via keyring
+h2==4.3.0                 # via -r setup.txt
+hpack==4.1.0              # via -r setup.txt, h2
+hyperframe==6.1.0         # via -r setup.txt, h2
+id==1.5.0                 # via twine
+idna==3.11                # via requests
+importlib-metadata==8.7.0  # via keyring
 jaraco-classes==3.4.0     # via keyring
-jaraco-context==5.3.0     # via keyring
-jaraco-functools==4.0.0   # via keyring
-jeepney==0.8.0            # via keyring, secretstorage
-keyring==25.1.0           # via twine
-markdown-it-py==3.0.0     # via rich
+jaraco-context==6.0.1     # via keyring
+jaraco-functools==4.3.0   # via keyring
+keyring==25.7.0           # via twine
+markdown-it-py==4.0.0     # via rich
 mdurl==0.1.2              # via markdown-it-py
-more-itertools==10.2.0    # via jaraco-classes, jaraco-functools
-multidict==6.0.5          # via -r requirements/../setup.txt
+more-itertools==10.8.0    # via jaraco-classes, jaraco-functools
+multidict==6.7.0          # via -r setup.txt
 mypy-protobuf==3.6.0      # via -r requirements/release.in
-nh3==0.2.17               # via readme-renderer
-pkginfo==1.10.0           # via twine
-protobuf==4.25.3          # via grpcio-tools, mypy-protobuf
-pycparser==2.22           # via cffi
-pygments==2.17.2          # via readme-renderer, rich
-readme-renderer==43.0     # via twine
-requests==2.31.0          # via requests-toolbelt, twine
+nh3==0.3.2                # via readme-renderer
+packaging==25.0           # via twine
+protobuf==4.25.8          # via grpcio-tools, mypy-protobuf
+pygments==2.19.2          # via readme-renderer, rich
+readme-renderer==44.0     # via twine
+requests==2.32.5          # via id, requests-toolbelt, twine
 requests-toolbelt==1.0.0  # via twine
 rfc3986==2.0.0            # via twine
-rich==13.7.1              # via twine
-secretstorage==3.3.3      # via keyring
-twine==5.0.0              # via -r requirements/release.in
-types-protobuf==4.25.0.20240417  # via mypy-protobuf
-typing-extensions==4.11.0  # via rich
-urllib3==2.2.1            # via requests, twine
-wheel==0.43.0             # via -r requirements/release.in
-zipp==3.18.1              # via importlib-metadata, importlib-resources
+rich==14.2.0              # via twine
+twine==6.2.0              # via -r requirements/release.in
+types-protobuf==6.32.1.20251210  # via mypy-protobuf
+typing-extensions==4.15.0  # via -r setup.txt, grpcio, multidict
+urllib3==2.6.2            # via requests, twine
+wheel==0.45.1             # via -r requirements/release.in
+zipp==3.23.0              # via importlib-metadata
 
 # The following packages are considered to be unsafe in a requirements file:
 # setuptools
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/requirements/runtime.txt 
new/grpclib-0.4.9/requirements/runtime.txt
--- old/grpclib-0.4.8/requirements/runtime.txt  2025-05-04 18:21:46.000000000 
+0200
+++ new/grpclib-0.4.9/requirements/runtime.txt  2025-12-14 23:21:58.000000000 
+0100
@@ -1,13 +1,14 @@
 #
-# This file is autogenerated by pip-compile with Python 3.8
+# This file is autogenerated by pip-compile with Python 3.10
 # by the following command:
 #
 #    pip-compile --annotation-style=line requirements/runtime.in
 #
-certifi==2024.2.2         # via -r requirements/runtime.in
-googleapis-common-protos==1.63.0  # via -r requirements/runtime.in
-h2==4.1.0                 # via -r requirements/../setup.txt
-hpack==4.0.0              # via -r requirements/../setup.txt, h2
-hyperframe==6.0.1         # via -r requirements/../setup.txt, h2
-multidict==6.0.5          # via -r requirements/../setup.txt
-protobuf==4.25.3          # via -r requirements/runtime.in, 
googleapis-common-protos
+certifi==2025.11.12       # via -r requirements/runtime.in
+googleapis-common-protos==1.72.0  # via -r requirements/runtime.in
+h2==4.3.0                 # via -r setup.txt
+hpack==4.1.0              # via -r setup.txt, h2
+hyperframe==6.1.0         # via -r setup.txt, h2
+multidict==6.7.0          # via -r setup.txt
+protobuf==6.33.1          # via -r requirements/runtime.in, 
googleapis-common-protos
+typing-extensions==4.15.0  # via -r setup.txt, multidict
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/requirements/test.in 
new/grpclib-0.4.9/requirements/test.in
--- old/grpclib-0.4.8/requirements/test.in      2025-05-04 18:21:46.000000000 
+0200
+++ new/grpclib-0.4.9/requirements/test.in      2025-12-14 23:21:58.000000000 
+0100
@@ -3,4 +3,5 @@
 pytest-cov
 pytest-asyncio
 async_timeout
+backports-asyncio-runner; python_version < '3.11'
 faker
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/requirements/test.txt 
new/grpclib-0.4.9/requirements/test.txt
--- old/grpclib-0.4.8/requirements/test.txt     2025-05-04 18:21:46.000000000 
+0200
+++ new/grpclib-0.4.9/requirements/test.txt     2025-12-14 23:21:58.000000000 
+0100
@@ -1,27 +1,28 @@
 #
-# This file is autogenerated by pip-compile with Python 3.8
+# This file is autogenerated by pip-compile with Python 3.10
 # by the following command:
 #
 #    pip-compile --annotation-style=line requirements/test.in
 #
-async-timeout==4.0.3      # via -r requirements/test.in
-certifi==2024.2.2         # via -r requirements/runtime.in
-coverage[toml]==7.4.4     # via pytest-cov
-exceptiongroup==1.2.0     # via pytest
-faker==24.11.0            # via -r requirements/test.in
-googleapis-common-protos==1.63.0  # via -r requirements/runtime.in
-h2==4.1.0                 # via -r requirements/../setup.txt
-hpack==4.0.0              # via -r requirements/../setup.txt, h2
-hyperframe==6.0.1         # via -r requirements/../setup.txt, h2
-iniconfig==2.0.0          # via pytest
-multidict==6.0.5          # via -r requirements/../setup.txt
-packaging==24.0           # via pytest
-pluggy==1.4.0             # via pytest
-protobuf==4.25.3          # via -r requirements/runtime.in, 
googleapis-common-protos
-pytest==8.1.1             # via -r requirements/test.in, pytest-asyncio, 
pytest-cov
-pytest-asyncio==0.23.6    # via -r requirements/test.in
-pytest-cov==5.0.0         # via -r requirements/test.in
-python-dateutil==2.9.0.post0  # via faker
-six==1.16.0               # via python-dateutil
-tomli==2.0.1              # via coverage, pytest
-typing-extensions==4.11.0  # via faker
+async-timeout==5.0.1      # via -r requirements/test.in
+backports-asyncio-runner==1.2.0 ; python_version < "3.11"  # via -r 
requirements/test.in, pytest-asyncio
+certifi==2025.11.12       # via -r requirements/runtime.in
+coverage[toml]==7.12.0    # via pytest-cov
+exceptiongroup==1.3.1     # via pytest
+faker==38.2.0             # via -r requirements/test.in
+googleapis-common-protos==1.72.0  # via -r requirements/runtime.in
+h2==4.3.0                 # via -r setup.txt
+hpack==4.1.0              # via -r setup.txt, h2
+hyperframe==6.1.0         # via -r setup.txt, h2
+iniconfig==2.3.0          # via pytest
+multidict==6.7.0          # via -r setup.txt
+packaging==25.0           # via pytest
+pluggy==1.6.0             # via pytest, pytest-cov
+protobuf==6.33.1          # via -r requirements/runtime.in, 
googleapis-common-protos
+pygments==2.19.2          # via pytest
+pytest==9.0.1             # via -r requirements/test.in, pytest-asyncio, 
pytest-cov
+pytest-asyncio==1.3.0     # via -r requirements/test.in
+pytest-cov==7.0.0         # via -r requirements/test.in
+tomli==2.3.0              # via coverage, pytest
+typing-extensions==4.15.0  # via -r setup.txt, exceptiongroup, multidict, 
pytest-asyncio
+tzdata==2025.2            # via faker
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/setup.cfg new/grpclib-0.4.9/setup.cfg
--- old/grpclib-0.4.8/setup.cfg 2025-05-04 18:21:46.000000000 +0200
+++ new/grpclib-0.4.9/setup.cfg 2025-12-14 23:21:58.000000000 +0100
@@ -6,7 +6,7 @@
 description = Pure-Python gRPC implementation for asyncio
 long_description = file: README.rst
 long_description_content_type = text/x-rst
-author = Vladimir Magamedov
+author = Volodymyr Magamedov
 author_email = [email protected]
 url = https://github.com/vmagamedov/grpclib
 classifiers =
@@ -15,18 +15,18 @@
     License :: OSI Approved :: BSD License
     Operating System :: OS Independent
     Programming Language :: Python
-    Programming Language :: Python :: 3.8
-    Programming Language :: Python :: 3.9
     Programming Language :: Python :: 3.10
     Programming Language :: Python :: 3.11
     Programming Language :: Python :: 3.12
+    Programming Language :: Python :: 3.13
+    Programming Language :: Python :: 3.14
     Programming Language :: Python :: 3 :: Only
     Topic :: Internet :: WWW/HTTP :: HTTP Servers
     Topic :: Software Development :: Libraries :: Python Modules
 
 [options]
 packages = find:
-python_requires = >=3.8
+python_requires = >=3.10
 install_requires=
     h2<5,>=3.1.0
     multidict
@@ -48,7 +48,7 @@
 [tool:pytest]
 addopts = -q --tb=native
 testpaths = tests
-asyncio_mode = auto
+asyncio_mode = strict
 filterwarnings =
     error
     ignore:.*pkg_resources.*:DeprecationWarning
@@ -98,3 +98,6 @@
 
 [mypy-google.rpc.*]
 ignore_missing_imports = true
+
+[mypy-annotationlib.*]
+ignore_missing_imports = true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/setup.py new/grpclib-0.4.9/setup.py
--- old/grpclib-0.4.8/setup.py  2025-05-04 18:21:46.000000000 +0200
+++ new/grpclib-0.4.9/setup.py  2025-12-14 23:21:58.000000000 +0100
@@ -2,5 +2,5 @@
 
 setuptools.setup(
     name="grpclib",
-    python_requires='>=3.8',
+    python_requires='>=3.10',
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/setup.txt new/grpclib-0.4.9/setup.txt
--- old/grpclib-0.4.8/setup.txt 2025-05-04 18:21:46.000000000 +0200
+++ new/grpclib-0.4.9/setup.txt 2025-12-14 23:21:58.000000000 +0100
@@ -1,10 +1,11 @@
 #
-# This file is autogenerated by pip-compile with Python 3.8
+# This file is autogenerated by pip-compile with Python 3.10
 # by the following command:
 #
 #    pip-compile --annotation-style=line --output-file=setup.txt setup.py
 #
-h2==4.1.0                 # via grpclib (setup.py)
-hpack==4.0.0              # via h2
-hyperframe==6.0.1         # via h2
-multidict==6.0.5          # via grpclib (setup.py)
+h2==4.3.0                 # via grpclib (setup.py)
+hpack==4.1.0              # via h2
+hyperframe==6.1.0         # via h2
+multidict==6.7.0          # via grpclib (setup.py)
+typing-extensions==4.15.0  # via multidict
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/tests/conftest.py 
new/grpclib-0.4.9/tests/conftest.py
--- old/grpclib-0.4.8/tests/conftest.py 2025-05-04 18:21:46.000000000 +0200
+++ new/grpclib-0.4.9/tests/conftest.py 2025-12-14 23:21:58.000000000 +0100
@@ -1,12 +1,15 @@
+import asyncio
+
 import pytest
+import pytest_asyncio
 
 from grpclib.config import Configuration
 
 
[email protected](name='loop')
-def loop_fixture(event_loop):
+@pytest_asyncio.fixture(name='loop')
+async def loop_fixture():
     """ Shortcut """
-    return event_loop
+    return asyncio.get_running_loop()
 
 
 @pytest.fixture(name='config')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/tests/test_client_channel.py 
new/grpclib-0.4.9/tests/test_client_channel.py
--- old/grpclib-0.4.8/tests/test_client_channel.py      2025-05-04 
18:21:46.000000000 +0200
+++ new/grpclib-0.4.9/tests/test_client_channel.py      2025-12-14 
23:21:58.000000000 +0100
@@ -48,7 +48,8 @@
     )
 
 
-def test_default_ssl_context():
[email protected]
+async def test_default_ssl_context():
     with patch.object(certifi, "where", return_value=certifi.where()) as po:
         certifi_channel = Channel(ssl=True)
         assert certifi_channel._ssl
@@ -80,7 +81,8 @@
             )
 
 
-def test_default_verify_paths():
[email protected]
+async def test_default_verify_paths():
     with contextlib.ExitStack() as cm:
         tf = cm.enter_context(tempfile.NamedTemporaryFile()).name
         td = cm.enter_context(tempfile.TemporaryDirectory())
@@ -98,7 +100,8 @@
         assert default_verify_paths.openssl_capath_env == "SSL_CERT_DIR"
 
 
-def test_no_ssl_support():
[email protected]
+async def test_no_ssl_support():
     with patch.object(grpclib.client, "_ssl", None):
         Channel()
         with pytest.raises(RuntimeError) as err:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/tests/test_reflection.py 
new/grpclib-0.4.9/tests/test_reflection.py
--- old/grpclib-0.4.8/tests/test_reflection.py  2025-05-04 18:21:46.000000000 
+0200
+++ new/grpclib-0.4.9/tests/test_reflection.py  2025-12-14 23:21:58.000000000 
+0100
@@ -1,5 +1,7 @@
 import socket
 
+from google.protobuf.descriptor_pool import DescriptorPool
+
 import pytest
 import pytest_asyncio
 
@@ -108,3 +110,45 @@
 
     service, = r1.list_services_response.service
     assert service.name == 
DESCRIPTOR.services_by_name['DummyService'].full_name
+
+
[email protected]
+async def test_file_containing_symbol_response_custom_pool(port):
+    my_pool = DescriptorPool()
+    services = [DummyService()]
+    services = ServerReflection.extend(services, pool=my_pool)
+
+    server = Server(services)
+    await server.start(port=port)
+
+    channel = Channel(port=port)
+    try:
+        # because we use our own pool (my_pool), there's no descriptors to 
find.
+        req = ServerReflectionRequest(
+            file_containing_symbol=(
+                DESCRIPTOR.message_types_by_name['DummyRequest'].full_name
+            ),
+        )
+        resp, = await ServerReflectionStub(channel).ServerReflectionInfo([req])
+
+        assert resp == ServerReflectionResponse(
+            error_response=ErrorResponse(
+                error_code=5,
+                error_message='not found',
+            ),
+        )
+
+        # once we update the pool, we should find the descriptor.
+        my_pool.AddSerializedFile(DESCRIPTOR.serialized_pb)
+
+        resp, = await ServerReflectionStub(channel).ServerReflectionInfo([req])
+
+        proto_bytes, = resp.file_descriptor_response.file_descriptor_proto
+        dummy_proto = FileDescriptorProto()
+        dummy_proto.ParseFromString(proto_bytes)
+        assert dummy_proto.name == DESCRIPTOR.name
+        assert dummy_proto.package == DESCRIPTOR.package
+    finally:
+        channel.close()
+        server.close()
+        await server.wait_closed()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/grpclib-0.4.8/tests/test_utils.py 
new/grpclib-0.4.9/tests/test_utils.py
--- old/grpclib-0.4.8/tests/test_utils.py       2025-05-04 18:21:46.000000000 
+0200
+++ new/grpclib-0.4.9/tests/test_utils.py       2025-12-14 23:21:58.000000000 
+0100
@@ -92,7 +92,7 @@
         await server.wait_closed()
 
 if __name__ == '__main__':
-    asyncio.get_event_loop().run_until_complete(main())
+    asyncio.run(main())
 """
 
 
@@ -125,7 +125,7 @@
         await asyncio.sleep(10)
 
 if __name__ == '__main__':
-    asyncio.get_event_loop().run_until_complete(main())
+    asyncio.run(main())
 """
 
 

Reply via email to