def get_default_config(global_config, base_config=None, **settings): """Provide a default configuration for a Petrel-based application. """ if base_config is not None: config = base_config else: zodb_uri = settings.get('zodb_uri', None) or \ global_config.get('zodb_uri', None) if not zodb_uri: raise ValueError("No 'zodb_uri' in application configuration.") finder = PersistentApplicationFinder(zodb_uri, app_maker) def get_root(request): return finder(request.environ) session_factory = session_factory_from_settings(settings) config = Configurator(root_factory=get_root, session_factory=session_factory, settings=settings) config.add_directive('register_template_api', _register_template_api) config.add_directive('register_content_type', _register_content_type) config.add_directive('customize_content_type', _customize_content_type) ## Register default content types from petrel.content.document import Document from petrel.content.file import File from petrel.content.file import file_download from petrel.content.folder import Folder from petrel.content.folder import folder_contents from petrel.content.folder import folder_delete from petrel.content.folder import folder_rename from petrel.content.folder import folder_rename_form from petrel.content.image import Image from petrel.content.site import Site from petrel.views.admin import toolbar ## FIXME: look at the new cache_max_age argument config.add_static_view(name='static-petrel', path='petrel:static') config.register_content_type(Site, addable=False) config.register_content_type(Document) config.register_content_type( File, display_view=file_download) config.register_content_type( Image, display_view=file_download) config.register_content_type(Folder) config.add_view(name='contents', context=IFolderish, view=folder_contents, renderer='templates/folder_contents.pt') config.add_view(name='folder_action_handler', context='petrel.interfaces.IFolderish', request_param="action=delete", view=folder_delete) config.add_view(name='folder_action_handler', context='petrel.interfaces.IFolderish', request_param='action=rename', view=folder_rename_form, renderer='templates/folder_rename.pt') config.add_view(name='rename', context='petrel.interfaces.IFolderish', view=folder_rename) config.add_view(name='_toolbar.html', renderer='petrel:templates/toolbar.pt', view=toolbar) ## Register default subscribers from repoze.folder.interfaces import IObjectAddedEvent from repoze.folder.interfaces import IObjectWillBeRemovedEvent from petrel.search import index from petrel.search import reindex from petrel.search import unindex from petrel.interfaces import IObjectModifiedEvent config.add_subscriber(index, IObjectAddedEvent) config.add_subscriber(reindex, IObjectModifiedEvent) config.add_subscriber(unindex, IObjectWillBeRemovedEvent) ## Enable authorization system and related views from petrel.auth import setup_who_api_factory from petrel.views.auth import login from petrel.views.auth import login_form from petrel.views.auth import logout setup_who_api_factory(global_config, settings['auth_config_file']) config.add_view(name='login', renderer='petrel:templates/login.pt', view=login_form) config.add_view(name='login', request_method='POST', renderer='petrel:templates/login.pt', view=login) config.add_view(name='logout', view=logout) return config