class MockServer: def __init__(self, server): # type: (_MockServer) -> None self._server = server self._running = False self.context = ExitStack() @property def port(self): return self._server.port @property def host(self): return self._server.host def set_responses(self, responses): # type: (Iterable[Responder]) -> None assert not self._running, "responses cannot be set on running server" self._server.mock.side_effect = responses def start(self): # type: () -> None assert not self._running, "running server cannot be started" self.context.enter_context(server_running(self._server)) self.context.enter_context(self._set_running()) @contextmanager def _set_running(self): self._running = True try: yield finally: self._running = False def stop(self): # type: () -> None assert self._running, "idle server cannot be stopped" self.context.close() def get_requests(self): # type: () -> Dict[str, str] """Get environ for each received request. """ assert not self._running, "cannot get mock from running server" # Legacy: replace call[0][0] with call.args[0] # when pip drops support for python3.7 return [ call[0][0] for call in self._server.mock.call_args_list ]
class CommandContextMixIn(object): def __init__(self): super(CommandContextMixIn, self).__init__() self._in_main_context = False self._main_context = ExitStack() @contextmanager def main_context(self): assert not self._in_main_context self._in_main_context = True try: with self._main_context: yield finally: self._in_main_context = False def enter_context(self, context_provider): assert self._in_main_context return self._main_context.enter_context(context_provider)
class CommandContextMixIn: def __init__(self): # type: () -> None super().__init__() self._in_main_context = False self._main_context = ExitStack() @contextmanager def main_context(self): # type: () -> Iterator[None] assert not self._in_main_context self._in_main_context = True try: with self._main_context: yield finally: self._in_main_context = False def enter_context(self, context_provider): # type: (ContextManager[_T]) -> _T assert self._in_main_context return self._main_context.enter_context(context_provider)