diff options
author | James Vasile <james@hackervisions.org> | 2011-02-22 13:32:45 -0500 |
---|---|---|
committer | James Vasile <james@hackervisions.org> | 2011-02-22 13:32:45 -0500 |
commit | 35071d7212cec1fc23e8204bfd392a116a5313ed (patch) | |
tree | 1c75a525227769fc94f303b5c0233882d90ef2a8 /plinth.py |
...
Diffstat (limited to 'plinth.py')
-rwxr-xr-x | plinth.py | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/plinth.py b/plinth.py new file mode 100755 index 0000000..2a4c089 --- /dev/null +++ b/plinth.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python + +# Start listener, just for testing +import os, sys +#import logging +from gettext import gettext as _ +import cherrypy +import cfg, plugin_mount +from util import * +from logger import Logger +#from modules.auth import AuthController, require, member_of, name_is + +def error_page(status, 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): + 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 + the module you are trying to access.</p> + + <p>Sorry for the mistake.</p> + """) + +def error_page_500(status, message, traceback, version): + cfg.log.error("500 Internal Server Error. Trackback is above.") + more="""<p>This is an internal error and not something you caused or can fix. You are welcome to report it. + TODO: add link to bug tracker.</p>""" + return error_page(status, message, "<p>%s</p><pre>%s</pre>" % (more, "\n".join(traceback.split("\n")))) + +class Root(plugin_mount.PagePlugin): + @cherrypy.expose + def index(self): + if cherrypy.session.get(cfg.session_key, None): + raise cherrypy.InternalRedirect('/router') + else: + raise cherrypy.InternalRedirect('/help/about') + +def load_modules(): + """Import all the symlinked .py files in the modules directory and + all the .py files in directories linked in the modules directory + (but don't dive deeper than that). Also, ignore the installed + directory.""" + for name in os.listdir("modules"): + if name.endswith(".py") and not name.startswith('.'): + cfg.log.info("importing modules/%s" % name) + try: + exec("import modules.%s" % (name[:-3])) + except ImportError, e: + cfg.log.error(_("Couldn't import modules/%s: %s") % (name, e)) + else: + cfg.log("skipping %s" % name) + +def setup(): + os.chdir(cfg.file_root) + cherrypy.config.update({'error_page.404': error_page_404}) + cherrypy.config.update({'error_page.500': error_page_500}) + cfg.log = Logger() + load_modules() + cfg.html_root = Root() + cfg.page_plugins = plugin_mount.PagePlugin.get_plugins() + cfg.log("Loaded %d page plugins" % len(cfg.page_plugins)) + cfg.users = plugin_mount.UserStoreModule.get_plugins()[0] + cfg.forms = plugin_mount.FormPlugin.get_plugins() +def main(): + setup() + cherrypy.quickstart(cfg.html_root, script_name='/', config="cherrypy.config") + + + +if __name__ == '__main__': + main() |