From 77030f9092379397dddc03b319501ff8030b5376 Mon Sep 17 00:00:00 2001 From: Pratyush Desai Date: Thu, 12 Dec 2024 00:24:23 +0530 Subject: [PATCH] Doselog HTML Table Base Added basic HTTP support to serve doselogs using a simple HTML table. Currently hardcoded to one nick. Signed-off-by: Pratyush Desai --- plugin.py | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/plugin.py b/plugin.py index 34ce165..b643da7 100644 --- a/plugin.py +++ b/plugin.py @@ -31,7 +31,10 @@ from supybot import utils, plugins, ircutils, callbacks, world, conf, log from supybot.commands import * +# HTTP Imports +from supybot import httpserver +# Misc from num2words import num2words import pickle import datetime @@ -63,6 +66,84 @@ METHODS = { "smoked": ["Smoked"] } +class TripsitServerCallback(httpserver.SupyHTTPServerCallback): + name = 'Tripsit' + defaultResponse = """ + This plugin handles only GET request, please don't use other requests.""" + + def __init__(self, plugin): + self.plugin = plugin # to access db + + def doGet(self, handler, path): + # '/doses' + if path == '/doses': + nick = 'mogad0n' + dose_logs = self.plugin.db.get(nick, {}).get('doses', []) + + # HTML + response = """ + + + + + Dose Logs + + +

Dose Logs for {}

+ + + + + + + + """.format(nick) + + for log in dose_logs: + response += """ + + + + + + + """.format( + log['time'], + log['dose'], + log['drug'], + log['method'] + ) + + response += """ +
TimeDoseDrugMethod
{}{}{}{}
+ + + """ + + # Response + handler.send_response(200) + handler.send_header('Content-type', 'text/html') + handler.end_headers() + handler.wfile.write(response.encode('utf-8')) + return + + # handle unknown paths + handler.send_response(404) + handler.send_header('Content-type', 'text/html') + handler.end_headers() + handler.wfile.write(b""" + + + + + 404 Not Found + + +

404 Not Found

+

The requested resource was not found on this server.

+ + + """) class Tripsit(callbacks.Plugin): """Harm-Reduction tools from tripsit's tripbot and the tripsitwiki""" @@ -74,6 +155,7 @@ class Tripsit(callbacks.Plugin): self.db = {} self._loadDb() world.flushers.append(self._flushDb) + httpserver.hook('tripsit', TripsitServerCallback(self)) # register the callback at `/tripsit` def _loadDb(self): """Loads the (flatfile) database mapping nicks to doses.""" @@ -95,6 +177,7 @@ class Tripsit(callbacks.Plugin): def die(self): self._flushDb() + httpserver.unhook('tripsit') world.flushers.remove(self._flushDb) self.__parent.die()