import cherrypy from .db import DBPoolManager from .types import Site from .imapplugin import ImapPlugin class Server(): def __init__(self,dbpool:DBPoolManager,site:Site,imap:ImapPlugin): cherrypy.engine.subscribe("newpage",self.registerpage) self.dbpool=dbpool self.site=site self.imap=imap 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: return results[0] else: return page @cherrypy.expose def index(self): #import threading #cherrypy.log("Listing threads:") #for thread in threading.enumerate(): # cherrypy.log(repr(thread)) #cherrypy.log("Threads holding an IMAP connection:") #for thread in self.imap.mbpool.holding_threads: # 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)) page=self.getpage(path,**kwargs) if not page: from .html import notfound cherrypy.response.status=404 return notfound.format(path=path) else: return page class SecureServer(): def __init__(self,server:Server): self.site=server.site self.dbpool=server.dbpool self.imap=server.imap @cherrypy.expose def index(self): return "Secure." #raise cherrypy.HTTPRedirect("/",303)