41 lines
1,020 B
Python
41 lines
1,020 B
Python
|
from typing import List
|
||
|
|
||
|
from grpclib.client import Channel
|
||
|
|
||
|
|
||
|
class MockChannel(Channel):
|
||
|
# noinspection PyMissingConstructor
|
||
|
def __init__(self, responses=None) -> None:
|
||
|
self.responses = responses or []
|
||
|
self.requests = []
|
||
|
self._loop = None
|
||
|
|
||
|
def request(self, route, cardinality, request, response_type, **kwargs):
|
||
|
self.requests.append(
|
||
|
{
|
||
|
"route": route,
|
||
|
"cardinality": cardinality,
|
||
|
"request": request,
|
||
|
"response_type": response_type,
|
||
|
}
|
||
|
)
|
||
|
return MockStream(self.responses)
|
||
|
|
||
|
|
||
|
class MockStream:
|
||
|
def __init__(self, responses: List) -> None:
|
||
|
super().__init__()
|
||
|
self.responses = responses
|
||
|
|
||
|
async def recv_message(self):
|
||
|
return self.responses.pop(0)
|
||
|
|
||
|
async def send_message(self, *args, **kwargs):
|
||
|
pass
|
||
|
|
||
|
async def __aexit__(self, exc_type, exc_val, exc_tb):
|
||
|
return True
|
||
|
|
||
|
async def __aenter__(self):
|
||
|
return self
|