Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/httpx/_transports/mock.py: 50%

16 statements  

« prev     ^ index     » next       coverage.py v7.2.2, created at 2023-03-26 06:12 +0000

1import asyncio 

2import typing 

3 

4from .._models import Request, Response 

5from .base import AsyncBaseTransport, BaseTransport 

6 

7 

8class MockTransport(AsyncBaseTransport, BaseTransport): 

9 def __init__(self, handler: typing.Callable[[Request], Response]) -> None: 

10 self.handler = handler 

11 

12 def handle_request( 

13 self, 

14 request: Request, 

15 ) -> Response: 

16 request.read() 

17 return self.handler(request) 

18 

19 async def handle_async_request( 

20 self, 

21 request: Request, 

22 ) -> Response: 

23 await request.aread() 

24 response = self.handler(request) 

25 

26 # Allow handler to *optionally* be an `async` function. 

27 # If it is, then the `response` variable need to be awaited to actually 

28 # return the result. 

29 

30 # https://simonwillison.net/2020/Sep/2/await-me-maybe/ 

31 if asyncio.iscoroutine(response): 

32 response = await response 

33 

34 return response