fully implemented project

This commit is contained in:
2026-01-22 19:17:50 +01:00
parent aea6950bfe
commit 42d2758ba5
11 changed files with 220 additions and 5 deletions

63
app/handler.py Normal file
View File

@@ -0,0 +1,63 @@
from http.server import BaseHTTPRequestHandler
import urllib.parse as urllib
import logger
def generate_class(response_callback):
class Handler(BaseHTTPRequestHandler):
def _send_error(self, code: int, message: str):
self.send_response(code)
self.send_header("Content-Type", "text/plain")
self.end_headers()
self.wfile.write(message.encode("utf-8"))
def _handle_request(self):
host = self.client_address[0]
method = self.command
url = urllib.urlparse(self.path)
path = url.path
query = urllib.parse_qs(url.query)
if method != "GET" or path != "/calendar.ics":
logger.info("Invalid " + method + " request on " + path + " from " + host)
self._send_error(404, "Invalid endpoint")
return
logger.info("Received calendar request from " + host)
td_group = (query.get("td") or ["all"])[0]
sh_group = (query.get("sh") or ["all"])[0]
response = response_callback(td_group, sh_group)
if not response:
self._send_error(500, "Unable to generate calendar")
return
logger.info("Generated calendar for " + host)
self.send_response(200)
self.send_header("Content-Type", "text/calendar")
self.end_headers()
self.wfile.write(response.encode("utf-8"))
def do_GET(self):
self._handle_request()
def do_POST(self):
self._handle_request()
def do_PUT(self):
self._handle_request()
def do_DELETE(self):
self._handle_request()
def do_PATCH(self):
self._handle_request()
def do_OPTIONS(self):
self._handle_request()
def log_message(self, fmt, *args):
return
return Handler