61 lines
1.7 KiB
Python
Raw Normal View History

2025-06-16 12:32:20 -04:00
"""Starts and runs releasse version of MoreThanText server."""
from asyncio import create_subprocess_exec
2025-06-17 16:50:54 -04:00
from socket import AF_INET, SOCK_STREAM, socket
2025-06-16 12:32:20 -04:00
from pathlib import Path
EXECUTABLE = Path.cwd().joinpath("target", "release", "morethantext")
class MTTServer:
"""Runs a MoreThanText server."""
2025-06-22 17:04:37 -04:00
def __init__(self, *args):
2025-06-16 12:32:20 -04:00
"""Initialization"""
2025-06-22 17:04:37 -04:00
self.port = 3000
self.address = "127.0.0.1"
self.cmd = [EXECUTABLE]
for item in list(args):
self.cmd.append(str(item))
try:
self.port = self.cmd[self.cmd.index("-p") + 1]
except ValueError:
pass
try:
self.port = self.cmd[self.cmd.index("--port") + 1]
except ValueError:
pass
try:
self.address = self.cmd[self.cmd.index("-a") + 1]
except ValueError:
pass
try:
self.address = self.cmd[self.cmd.index("--address") + 1]
except ValueError:
pass
2025-06-16 12:32:20 -04:00
self.server = None
@property
def baseurl(self):
"""URL to server"""
2025-06-22 17:04:37 -04:00
return f"http://{self.address}:{self.port}"
2025-06-16 12:32:20 -04:00
async def start(self):
"""Starts the server."""
self.server = await create_subprocess_exec(*self.cmd)
2025-06-17 16:56:04 -04:00
# delays the return untul the serverr is responding.
2025-06-17 16:50:54 -04:00
with socket(AF_INET, SOCK_STREAM) as soc:
2025-06-22 17:04:37 -04:00
while soc.connect_ex((self.address, int(self.port))) != 0:
2025-06-17 16:50:54 -04:00
continue
async def stop(self):
"""Stops the server."""
if self.server:
2025-06-22 17:04:37 -04:00
if not self.server.returncode:
self.server.terminate()
await self.server.wait()
async def cleanup(self):
"""Clean up."""
await self.stop()