Example #1
0
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