Example #1
0
def view_unlink_wikipage(request):
    check_unlink_permission(request, *request.ductus.wiki_page.split_pagename())

    if request.ductus.wiki_revision.urn == "":
        return render_to_response('wiki/unlink_deleted.html', {
            'already_deleted': True,
        }, RequestContext(request))

    if request.method == 'POST':
        revision = construct_wiki_revision(request.ductus.wiki_page, "", request)
        revision.save()
        update_index_on_save('urn:%s' % request.ductus.wiki_revision.urn, [])

        return render_to_response('wiki/unlink_deleted.html', {
        }, RequestContext(request))

    return render_to_response('wiki/unlink_confirm.html', {
    }, RequestContext(request))
Example #2
0
def handle_blueprint_post(request, expected_model=DuctModel):
    # this is not a view, but rather a function that is meant to be called by
    # views.  should be put such functions somewhere else?
    from functools import partial
    from django.http import HttpResponseBadRequest
    HttpTextResponseBadRequest = partial(HttpResponseBadRequest,
                                         content_type="text/plain; charset=utf-8")

    from ductus.resource.ductmodels import BlueprintSaveContext, BlueprintError, ValidationError

    try:
        blueprint = json.loads(request.POST['blueprint'])
    except KeyError:
        return HttpTextResponseBadRequest(u"no blueprint given")
    except ValueError:
        return HttpTextResponseBadRequest(u"json fails to parse")
    save_context = BlueprintSaveContext.from_request(request)
    try:
        urn = expected_model.save_blueprint(blueprint, save_context)
    except BlueprintError as e:
        return HttpTextResponseBadRequest(str(e))
    except ValidationError as e:
        logger.debug("validation failed: %s", e)
        if settings.DEBUG:
            import sys
            import traceback
            exc_type, exc_info, tb = sys.exc_info()
            msg = list(traceback.format_tb(tb))
            msg.append(exc_type.__name__)
            msg.append(repr(exc_info))
            logger.error("\n".join(msg))
        return HttpTextResponseBadRequest(u"validation failed")

    # edit successful: update the index
    try:
        # try to get the parent urn from the blueprint, as it is already in memory
        parent_urn = blueprint['resource']['@patch']
    except KeyError:
        parent_urn = None
    url = request.path
    url = ':'.join(url[1:].split('/', 1))
    update_index_on_save(urn, [url], parent_urn)

    return SuccessfulEditRedirect(urn)