def setup_app(command, conf, vars): # Don't reload the app if it was loaded under the testing environment if not pylons.test.pylonsapp: load_environment(conf.global_conf, conf.local_conf) # Create the tables if they don't already exist get_metadata().create_all(bind=Session.bind) services_parent = conf.get('phyloplumber_services_parent') u = conf.get('symlink_phyloplumber_services') use_symlink = u and (u.upper() in ['1', 'T', 'Y', 'TRUE', 'YES']) if use_symlink: install_cmd = os.symlink else: install_cmd = shutil.copy2 if services_parent: installed_services_file = os.path.join(services_parent, 'phyloplumber_services', 'installed.txt') dest_dir = os.path.join(conf['here'], 'phyloplumber', 'controllers') template_dest_dir = os.path.join(conf['here'], 'phyloplumber', 'service_templates') if os.path.exists(installed_services_file): for line in open(installed_services_file, 'rU'): n = line.strip() if not n: continue py_name = n + '.py' src_dir = os.path.join(services_parent, 'phyloplumber_services', n) src = os.path.join(src_dir, py_name) if os.path.exists(src): dest = os.path.join(dest_dir, py_name) if os.path.exists(dest): log.warn('"%(dest)s" exists, this controller is not being replaced' % {'dest' : dest}) else: install_cmd(src, dest) templates_dir = os.path.join(src_dir, 'templates') if not os.path.exists(templates_dir): continue for f in os.path.listdir(templates_dir): dest = os.path.join(template_dest_dir, f) if os.path.exists(dest): log.warn('"%(dest)s" exists, this template is not being replaced' % {'dest' : dest}) else: src = os.path.join(templates_dir, f) install_cmd(src, dest) else: log.warn('Installed service %(service)s not found at %(path)s' % {'service' : n, 'path' : src})
def make_app(global_conf, full_stack=True, static_files=True, **app_conf): """Create a Pylons WSGI application and return it ``global_conf`` The inherited configuration for this application. Normally from the [DEFAULT] section of the Paste ini file. ``full_stack`` Whether this application provides a full WSGI stack (by default, meaning it handles its own exceptions and errors). Disable full_stack when this application is "managed" by another WSGI middleware. ``static_files`` Whether this application serves its own static files; disable when another web server is responsible for serving them. ``app_conf`` The application's local configuration. Normally specified in the [app:<name>] section of the Paste ini file (where <name> defaults to main). """ # Configure the Pylons environment config = load_environment(global_conf, app_conf) # The Pylons WSGI app app = PylonsApp(config=config) # Routing/Session/Cache Middleware app = RoutesMiddleware(app, config['routes.map'], singleton=False) app = SessionMiddleware(app, config) # CUSTOM MIDDLEWARE HERE (filtered by error handling middlewares) app = PhyloplumberMiddleware(app) if asbool(full_stack): # Handle Python exceptions app = ErrorHandler(app, global_conf, **config['pylons.errorware']) # Display error documents for 401, 403, 404 status codes (and # 500 when debug is disabled) if asbool(config['debug']): app = StatusCodeRedirect(app) else: app = StatusCodeRedirect(app, [400, 401, 403, 404, 500]) # Establish the Registry for this application app = RegistryManager(app) if asbool(static_files): # Serve static files static_app = StaticURLParser(config['pylons.paths']['static_files']) app = Cascade([static_app, app]) app.config = config return app