diff options
| author | Vosjedev <vosje@vosjedev.net> | 2025-11-02 13:56:16 +0100 |
|---|---|---|
| committer | Vosjedev <vosje@vosjedev.net> | 2025-11-02 13:56:16 +0100 |
| commit | 60749b5099a8ba1d63e8cc313c451c8a4001a078 (patch) | |
| tree | fc3aef71225a0cd8317efd4147b9d345378068d0 /src/acit/web.py | |
| parent | 29989aface3276d36851c8601ea599ffbeaac471 (diff) | |
| download | acit-60749b5099a8ba1d63e8cc313c451c8a4001a078.tar.gz acit-60749b5099a8ba1d63e8cc313c451c8a4001a078.tar.bz2 acit-60749b5099a8ba1d63e8cc313c451c8a4001a078.tar.xz | |
Too much (I tried to split it up but it won't work)
Diffstat (limited to 'src/acit/web.py')
| -rw-r--r-- | src/acit/web.py | 49 |
1 files changed, 41 insertions, 8 deletions
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 |
