5 from http.server import BaseHTTPRequestHandler
6 from http.server import HTTPServer
7 from jinja2 import Environment as JinjaEnv, FileSystemLoader as JinjaFSLoader
10 TEMPLATES_DIR = 'templates'
13 class HandledException(Exception):
14 """To identify Exceptions based on expected (if faulty) user behavior."""
17 class TaskHandler(BaseHTTPRequestHandler):
18 """Handles single HTTP request."""
21 """Handle any GET request."""
22 self.send_response(200)
24 html = self.server.jinja.get_template('index.html').render()
25 self.wfile.write(bytes(html, 'utf-8'))
30 server = HTTPServer(('localhost', HTTP_PORT), TaskHandler)
31 server.jinja = JinjaEnv(loader=JinjaFSLoader(TEMPLATES_DIR))
32 print(f'running at port {HTTP_PORT}')
34 server.serve_forever()
35 except KeyboardInterrupt:
36 print('aborting due to keyboard interrupt')
40 if __name__ == '__main__':
41 from sys import exit as sys_exit
44 except HandledException as e:
45 print(f'Aborting due to: {e}')