| from http.server import BaseHTTPRequestHandler, HTTPServer | |
| from threading import Thread | |
| from app.translator import Translator | |
| class Server(BaseHTTPRequestHandler): | |
| def __init__(self, translator: Translator): | |
| self.translator = translator | |
| def __call__(self, *args, **kwargs): | |
| super().__init__(*args, **kwargs) | |
| def do_GET(self): | |
| self.send_response(200) | |
| self.send_header('Access-Control-Allow-Origin', '*') | |
| self.end_headers() | |
| self.wfile.write(self.translator.result.encode('utf-8')) | |
| class HTTPDaemon: | |
| def __init__(self, host: str, port: int, translator: Translator): | |
| self.host = host | |
| self.port = port | |
| self.httpd = HTTPServer((self.host, self.port), Server(translator)) | |
| self.server_thread: Thread | |
| def __enter__(self): | |
| print(f"Serving HTTP on {self.host} port {self.port} (http://{self.host}:{self.port}/)..") | |
| self.server_thread = Thread(target=self.httpd.serve_forever) | |
| self.server_thread.start() | |
| def __exit__(self, *_): | |
| print("\nServer closing..") | |
| self.httpd.shutdown() | |
| self.httpd.server_close() | |
| self.server_thread.join() | |