예제 #1
0
파일: views.py 프로젝트: 6C1/mediathread
def asset_create(request):
    """
    We'd like to support basically the Delicious URL API as much as possible
    /save?jump={yes|close}&url={url}&title={title}&{noui}&v={5}&share={yes}
    But also thumb={url}&stream={url}&...
    Other groups to pay attention to are MediaMatrix
    (seems subset of delicious: url=)
    """

    req_dict = getattr(request, request.method)
    user = _parse_user(request)
    metadata = _parse_metadata(req_dict)

    title = req_dict.get('title', '')
    asset = Asset.objects.get_by_args(req_dict, asset__course=request.course)

    if asset is False:
        raise AssertionError("no arguments were supplied to make an asset")

    if asset is None:
        try:
            asset = Asset(title=title[:1020],  # max title length
                          course=request.course,
                          author=user)
            asset.save()

            for source in sources_from_args(request, asset).values():
                if len(source.url) <= 4096:
                    source.save()

            if "tag" in metadata:
                for t in metadata["tag"]:
                    asset.save_tag(user, t)

            asset.metadata_blob = simplejson.dumps(metadata)
            asset.save()
        except:
            # we'll make it here if someone doesn't submit
            # any primary_labels as arguments
            # @todo verify the above comment.
            raise AssertionError("no primary source provided")

    # create a global annotation
    asset.global_annotation(user, True)

    asset_url = reverse('asset-view', args=[asset.id])

    source = request.POST.get('asset-source', "")

    if source == 'bookmarklet':
        asset_url += "?level=item"

    # for bookmarklet mass-adding
    if request.REQUEST.get('noui', '').startswith('postMessage'):
        return render_to_response('assetmgr/interface_iframe.html',
                                  {'message': ('%s|%s' %
                                   (request.build_absolute_uri(asset_url)),
                                   request.REQUEST['noui']), })
    elif request.is_ajax():
        return HttpResponse(serializers.serialize('json', asset),
                            mimetype="application/json")
    elif "archive" == asset.primary.label:
        redirect_url = request.POST.get('redirect-url',
                                        reverse('class-manage-sources'))
        url = "%s?newsrc=%s" % (redirect_url, asset.title)
        return HttpResponseRedirect(url)
    else:
        return HttpResponseRedirect(asset_url)
예제 #2
0
def asset_create(request):
    """
    We'd like to support basically the Delicious URL API as much as possible
    /save?jump={yes|close}&url={url}&title={title}&{noui}&v={5}&share={yes}
    But also thumb={url}&stream={url}&...
    Other groups to pay attention to are MediaMatrix
    (seems subset of delicious: url=)
    """

    req_dict = getattr(request, request.method)
    user = _parse_user(request)
    metadata = _parse_metadata(req_dict)
    title = req_dict.get('title', '')
    asset = Asset.objects.get_by_args(req_dict, asset__course=request.course)

    if asset is False:
        raise AssertionError("no arguments were supplied to make an asset")

    if asset is None:
        try:
            asset = Asset(
                title=title[:1020],  # max title length
                course=request.course,
                author=user)
            asset.save()

            for source in sources_from_args(request, asset).values():
                if len(source.url) <= 4096:
                    source.save()

            if "tag" in metadata:
                for each_tag in metadata["tag"]:
                    asset.save_tag(user, each_tag)

            asset.metadata_blob = simplejson.dumps(metadata)
            asset.save()
        except:
            # we'll make it here if someone doesn't submit
            # any primary_labels as arguments
            # @todo verify the above comment.
            raise AssertionError("no primary source provided")

    # create a global annotation
    asset.global_annotation(user, True)
    asset_url = reverse('asset-view', args=[asset.id])
    source = request.POST.get('asset-source', "")

    if source == 'bookmarklet':
        # bookmarklet create
        asset_url += "?level=item"

        template = loader.get_template('assetmgr/analyze.html')
        context = RequestContext(
            request, {
                'request': request,
                'user': user,
                'action': request.POST.get('button', None),
                'asset_url': asset_url
            })
        return HttpResponse(template.render(context))
    elif request.REQUEST.get('noui', '').startswith('postMessage'):
        # for bookmarklet mass-adding
        return render_to_response(
            'assetmgr/interface_iframe.html', {
                'message': ('%s|%s' % (request.build_absolute_uri(asset_url)),
                            request.REQUEST['noui']),
            })
    elif request.is_ajax():
        # unsure when asset_create is called via ajax
        return HttpResponse(serializers.serialize('json', asset),
                            mimetype="application/json")
    elif "archive" == asset.primary.label:
        redirect_url = request.POST.get('redirect-url',
                                        reverse('class-manage-sources'))
        url = "%s?newsrc=%s" % (redirect_url, asset.title)
        return HttpResponseRedirect(url)
    else:
        # server2server create
        return HttpResponseRedirect(asset_url)