Example #1
0
File: base.py Project: dbaty/Petrel
def content_edit(request):
    item = request.context
    form = item._get_edit_form(request.POST)
    if not form.validate():
        ct_registry = get_content_type_registry(request.registry)
        ## FIXME: how can this work?
        edit_form_view = ct_registry[item]['edit_form_view']
        return edit_form_view(request, form)
    form.populate_obj(item)
    request.session.flash(u'Your changes have been saved.', 'success')
    location = request.resource_url(item) + getattr(item, 'admin_view_path', '')
    return HTTPSeeOther(location)
Example #2
0
File: base.py Project: dbaty/Petrel
def content_view(request):
    ct_registry = get_content_type_registry(request.registry)
    klass = request.context.__class__
    templates = ct_registry[klass]['display_templates']
    if not templates:
        raise ValueError('The default display view is used for the %s '
                         'content type but no template has been '
                         'provided. It must be customized.' % klass.label)
    template = _get_display_template(
            ct_registry, request.context)
    api = get_template_api(request)
    return render_to_response(template,
                              {'api': api, 'context': request.context})
Example #3
0
 def get_addable_types(self, request):
     """Return content types that can be added as a list of
     dictionaries that contain the label of the content type and
     the view name of the add form.
     """
     ct_registry = get_content_type_registry(request.registry)
     types = []
     for klass, info in ct_registry.items():
         if not info['addable']:
             continue
         types.append({'label': klass.label,
                       'form': 'add_%s' % klass.meta_type.lower()})
     return sorted(types, key=lambda x: x['label'])
Example #4
0
File: base.py Project: dbaty/Petrel
def content_add(content_type, request):
    context = request.context
    form = content_type._get_add_form(request.POST)
    form.errors['id'] = [u'Invalid id']
    if not form.validate(context):
        ct_registry = get_content_type_registry(request.registry)
        add_form_view = ct_registry[content_type]['add_form_view']
        return add_form_view(request, form)
    item = content_type()
    form.populate_obj(item)
    context.add(request.registry, form.id.data, item)
    label = content_type.label
    msg = (u'%s "%s" has been created and you are '
           'now viewing it.' % (label, form.title.data))
    request.session.flash(msg, 'success')
    location = request.resource_url(item) + getattr(item, 'admin_view_path', '')
    return HTTPSeeOther(location)
Example #5
0
def _register_content_type(config,
                           klass,
                           addable=True,
                           display_view=None,
                           display_templates=(),
                           add_form_view=None,
                           add_template=None,
                           add_view=None,
                           edit_form_view=None,
                           edit_template=None,
                           edit_view=None,
                           extra_views=()):
    """FIXME: document args"""
    from petrel.content.base import content_add
    from petrel.content.base import content_add_form
    from petrel.content.base import content_edit
    from petrel.content.base import content_edit_form
    from petrel.content.base import content_view

    ## Default views
    if display_view is None:
        display_view = content_view
        if display_templates is None:
            display_templates = ()
    if add_form_view is None:
        add_form_view = lambda request, form=None: content_add_form(
            klass, request, form)
        if add_template is None:
            add_template = 'templates/content_edit.pt'
    if add_view is None:
        add_view = lambda request: content_add(klass, request)
    if edit_form_view is None:
        edit_form_view = content_edit_form
        if edit_template is None:
            edit_template = 'templates/content_edit.pt'
    if edit_view is None:
        edit_view = content_edit

    ## Register views
    if addable:
        ## The 'renderer' attribute below is needed when the view has
        ## to redisplay the add form.
        config.add_view(name='add_%s' % klass.meta_type.lower(),
                        context=IFolderish,
                        request_method='POST',
                        view=add_view,
                        renderer=add_template)
        config.add_view(name='add_%s' % klass.meta_type.lower(),
                        context=IFolderish,
                        view=add_form_view,
                        renderer=add_template)
    config.add_view(context=klass,
                    view=display_view)
    config.add_view(name='edit',
                    context=klass,
                    view=edit_form_view,
                    renderer=edit_template)
    ## The 'renderer' attribute below is needed when the view has
    ## to redisplay the edit form.
    config.add_view(name='edit',
                    context=klass,
                    request_method='POST',
                    view=edit_view,
                    renderer=edit_template)
    for extra_view in extra_views:
        config.add_view(**extra_view)

    ## Register the content type in our content type registry.
    ct_registry = get_content_type_registry(config.registry)
    ct_registry[klass] = dict(
        addable=addable,
        add_form_view=add_form_view,
        edit_form_view=edit_form_view,
        display_templates=display_templates)