generate cherrypy.config (for now)

This commit is contained in:
James Vasile 2011-09-30 00:41:07 -04:00
parent 89972dbc0f
commit b184fc74c5

119
plinth.py
View File

@ -19,61 +19,94 @@ __email__ = "james@hackervisions.org"
__status__ = "Development" __status__ = "Development"
def error_page(status, dynamic_msg, stock_msg): def error_page(status, dynamic_msg, stock_msg):
return page_template(template="err", title=status, main="<p>%s</p>%s" % (dynamic_msg, stock_msg)) return page_template(template="err", title=status, main="<p>%s</p>%s" % (dynamic_msg, stock_msg))
def error_page_404(status, message, traceback, version): def error_page_404(status, message, traceback, version):
return error_page(status, message, """<p>If you believe this missing page should exist, please file a return error_page(status, message, """<p>If you believe this missing page should exist, please file a
bug with either the Plinth project or the people responsible for bug with either the Plinth project or the people responsible for
the module you are trying to access.</p> the module you are trying to access.</p>
<p>Sorry for the mistake.</p> <p>Sorry for the mistake.</p>
""") """)
def error_page_500(status, message, traceback, version): def error_page_500(status, message, traceback, version):
cfg.log.error("500 Internal Server Error. Trackback is above.") cfg.log.error("500 Internal Server Error. Trackback is above.")
more="""<p>This is an internal error and not something you caused more="""<p>This is an internal error and not something you caused
or can fix. Please report the error on the <a or can fix. Please report the error on the <a
href="https://github.com/jvasile/Plinth/issues">bug tracker</a> so href="https://github.com/jvasile/Plinth/issues">bug tracker</a> so
we can fix it.</p>""" we can fix it.</p>"""
return error_page(status, message, "<p>%s</p><pre>%s</pre>" % (more, "\n".join(traceback.split("\n")))) return error_page(status, message, "<p>%s</p><pre>%s</pre>" % (more, "\n".join(traceback.split("\n"))))
class Root(plugin_mount.PagePlugin): class Root(plugin_mount.PagePlugin):
@cherrypy.expose @cherrypy.expose
def index(self): def index(self):
if cherrypy.session.get(cfg.session_key, None): if cherrypy.session.get(cfg.session_key, None):
raise cherrypy.InternalRedirect('/router') raise cherrypy.InternalRedirect('/router')
else: else:
raise cherrypy.InternalRedirect('/help/about') raise cherrypy.InternalRedirect('/help/about')
def load_modules(): def load_modules():
"""Import all the symlinked .py files in the modules directory and """Import all the symlinked .py files in the modules directory and
all the .py files in directories linked in the modules directory all the .py files in directories linked in the modules directory
(but don't dive deeper than that). Also, ignore the installed (but don't dive deeper than that). Also, ignore the installed
directory.""" directory."""
for name in os.listdir("modules"): for name in os.listdir("modules"):
if name.endswith(".py") and not name.startswith('.'): if name.endswith(".py") and not name.startswith('.'):
cfg.log.info("importing modules/%s" % name) cfg.log.info("importing modules/%s" % name)
try: try:
__import__("modules.%s" % (name[:-3])) __import__("modules.%s" % (name[:-3]))
except ImportError, e: except ImportError, e:
cfg.log.error(_("Couldn't import modules/%s: %s") % (name, e)) cfg.log.error(_("Couldn't import modules/%s: %s") % (name, e))
else: else:
cfg.log("skipping %s" % name) cfg.log("skipping %s" % name)
def write_cherrypy_config():
"""Write the cherrpy.config file.
We could just make a dict instead of writing a data file and then
reading it back, but I like the output for debugging purposes.
Future versions might do the more efficient thing.
"""
with open(os.path.join(cfg.file_root, "cherrypy.config"), 'w') as OUTF:
OUTF.write(
"""### Generated file, do not edit! ###
[global]
server.socket_host = '0.0.0.0'
server.socket_port = 8000
server.thread_pool = 10
tools.staticdir.root = "{fileroot}"
tools.sessions.on = True
tools.auth.on = True
tools.sessions.storage_type = "file"
tools.sessions.timeout = 90
tools.sessions.storage_path = "{fileroot}/data/cherrypy_sessions"
[/static]
tools.staticdir.on = True
tools.staticdir.dir = "static"
[/favicon.ico]
tools.staticfile.on = True
tools.staticfile.filename = "{fileroot}/static/theme/favicon.ico"
""".format(fileroot=cfg.file_root))
def setup(): def setup():
os.chdir(cfg.file_root) os.chdir(cfg.file_root)
cherrypy.config.update({'error_page.404': error_page_404}) cherrypy.config.update({'error_page.404': error_page_404})
cherrypy.config.update({'error_page.500': error_page_500}) cherrypy.config.update({'error_page.500': error_page_500})
cfg.log = Logger() write_cherrypy_config()
load_modules() cfg.log = Logger()
cfg.html_root = Root() load_modules()
cfg.page_plugins = plugin_mount.PagePlugin.get_plugins() cfg.html_root = Root()
cfg.log("Loaded %d page plugins" % len(cfg.page_plugins)) cfg.page_plugins = plugin_mount.PagePlugin.get_plugins()
cfg.users = plugin_mount.UserStoreModule.get_plugins()[0] cfg.log("Loaded %d page plugins" % len(cfg.page_plugins))
cfg.forms = plugin_mount.FormPlugin.get_plugins() cfg.users = plugin_mount.UserStoreModule.get_plugins()[0]
cfg.forms = plugin_mount.FormPlugin.get_plugins()
def main(): def main():
setup() setup()
cherrypy.quickstart(cfg.html_root, script_name='/', config="cherrypy.config") cherrypy.quickstart(cfg.html_root, script_name='/', config="cherrypy.config")