From 60749b5099a8ba1d63e8cc313c451c8a4001a078 Mon Sep 17 00:00:00 2001 From: Vosjedev Date: Sun, 2 Nov 2025 13:56:16 +0100 Subject: Too much (I tried to split it up but it won't work) --- src/acit/web.py | 49 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 8 deletions(-) (limited to 'src/acit/web.py') diff --git a/src/acit/web.py b/src/acit/web.py index e09c94b..b6fb83b 100644 --- a/src/acit/web.py +++ b/src/acit/web.py @@ -2,34 +2,67 @@ import cherrypy from .db import DBPoolManager +from .types import Site class Server(): - def __init__(self,dbpool:DBPoolManager): + def __init__(self,dbpool:DBPoolManager,site:Site): cherrypy.engine.subscribe("newpage",self.registerpage) - self.pages={} self.dbpool=dbpool + self.site=site - def registerpage(self,path,content): - self.pages[path]=content + def registerpage(self,path,content,regentoken=None): + with self.dbpool.get_connection() as conn, conn.cursor() as cur: + cur.execute("CREATE TABLE IF NOT EXISTS pagecache (" + "path VARCHAR(100) PRIMARY KEY," + "content MEDIUMTEXT," + "generate VARCHAR(40)" + ")") + cur.execute("INSERT INTO pagecache VALUES (?,?,?) ON DUPLICATE KEY UPDATE content=?, generate=?",(path,content,regentoken,content,regentoken)) + conn.commit() + + def getpage(self,path,**kwargs): + with self.dbpool.get_connection() as conn, conn.cursor() as cur: + cur.execute("SELECT content,generate FROM pagecache WHERE path=? LIMIT 1",(path,)) + data=cur.fetchone() + if not data: + return + page,generate=data + if kwargs: + results=cherrypy.engine.publish('generate::'+generate,path=path,**kwargs) + if results: + cherrypy.log(results) + return results[0] + else: + return page + @cherrypy.expose def index(self,quote="nothing"): - return "Index" + import threading + self.site.update_trackers() + cherrypy.log("Listing threads:") + for thread in threading.enumerate(): + cherrypy.log(repr(thread)) + + from os import getenv + raise cherrypy.HTTPRedirect(getenv("ACIT_HOME_REDIRECT","about:blank"),303) @cherrypy.expose(["style.css"]) def style(self): from .html import style_css + cherrypy.response.headers["Content-Type"]="text/css" return style_css @cherrypy.expose def default(self,*pathlist,**kwargs): from os.path import normpath path=normpath("/".join(pathlist)) - if path in self.pages: - return self.pages[path] - else: + page=self.getpage(path) + if not page: from .html import notfound cherrypy.response.status=404 return notfound.format(path=path) + else: + return page -- cgit