X-Git-Url: https://plomlompom.com/repos/feed.xml?a=blobdiff_plain;f=plomtask%2Ftask.py;fp=plomtask%2Ftask.py;h=0000000000000000000000000000000000000000;hb=b557c789f4eec704db0e6276390395fac5d8db9e;hp=49ca883932baacc795d6818f0b764a4ba90bdfdb;hpb=4546631ed7cc59f3e66a1902b28930f955b2b03f;p=plomtask diff --git a/plomtask/task.py b/plomtask/task.py deleted file mode 100755 index 49ca883..0000000 --- a/plomtask/task.py +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env python3 -"""plom's task manager""" -from http.server import BaseHTTPRequestHandler -from http.server import HTTPServer -from urllib.parse import urlparse -from os.path import split as path_split -from jinja2 import Environment as JinjaEnv, FileSystemLoader as JinjaFSLoader -from .days import Day - -HTTP_PORT = 8082 -TEMPLATES_DIR = 'templates' - - -class HandledException(Exception): - """To identify Exceptions based on expected (if faulty) user behavior.""" - - -class TaskServer(HTTPServer): - """Variant of HTTPServer that knows .jinja as Jinja Environment.""" - - def __init__(self, *args, **kwargs): - super().__init__(self, *args, **kwargs) - self.jinja = JinjaEnv(loader=JinjaFSLoader(TEMPLATES_DIR)) - - -class TaskHandler(BaseHTTPRequestHandler): - """Handles single HTTP request.""" - server: TaskServer - - def send_html(self, html: str, code: int = 200): - """Send HTML as proper HTTP response.""" - self.send_response(code) - self.end_headers() - self.wfile.write(bytes(html, 'utf-8')) - - def send_msg(self, msg: str, code: int = 400): - """Send message in HTML formatting as HTTP response.""" - html = self.server.jinja.get_template('msg.html').render(msg=msg) - self.send_html(html, code) - - def do_GET(self): - """Handle any GET request.""" - try: - parsed_url = urlparse(self.path) - site = path_split(parsed_url.path)[1] - if 'calendar' == site: - html = self.do_GET_calendar() - else: - raise HandledException('Test!') - self.send_html(html) - except HandledException as error: - self.send_msg(error) - - def do_GET_calendar(self): - """Show sorted Days.""" - days = [Day('2024-01-03'), Day('2024-01-01'), Day('2024-01-02')] - days.sort() - return self.server.jinja.get_template('calendar.html').render( - days=days) - - -def main(): - """Main loop.""" - server = TaskServer(('localhost', HTTP_PORT), TaskHandler) - print(f'running at port {HTTP_PORT}') - try: - server.serve_forever() - except KeyboardInterrupt: - print('aborting due to keyboard interrupt') - server.server_close() - - -if __name__ == '__main__': - from sys import exit as sys_exit - try: - main() - except HandledException as e: - print(f'Aborting due to: {e}') - sys_exit(1)