]> git.ipfire.org Git - thirdparty/httpx.git/commitdiff
Add BaseEvent interface (#260)
authorFlorimond Manca <florimond.manca@gmail.com>
Wed, 21 Aug 2019 07:02:04 +0000 (09:02 +0200)
committerGitHub <noreply@github.com>
Wed, 21 Aug 2019 07:02:04 +0000 (09:02 +0200)
httpx/concurrency/asyncio.py
httpx/concurrency/base.py
httpx/dispatch/asgi.py

index f378e4d940a42d1458c8e2e218bfe551246abc33..8fa19e9fdc4e94b437c6a797e819aa987a519cae 100644 (file)
@@ -17,6 +17,7 @@ from types import TracebackType
 from .base import (
     BaseBackgroundManager,
     BasePoolSemaphore,
+    BaseEvent,
     BaseQueue,
     BaseReader,
     BaseWriter,
@@ -219,6 +220,9 @@ class AsyncioBackend(ConcurrencyBackend):
     def create_queue(self, max_size: int) -> BaseQueue:
         return typing.cast(BaseQueue, asyncio.Queue(maxsize=max_size))
 
+    def create_event(self) -> BaseEvent:
+        return typing.cast(BaseEvent, asyncio.Event())
+
     def background_manager(
         self, coroutine: typing.Callable, args: typing.Any
     ) -> "BackgroundManager":
index 1a6842b85267221a348a513e4e5080d5730a1506..077961d20757ce218c3067ae5c2fd1f2b6874bcd 100644 (file)
@@ -82,6 +82,21 @@ class BaseQueue:
         raise NotImplementedError()  # pragma: no cover
 
 
+class BaseEvent:
+    """
+    An event object. Abstracts away any asyncio-specific interfaces.
+    """
+
+    def set(self) -> None:
+        raise NotImplementedError()  # pragma: no cover
+
+    def is_set(self) -> bool:
+        raise NotImplementedError()  # pragma: no cover
+
+    async def wait(self) -> None:
+        raise NotImplementedError()  # pragma: no cover
+
+
 class BasePoolSemaphore:
     """
     A semaphore for use with connection pooling.
@@ -145,6 +160,9 @@ class ConcurrencyBackend:
     def create_queue(self, max_size: int) -> BaseQueue:
         raise NotImplementedError()  # pragma: no cover
 
+    def create_event(self) -> BaseEvent:
+        raise NotImplementedError()  # pragma: no cover
+
     def background_manager(
         self, coroutine: typing.Callable, args: typing.Any
     ) -> "BaseBackgroundManager":
index bf926f482cf4bf06e133ace20a0e0971cbdb4a79..589bf8c832af611c0df2bf46de9ebe74bc7eae9d 100644 (file)
@@ -82,7 +82,7 @@ class ASGIDispatch(AsyncDispatcher):
         app_exc = None
         status_code = None
         headers = None
-        response_started_or_failed = asyncio.Event()
+        response_started_or_failed = self.backend.create_event()
         response_body = BodyIterator(self.backend)
         request_stream = request.stream()