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)
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)