def make_app(global_conf, full_stack=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 or not 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. ``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 load_environment(global_conf, app_conf) # The Pylons WSGI app app = PylonsApp() # CUSTOM MIDDLEWARE HERE (filtered by error handling middlewares) import pylons if pylons.__version__ >= "0.9.7": # Routing/Session/Cache Middleware from beaker.middleware import CacheMiddleware, SessionMiddleware from routes.middleware import RoutesMiddleware app = RoutesMiddleware(app, config['routes.map']) app = SessionMiddleware(app, config) app = CacheMiddleware(app, config) 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) app = ErrorDocuments(app, global_conf, mapper=error_mapper, **app_conf) # Establish the Registry for this application app = RegistryManager(app) # Static files static_app = StaticURLParser(config['pylons.paths']['static_files']) app = Cascade([static_app, app]) return app
def setup_config(command, filename, section, vars): """Place any commands to setup ferrox here""" conf = appconfig('config:' + filename) load_environment(conf.global_conf, conf.local_conf) from ferrox import model print "Creating tables." model.metadata.create_all(bind=config['pylons.g'].sa_engine) print "Creating base data..." ### Config print " ...config" config_fields = ( ('gallery', 'max depth', model.Config.Regexp, u'^\d*$', u'10', u'Maximal depth of user gallery', False), ) for group, name, type, pattern, value, description, encrypted in config_fields: model.Session.add( model.Config(group, name, type, pattern, value, description, encrypted) ) ### Roles print " ...roles" # .manage = You can manage other people's entries from this controller. avalable_permissions = [ # admin ['admin.auth', 'Can log into admin panel.'], ['admin.ban', 'Can manage bans.'], ['admin.config_view', 'Can view config.'], ['admin.config_edit', 'Can edit config.'], ['admin.config_admin', 'Can admin config.'], ['admin.ip', 'Can see user IP addresses.'], ['admin.roles', 'Can manage user roles. (God mode cheat.)'], # back_compat probably doesn't need permissions # comments ['comments.reply', 'Can make comments.'], # debug ['debug', 'Can use debug functions.'], # editlog ['editlog', 'Can view edit logs.'], # gallery ['gallery.view', 'Can browse galleries and view pictures.'], ['gallery.upload', 'Can upload submissions.'], ['gallery.favorite', 'Can manage own favorites.'], ['gallery.manage', 'Can manage other people\'s submissions.'], # index ['index.register', 'Can register a new account. (Don\'t enable this.)'], ['index.login', 'Can log in to site.'], # journal ['journal.view', 'Can browse journals and view entries.'], ['journal.post', 'Can post journals.'], ['journal.manage', 'Can manage other people\'s journals.'], # news ['news.manage', 'Can manage site news.'], # notes ['notes.view', 'Can view notes.'], ['notes.write', 'Can write notes.'], ['notes.manage', 'Can view other people\'s notes.'], # search ['search.do', 'Can use site\'s search function.'], # stylesheets probably doesn't need permissions # template probably doesn't need permissions # user is view-only? # user_settings ['user_settings.avatars', 'Can manage own avatars.'], ['user_settings.relationships', 'Can manage own relationships.'], ['user_settings.manage', 'Can manage other people\'s settings.'], ] permissions = {} for p in avalable_permissions: permissions[p[0]] = model.Permission(*p) model.Session.add(permissions[p[0]]) ''' .permissions.append(permissions['admin.auth']) .permissions.append(permissions['admin.ban']) .permissions.append(permissions['admin.config_view']) .permissions.append(permissions['admin.config_edit']) .permissions.append(permissions['admin.config_admin']) .permissions.append(permissions['admin.ip']) .permissions.append(permissions['admin.roles']) .permissions.append(permissions['comments.reply']) .permissions.append(permissions['debug']) .permissions.append(permissions['editlog']) .permissions.append(permissions['gallery.view']) .permissions.append(permissions['gallery.upload']) .permissions.append(permissions['gallery.favorite']) .permissions.append(permissions['gallery.manage']) .permissions.append(permissions['index.register']) .permissions.append(permissions['index.login']) .permissions.append(permissions['journal.view']) .permissions.append(permissions['journal.post']) .permissions.append(permissions['journal.manage']) .permissions.append(permissions['news.manage']) .permissions.append(permissions['notes.view']) .permissions.append(permissions['notes.write']) .permissions.append(permissions['notes.manage']) .permissions.append(permissions['search.do']) .permissions.append(permissions['user_settings.avatars']) .permissions.append(permissions['user_settings.relationships']) .permissions.append(permissions['user_settings.manage']) ''' null_role = model.Role('Null', 'User who can\'t do anything. Literally.') null_role.sigil = ' ' model.Session.add(null_role) guest_role = model.Role('Guest', 'Non-registered Users') guest_role.sigil = ' ' guest_role.permissions.append(permissions['gallery.view']) guest_role.permissions.append(permissions['index.register']) guest_role.permissions.append(permissions['journal.view']) guest_role.permissions.append(permissions['search.do']) model.Session.add(guest_role) unverified_role = model.Role('Unverified', 'User who has not verified eir email') unverified_role.sigil = '?' unverified_role.permissions.append(permissions['gallery.view']) unverified_role.permissions.append(permissions['journal.view']) unverified_role.permissions.append(permissions['notes.view']) unverified_role.permissions.append(permissions['notes.write']) unverified_role.permissions.append(permissions['search.do']) model.Session.add(unverified_role) banned_role = model.Role('Banned', 'User who has been banned.') banned_role.sigil = '-' banned_role.permissions.append(permissions['gallery.view']) banned_role.permissions.append(permissions['gallery.favorite']) banned_role.permissions.append(permissions['index.login']) banned_role.permissions.append(permissions['journal.view']) banned_role.permissions.append(permissions['notes.view']) banned_role.permissions.append(permissions['search.do']) model.Session.add(banned_role) normal_role = model.Role('Member', 'Regular user') normal_role.sigil = '~' normal_role.permissions.append(permissions['comments.reply']) normal_role.permissions.append(permissions['gallery.view']) normal_role.permissions.append(permissions['gallery.upload']) normal_role.permissions.append(permissions['gallery.favorite']) normal_role.permissions.append(permissions['index.login']) normal_role.permissions.append(permissions['journal.view']) normal_role.permissions.append(permissions['journal.post']) normal_role.permissions.append(permissions['notes.view']) normal_role.permissions.append(permissions['notes.write']) normal_role.permissions.append(permissions['search.do']) normal_role.permissions.append(permissions['user_settings.avatars']) normal_role.permissions.append(permissions['user_settings.relationships']) normal_role.permissions.append(permissions['user_settings.manage']) model.Session.add(normal_role) admin_role = model.Role('Administrator', 'Site Administrator') admin_role.sigil = '@' admin_role.permissions.append(permissions['admin.auth']) admin_role.permissions.append(permissions['admin.ban']) admin_role.permissions.append(permissions['admin.config_view']) admin_role.permissions.append(permissions['admin.config_edit']) admin_role.permissions.append(permissions['admin.ip']) admin_role.permissions.append(permissions['admin.roles']) admin_role.permissions.append(permissions['comments.reply']) admin_role.permissions.append(permissions['editlog']) admin_role.permissions.append(permissions['gallery.view']) admin_role.permissions.append(permissions['gallery.upload']) admin_role.permissions.append(permissions['gallery.favorite']) admin_role.permissions.append(permissions['gallery.manage']) admin_role.permissions.append(permissions['index.register']) admin_role.permissions.append(permissions['index.login']) admin_role.permissions.append(permissions['journal.view']) admin_role.permissions.append(permissions['journal.post']) admin_role.permissions.append(permissions['journal.manage']) admin_role.permissions.append(permissions['news.manage']) admin_role.permissions.append(permissions['notes.view']) admin_role.permissions.append(permissions['notes.write']) admin_role.permissions.append(permissions['notes.manage']) admin_role.permissions.append(permissions['search.do']) admin_role.permissions.append(permissions['user_settings.avatars']) admin_role.permissions.append(permissions['user_settings.relationships']) admin_role.permissions.append(permissions['user_settings.manage']) model.Session.add(admin_role) sysadmin_role = model.Role('Bastard Operator From Hell', 'Users that have access to the underlying software.') sysadmin_role.sigil = '^' sysadmin_role.permissions.append(permissions['admin.auth']) sysadmin_role.permissions.append(permissions['admin.ban']) sysadmin_role.permissions.append(permissions['admin.config_view']) sysadmin_role.permissions.append(permissions['admin.config_edit']) sysadmin_role.permissions.append(permissions['admin.config_admin']) sysadmin_role.permissions.append(permissions['admin.ip']) sysadmin_role.permissions.append(permissions['admin.roles']) sysadmin_role.permissions.append(permissions['comments.reply']) sysadmin_role.permissions.append(permissions['debug']) sysadmin_role.permissions.append(permissions['editlog']) sysadmin_role.permissions.append(permissions['gallery.view']) sysadmin_role.permissions.append(permissions['gallery.upload']) sysadmin_role.permissions.append(permissions['gallery.favorite']) sysadmin_role.permissions.append(permissions['gallery.manage']) sysadmin_role.permissions.append(permissions['index.register']) sysadmin_role.permissions.append(permissions['index.login']) sysadmin_role.permissions.append(permissions['journal.view']) sysadmin_role.permissions.append(permissions['journal.post']) sysadmin_role.permissions.append(permissions['journal.manage']) sysadmin_role.permissions.append(permissions['news.manage']) sysadmin_role.permissions.append(permissions['notes.view']) sysadmin_role.permissions.append(permissions['notes.write']) sysadmin_role.permissions.append(permissions['notes.manage']) sysadmin_role.permissions.append(permissions['search.do']) sysadmin_role.permissions.append(permissions['user_settings.avatars']) sysadmin_role.permissions.append(permissions['user_settings.relationships']) sysadmin_role.permissions.append(permissions['user_settings.manage']) model.Session.add(sysadmin_role) print " ...user metadata" metadata_fields = ( (u'bio', u'Short bio'), (u'artist_type', u'Artist type'), (u'location', u'Location'), (u'interests', u'Interests'), (u'occupation', u'Occupation'), (u'age', u'Age'), (u'nerd_shell', u'Shell'), (u'nerd_os', u'Operating system'), (u'nerd_browser', u'Browser'), (u'fav_quote', u'Favorite quote'), (u'fav_movie', u'Favorite movie'), (u'fav_game', u'Favorite game'), (u'fav_player', u'Favorite music player'), (u'fav_artist', u'Favorite artist'), (u'fav_animal', u'Favorite animal'), (u'fav_site', u'Favorite Web site'), (u'fav_food', u'Favorite food'), ) for key, description in metadata_fields: model.Session.add( model.UserMetadataField(key=key, description=description) ) print "Done." model.Session.commit() print "Creating test data..." print " ...users" u = model.User(u'fender', 'asdf') u.display_name = u'Fender' u.email = u'*****@*****.**' u.role = admin_role model.Session.add(u) u = model.User(u'eevee', 'pretzel') u.display_name = u'Eevee' u.email = u'*****@*****.**' u.role = admin_role model.Session.add(u) p = model.UserPreference(u, 'style_sheet', 'sufficiently-advanced') model.Session.add(p) p = model.UserPreference(u, 'style_color', 'light') model.Session.add(p) u = model.User(u'net-cat', 'asdf') u.display_name = u'net-cat' u.email = u'*****@*****.**' u.role = admin_role model.Session.add(u) u = model.User(u'luser', 'asdf') u.display_name = u'Luser' u.email = u'*****@*****.**' u.role = normal_role model.Session.add(u) print "Done." model.Session.commit() try: import magic except ImportError: print 'WARNING: mimetypes will be detected by filename instead of magic. In FreeBSD, install "devel/py-magic" from ports.'
def setup_config(command, filename, section, vars): """Place any commands to setup ferrox here""" conf = appconfig('config:' + filename) load_environment(conf.global_conf, conf.local_conf) from ferrox import model print "Creating tables." model.metadata.create_all(bind=config['pylons.g'].sa_engine) print "Creating base data..." ### Config print " ...config" config_fields = (('gallery', 'max depth', model.Config.Regexp, u'^\d*$', u'10', u'Maximal depth of user gallery', False), ) for group, name, type, pattern, value, description, encrypted in config_fields: model.Session.add( model.Config(group, name, type, pattern, value, description, encrypted)) ### Roles print " ...roles" # .manage = You can manage other people's entries from this controller. avalable_permissions = [ # admin ['admin.auth', 'Can log into admin panel.'], ['admin.ban', 'Can manage bans.'], ['admin.config_view', 'Can view config.'], ['admin.config_edit', 'Can edit config.'], ['admin.config_admin', 'Can admin config.'], ['admin.ip', 'Can see user IP addresses.'], ['admin.roles', 'Can manage user roles. (God mode cheat.)'], # back_compat probably doesn't need permissions # comments ['comments.reply', 'Can make comments.'], # debug ['debug', 'Can use debug functions.'], # editlog ['editlog', 'Can view edit logs.'], # gallery ['gallery.view', 'Can browse galleries and view pictures.'], ['gallery.upload', 'Can upload submissions.'], ['gallery.favorite', 'Can manage own favorites.'], ['gallery.manage', 'Can manage other people\'s submissions.'], # index [ 'index.register', 'Can register a new account. (Don\'t enable this.)' ], ['index.login', 'Can log in to site.'], # journal ['journal.view', 'Can browse journals and view entries.'], ['journal.post', 'Can post journals.'], ['journal.manage', 'Can manage other people\'s journals.'], # news ['news.manage', 'Can manage site news.'], # notes ['notes.view', 'Can view notes.'], ['notes.write', 'Can write notes.'], ['notes.manage', 'Can view other people\'s notes.'], # search ['search.do', 'Can use site\'s search function.'], # stylesheets probably doesn't need permissions # template probably doesn't need permissions # user is view-only? # user_settings ['user_settings.avatars', 'Can manage own avatars.'], ['user_settings.relationships', 'Can manage own relationships.'], ['user_settings.manage', 'Can manage other people\'s settings.'], ] permissions = {} for p in avalable_permissions: permissions[p[0]] = model.Permission(*p) model.Session.add(permissions[p[0]]) ''' .permissions.append(permissions['admin.auth']) .permissions.append(permissions['admin.ban']) .permissions.append(permissions['admin.config_view']) .permissions.append(permissions['admin.config_edit']) .permissions.append(permissions['admin.config_admin']) .permissions.append(permissions['admin.ip']) .permissions.append(permissions['admin.roles']) .permissions.append(permissions['comments.reply']) .permissions.append(permissions['debug']) .permissions.append(permissions['editlog']) .permissions.append(permissions['gallery.view']) .permissions.append(permissions['gallery.upload']) .permissions.append(permissions['gallery.favorite']) .permissions.append(permissions['gallery.manage']) .permissions.append(permissions['index.register']) .permissions.append(permissions['index.login']) .permissions.append(permissions['journal.view']) .permissions.append(permissions['journal.post']) .permissions.append(permissions['journal.manage']) .permissions.append(permissions['news.manage']) .permissions.append(permissions['notes.view']) .permissions.append(permissions['notes.write']) .permissions.append(permissions['notes.manage']) .permissions.append(permissions['search.do']) .permissions.append(permissions['user_settings.avatars']) .permissions.append(permissions['user_settings.relationships']) .permissions.append(permissions['user_settings.manage']) ''' null_role = model.Role('Null', 'User who can\'t do anything. Literally.') null_role.sigil = ' ' model.Session.add(null_role) guest_role = model.Role('Guest', 'Non-registered Users') guest_role.sigil = ' ' guest_role.permissions.append(permissions['gallery.view']) guest_role.permissions.append(permissions['index.register']) guest_role.permissions.append(permissions['journal.view']) guest_role.permissions.append(permissions['search.do']) model.Session.add(guest_role) unverified_role = model.Role('Unverified', 'User who has not verified eir email') unverified_role.sigil = '?' unverified_role.permissions.append(permissions['gallery.view']) unverified_role.permissions.append(permissions['journal.view']) unverified_role.permissions.append(permissions['notes.view']) unverified_role.permissions.append(permissions['notes.write']) unverified_role.permissions.append(permissions['search.do']) model.Session.add(unverified_role) banned_role = model.Role('Banned', 'User who has been banned.') banned_role.sigil = '-' banned_role.permissions.append(permissions['gallery.view']) banned_role.permissions.append(permissions['gallery.favorite']) banned_role.permissions.append(permissions['index.login']) banned_role.permissions.append(permissions['journal.view']) banned_role.permissions.append(permissions['notes.view']) banned_role.permissions.append(permissions['search.do']) model.Session.add(banned_role) normal_role = model.Role('Member', 'Regular user') normal_role.sigil = '~' normal_role.permissions.append(permissions['comments.reply']) normal_role.permissions.append(permissions['gallery.view']) normal_role.permissions.append(permissions['gallery.upload']) normal_role.permissions.append(permissions['gallery.favorite']) normal_role.permissions.append(permissions['index.login']) normal_role.permissions.append(permissions['journal.view']) normal_role.permissions.append(permissions['journal.post']) normal_role.permissions.append(permissions['notes.view']) normal_role.permissions.append(permissions['notes.write']) normal_role.permissions.append(permissions['search.do']) normal_role.permissions.append(permissions['user_settings.avatars']) normal_role.permissions.append(permissions['user_settings.relationships']) normal_role.permissions.append(permissions['user_settings.manage']) model.Session.add(normal_role) admin_role = model.Role('Administrator', 'Site Administrator') admin_role.sigil = '@' admin_role.permissions.append(permissions['admin.auth']) admin_role.permissions.append(permissions['admin.ban']) admin_role.permissions.append(permissions['admin.config_view']) admin_role.permissions.append(permissions['admin.config_edit']) admin_role.permissions.append(permissions['admin.ip']) admin_role.permissions.append(permissions['admin.roles']) admin_role.permissions.append(permissions['comments.reply']) admin_role.permissions.append(permissions['editlog']) admin_role.permissions.append(permissions['gallery.view']) admin_role.permissions.append(permissions['gallery.upload']) admin_role.permissions.append(permissions['gallery.favorite']) admin_role.permissions.append(permissions['gallery.manage']) admin_role.permissions.append(permissions['index.register']) admin_role.permissions.append(permissions['index.login']) admin_role.permissions.append(permissions['journal.view']) admin_role.permissions.append(permissions['journal.post']) admin_role.permissions.append(permissions['journal.manage']) admin_role.permissions.append(permissions['news.manage']) admin_role.permissions.append(permissions['notes.view']) admin_role.permissions.append(permissions['notes.write']) admin_role.permissions.append(permissions['notes.manage']) admin_role.permissions.append(permissions['search.do']) admin_role.permissions.append(permissions['user_settings.avatars']) admin_role.permissions.append(permissions['user_settings.relationships']) admin_role.permissions.append(permissions['user_settings.manage']) model.Session.add(admin_role) sysadmin_role = model.Role( 'Bastard Operator From Hell', 'Users that have access to the underlying software.') sysadmin_role.sigil = '^' sysadmin_role.permissions.append(permissions['admin.auth']) sysadmin_role.permissions.append(permissions['admin.ban']) sysadmin_role.permissions.append(permissions['admin.config_view']) sysadmin_role.permissions.append(permissions['admin.config_edit']) sysadmin_role.permissions.append(permissions['admin.config_admin']) sysadmin_role.permissions.append(permissions['admin.ip']) sysadmin_role.permissions.append(permissions['admin.roles']) sysadmin_role.permissions.append(permissions['comments.reply']) sysadmin_role.permissions.append(permissions['debug']) sysadmin_role.permissions.append(permissions['editlog']) sysadmin_role.permissions.append(permissions['gallery.view']) sysadmin_role.permissions.append(permissions['gallery.upload']) sysadmin_role.permissions.append(permissions['gallery.favorite']) sysadmin_role.permissions.append(permissions['gallery.manage']) sysadmin_role.permissions.append(permissions['index.register']) sysadmin_role.permissions.append(permissions['index.login']) sysadmin_role.permissions.append(permissions['journal.view']) sysadmin_role.permissions.append(permissions['journal.post']) sysadmin_role.permissions.append(permissions['journal.manage']) sysadmin_role.permissions.append(permissions['news.manage']) sysadmin_role.permissions.append(permissions['notes.view']) sysadmin_role.permissions.append(permissions['notes.write']) sysadmin_role.permissions.append(permissions['notes.manage']) sysadmin_role.permissions.append(permissions['search.do']) sysadmin_role.permissions.append(permissions['user_settings.avatars']) sysadmin_role.permissions.append( permissions['user_settings.relationships']) sysadmin_role.permissions.append(permissions['user_settings.manage']) model.Session.add(sysadmin_role) print " ...user metadata" metadata_fields = ( (u'bio', u'Short bio'), (u'artist_type', u'Artist type'), (u'location', u'Location'), (u'interests', u'Interests'), (u'occupation', u'Occupation'), (u'age', u'Age'), (u'nerd_shell', u'Shell'), (u'nerd_os', u'Operating system'), (u'nerd_browser', u'Browser'), (u'fav_quote', u'Favorite quote'), (u'fav_movie', u'Favorite movie'), (u'fav_game', u'Favorite game'), (u'fav_player', u'Favorite music player'), (u'fav_artist', u'Favorite artist'), (u'fav_animal', u'Favorite animal'), (u'fav_site', u'Favorite Web site'), (u'fav_food', u'Favorite food'), ) for key, description in metadata_fields: model.Session.add( model.UserMetadataField(key=key, description=description)) print "Done." model.Session.commit() print "Creating test data..." print " ...users" u = model.User(u'fender', 'asdf') u.display_name = u'Fender' u.email = u'*****@*****.**' u.role = admin_role model.Session.add(u) u = model.User(u'eevee', 'pretzel') u.display_name = u'Eevee' u.email = u'*****@*****.**' u.role = admin_role model.Session.add(u) p = model.UserPreference(u, 'style_sheet', 'sufficiently-advanced') model.Session.add(p) p = model.UserPreference(u, 'style_color', 'light') model.Session.add(p) u = model.User(u'net-cat', 'asdf') u.display_name = u'net-cat' u.email = u'*****@*****.**' u.role = admin_role model.Session.add(u) u = model.User(u'luser', 'asdf') u.display_name = u'Luser' u.email = u'*****@*****.**' u.role = normal_role model.Session.add(u) print "Done." model.Session.commit() try: import magic except ImportError: print 'WARNING: mimetypes will be detected by filename instead of magic. In FreeBSD, install "devel/py-magic" from ports.'