aboutsummaryrefslogtreecommitdiffstats
path: root/src/acit/web.py
diff options
context:
space:
mode:
authorVosjedev <vosje@vosjedev.net>2025-11-02 13:56:16 +0100
committerVosjedev <vosje@vosjedev.net>2025-11-02 13:56:16 +0100
commit60749b5099a8ba1d63e8cc313c451c8a4001a078 (patch)
treefc3aef71225a0cd8317efd4147b9d345378068d0 /src/acit/web.py
parent29989aface3276d36851c8601ea599ffbeaac471 (diff)
downloadacit-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.py49
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