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) 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
# Invoke websetup with the current config file # SetupCommand('setup-app').run([pylons.test.pylonsapp.config['__file__']]) # additional imports ... import os from paste.deploy import appconfig from fademo.config.environment import load_environment here_dir = os.path.dirname(__file__) conf_dir = os.path.dirname(os.path.dirname(here_dir)) test_file = os.path.join(conf_dir, 'test.ini') conf = appconfig('config:' + test_file) config = load_environment(conf.global_conf, conf.local_conf) environ = {} engine = engine_from_config(config, 'sqlalchemy.') model.init_model(engine) metadata = elixir.metadata Session = elixir.session = meta.Session class Individual(Entity): """Table 'Individual'. >>> me = Individual('Groucho') # 'name' field is converted to lowercase >>> me.name 'groucho'
def setup_app(command, conf, vars): """Place any commands to setup fademo here""" # Don't reload the app if it was loaded under the testing environment if not pylons.test.pylonsapp: config = load_environment(conf.global_conf, conf.local_conf) import datetime import hashlib drop_all() model.metadata.create_all() for name in (u'Administrators', u'Moderators', u'Users'): g = model.user.Group( name = name, description = u"%s group" % name, created = datetime.datetime.utcnow(), active = True) model.Session.add(g) g = model.Session.query( model.user.Group).filter_by( name="Administrators").first() ug = model.Session.query( model.user.Group).filter_by( name="Users").first() for i, name in enumerate(('admin', 'bob', 'josette', 'bernard', 'gertrude', 'jacques', 'lise', 'robert', 'jacqueline')): user = model.user.User( username = name.title(), password=hashlib.sha1(name).hexdigest(), password_check=hashlib.sha1(name).hexdigest(), email="*****@*****.**" % name, created = datetime.datetime.utcnow(), active = True) model.Session.add(user) ug.users.append(user) if i < 3: g.users.append(user) for i, name in enumerate(('read', 'write', 'admin')): perm = model.user.Permission( name = name.title(), description = '%s permission' % name.title(), ) model.Session.add(perm) if i > 1: g.permissions.append(perm) else: ug.permissions.append(perm) for i in range(50): article = demo.Article( title='Article %s' % i, text='''Heading ===================== Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent consectetur imperdiet porta. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin sollicitudin, mi sit amet blandit dignissim, lacus ante sagittis est, in congue lectus nulla non urna. Nunc a justo ut lacus laoreet facilisis. Nullam blandit posuere mauris semper pellentesque. Sed leo neque, vulputate sed pharetra vel, rhoncus at nisl. Aenean eget nibh turpis. Quisque semper lacus sodales libero dictum pretium. Phasellus euismod, odio sit amet vehicula pharetra, nunc diam imperdiet dui, non malesuada neque erat ac augue. Sed elit ipsum, placerat vitae accumsan quis, tempor in tellus. Vestibulum tempus consequat libero, sit amet pellentesque lacus interdum in. Vestibulum in nunc at nulla ultrices laoreet. * Morbi id orci augue, porta malesuada mi. * Proin rhoncus tellus non orci iaculis pretium. * Praesent aliquet commodo urna, vitae laoreet arcu porttitor ut. * Nullam sollicitudin blandit risus, eu luctus nisl scelerisque eget. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent consectetur imperdiet porta. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin sollicitudin, mi sit amet blandit dignissim, lacus ante sagittis est, in congue lectus nulla non urna. Nunc a justo ut lacus laoreet facilisis. Nullam blandit posuere mauris semper pellentesque. Sed leo neque, vulputate sed pharetra vel, rhoncus at nisl. Aenean eget nibh turpis. Quisque semper lacus sodales libero dictum pretium. Phasellus euismod, odio sit amet vehicula pharetra, nunc diam imperdiet dui, non malesuada neque erat ac augue. Sed elit ipsum, placerat vitae accumsan quis, tempor in tellus. Vestibulum tempus consequat libero, sit amet pellentesque lacus interdum in. Vestibulum in nunc at nulla ultrices laoreet. ''', publication_date = datetime.datetime.utcnow()) model.Session.add(article) for i in range(100): widgets = demo.Widgets( autocomplete=random.choice(['%sanux' % s for s in 'BCDFGHJKLMNP']+['']), color = random.choice(["#EEEEEE", "#FFFF88", "#FF7400", "#CDEB8B", "#6BBA70"]), slider = random.choice(range(0, 100, 10)), ) model.Session.add(widgets) model.Session.commit()