home · contact · privacy
2a6c699f99cb956192a33727a69cb7f808cd8ff2
[plomtask] / task.py
1 #!/usr/bin/env python3
2 """
3 plom's task manager
4 """
5 from http.server import BaseHTTPRequestHandler
6 from http.server import HTTPServer
7 from jinja2 import Environment as JinjaEnv, FileSystemLoader as JinjaFSLoader
8
9 HTTP_PORT = 8082
10 TEMPLATES_DIR = 'templates'
11
12
13 class HandledException(Exception):
14     """To identify Exceptions based on expected (if faulty) user behavior."""
15
16
17 class TaskHandler(BaseHTTPRequestHandler):
18     """Handles single HTTP request."""
19
20     def do_GET(self):
21         """Handle any GET request."""
22         self.send_response(200)
23         self.end_headers()
24         html = self.server.jinja.get_template('index.html').render()
25         self.wfile.write(bytes(html, 'utf-8'))
26
27
28 def main():
29     """Main loop."""
30     server = HTTPServer(('localhost', HTTP_PORT), TaskHandler)
31     server.jinja = JinjaEnv(loader=JinjaFSLoader(TEMPLATES_DIR))
32     print(f'running at port {HTTP_PORT}')
33     try:
34         server.serve_forever()
35     except KeyboardInterrupt:
36         print('aborting due to keyboard interrupt')
37     server.server_close()
38
39
40 if __name__ == '__main__':
41     from sys import exit as sys_exit
42     try:
43         main()
44     except HandledException as e:
45         print(f'Aborting due to: {e}')
46         sys_exit(1)