"""Starts and runs releasse version of MoreThanText server.""" from asyncio import create_subprocess_exec from socket import AF_INET, SOCK_STREAM, socket from pathlib import Path from release_tests.support import ADDR, get_port EXECUTABLE = Path.cwd().joinpath("target", "release", "morethantext") class MTTServer: """Runs a MoreThanText server.""" def __init__(self): """Initialization""" self.port = get_port() self.cmd = [EXECUTABLE, "-a", ADDR, "-p", str(self.port)] self.server = None @property def baseurl(self): """URL to server""" return f"http://{ADDR}:{self.port}" async def start(self): """Starts the server.""" self.server = await create_subprocess_exec(*self.cmd) # delays the return untul the serverr is responding. with socket(AF_INET, SOCK_STREAM) as soc: while soc.connect_ex((ADDR, self.port)) != 0: continue async def stop(self): """Stops the server.""" if self.server: self.server.terminate() await self.server.wait()