home · contact · privacy
Add rump Days module.
[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 from days import Day
9
10 HTTP_PORT = 8082
11 TEMPLATES_DIR = 'templates'
12
13
14 class HandledException(Exception):
15     """To identify Exceptions based on expected (if faulty) user behavior."""
16
17
18 class TaskHandler(BaseHTTPRequestHandler):
19     """Handles single HTTP request."""
20
21     def do_GET(self):
22         """Handle any GET request."""
23         self.send_response(200)
24         self.end_headers()
25         days = [Day('2024-01-03'), Day('2024-01-01'), Day('2024-01-02')]
26         days.sort()
27         html = self.server.jinja.get_template('calendar.html').render(
28                 days=days)
29         self.wfile.write(bytes(html, 'utf-8'))
30
31
32 def main():
33     """Main loop."""
34     server = HTTPServer(('localhost', HTTP_PORT), TaskHandler)
35     server.jinja = JinjaEnv(loader=JinjaFSLoader(TEMPLATES_DIR))
36     print(f'running at port {HTTP_PORT}')
37     try:
38         server.serve_forever()
39     except KeyboardInterrupt:
40         print('aborting due to keyboard interrupt')
41     server.server_close()
42
43
44 if __name__ == '__main__':
45     from sys import exit as sys_exit
46     try:
47         main()
48     except HandledException as e:
49         print(f'Aborting due to: {e}')
50         sys_exit(1)