Exemplo n.º 1
0
def upload_import(request, task_id):

    try:
        upload_rec = get_pending_upload(request.session['username'], task_id)
    except:
        return HttpResponseNotFound()

    res = AsyncResult(task_id)
    if res.state != "SUCCESS":
        return HttpResponseForbidden()

    filename = upload_rec['filename']
    filename_base = filename.split(".")[0]

    if request.method == 'POST':
        form = UploadImport(request.POST)
        if form.is_valid():
            title = form.cleaned_data['title']
            path = "/%s/%s" % (request.session['username'], form.cleaned_data['path'])
            description = form.cleaned_data['description']
            labels = form.cleaned_data['labels'].split(',')
            labels = [label.strip() for label in labels if len(label.strip()) > 0]

            task = place_upload.delay(upload_rec['main_rowkey'], upload_rec['subfiles'],
                                      title, path, description, selected_dae=upload_rec['dae_choice'],
                                      extra_metadata={'labels': labels})

            save_upload_task(username=request.session['username'],
                             task_id=task.task_id,
                             row_key=upload_rec['main_rowkey'],
                             filename=upload_rec['filename'],
                             subfiles=upload_rec['subfiles'],
                             dae_choice=upload_rec['dae_choice'],
                             task_name="place_upload")

            try:
                remove_pending_upload(request.session['username'], task_id)
            except:
                return HttpResponseServerError("There was an error removing your old upload record.")

            return redirect('content.views.upload_processing', task_id=task.task_id)

    else:
        if res.result is None:
            default_filename = filename
        else:
            default_filename = res.result
        form = UploadImport(initial={'path':default_filename, 'title':filename_base.capitalize()})

    view_params = {'form': form,
                   'task_id': task_id,
                   'filename': filename}
    return render_to_response('content/import.html', view_params, context_instance = RequestContext(request))
Exemplo n.º 2
0
def upload_choice(request, task_id):

    try:
        upload_rec = get_pending_upload(request.session['username'], task_id)
    except:
        return HttpResponseForbidden()
    res = AsyncResult(task_id)
    if res.state == "FAILURE" and type(res.result).__name__ == "TooManyDaeFound":
        names = res.result.names
    else:
        return HttpResponseForbidden()

    if request.method == 'POST':
        form = UploadChoiceForm(task_id, names, request.POST)
        if form.is_valid():
            selected_dae = form.cleaned_data['file']
            for id,value in form.fields['file'].choices:
                if id == selected_dae:
                    selected_name = value

            task = import_upload.delay(upload_rec['main_rowkey'], upload_rec['subfiles'], selected_name)

            save_upload_task(username=request.session['username'],
                             task_id=task.task_id,
                             row_key=upload_rec['main_rowkey'],
                             filename=upload_rec['filename'],
                             subfiles=upload_rec['subfiles'],
                             dae_choice=selected_name,
                             task_name="import_upload")

            try:
                remove_pending_upload(request.session['username'], task_id)
            except:
                return HttpResponseServerError("There was an error removing your old upload record.")

            return redirect('content.views.upload_processing', task_id=task.task_id)
    else:
        form = UploadChoiceForm(task_id, names)

    view_params = {'task_id':task_id, 'form':form}

    return render_to_response('content/upload_choice.html', view_params, context_instance = RequestContext(request))
Exemplo n.º 3
0
def upload_processing(request, task_id='', action=False):
    username = request.GET.get('username')
    user_authed = False
    if request.user['is_authenticated']:
        user_authed = True
        if username is None:
            username = request.session['username']

    try:
        upload_rec = get_pending_upload(username, task_id)
    except:
        return HttpResponseForbidden()

    res = AsyncResult(task_id)

    xhr = request.GET.has_key('xhr')
    if xhr:
        json_result = {'state':res.state}
        if res.state == 'SUCCESS':
            json_result['path'] = res.result
        return HttpResponse(simplejson.dumps(json_result, default=json_handler), mimetype='application/json')

    api = request.GET.has_key('api')
    if api:
        json_result = {'state':res.state}
        if res.state == 'FAILURE':
            try:
                remove_pending_upload(username, task_id)
            except:
                return HttpResponseServerError("There was an error removing your upload record.")
        elif res.state == 'SUCCESS':
            path = res.result
            json_result['path'] = path
            if not upload_rec['ephemeral']:
                try:
                    save_file_upload(username, path)
                except:
                    return HttpResponseServerError("There was an error saving your upload.")
            try:
                remove_pending_upload(username, task_id)
            except:
                return HttpResponseServerError("There was an error removing your upload record.")
        return HttpResponse(simplejson.dumps(json_result, default=json_handler), mimetype='application/json')

    if user_authed and username == request.session['username'] and action == 'confirm':
        if upload_rec['task_name'] == 'import_upload':
            try:
                remove_pending_upload(username, task_id)
            except:
                return HttpResponseServerError("There was an error removing your upload record.")
            messages.info(request, 'Upload removed')
            return redirect('users.views.uploads')
        elif res.state == "FAILURE":
            try:
                remove_pending_upload(username, task_id)
            except:
                return HttpResponseServerError("There was an error removing your upload record.")
            messages.info(request, 'Upload removed')
            return redirect('users.views.uploads')
        else:
            path = res.result
            try:
                save_file_upload(username, path)
            except:
                return HttpResponseServerError("There was an error saving your upload.")
            try:
                remove_pending_upload(username, task_id)
            except:
                return HttpResponseServerError("There was an error removing your upload record.")
            messages.info(request, 'Upload saved')
            return redirect('users.views.uploads')

    erase = False
    edit_link = False
    error_message = None
    success_message = None
    if res.state == "FAILURE":
        if type(res.result).__name__ == "DatabaseError":
            error_message = "An error occurred when accessing the database."
            erase = True
        elif type(res.result).__name__ == "NoDaeFound":
            error_message = "No DAE file was found in the uploaded archive."
            erase = True
        elif type(res.result).__name__ == "ColladaError":
            error_message = "There was an error parsing the collada file: %s" % str(res.result.orig)
            erase = True
        elif type(res.result).__name__ == "ImageError":
            error_message = "There was an error loading the included texture image: %s" % str(res.result.filename)
            erase = True
        elif type(res.result).__name__ == "TooManyDaeFound":
            error_message = "There is more than one DAE file in the uploaded archive. Click 'Continue' to choose one."
            edit_link = reverse('content.views.upload_choice', args=[task_id])
        elif type(res.result).__name__ == "SubFilesNotFound":
            error_message = "There were dependencies of the collada file not found in the file uploaded. Click 'Continue' to upload them."
            edit_link = reverse('content.views.upload', args=[task_id])
        else:
            error_message = "An unknown error has occurred."
            erase = True
    elif res.state == "SUCCESS":
        if upload_rec['task_name'] == 'import_upload':
            success_message = "File was processed successfully. Click 'Continue' to add information to the file."
            edit_link = reverse('content.views.upload_import', args=[task_id])
        else:
            success_message = "File was imported successfully. Click 'Continue' to save."
            edit_link = reverse('content.views.upload_processing', args=['confirm', task_id])

    view_params = {'task_id': task_id,
                   'task_state': res.state,
                   'error_message': error_message,
                   'erase': erase,
                   'edit_link': edit_link,
                   'success_message': success_message}
    return render_to_response('content/processing.html', view_params, context_instance = RequestContext(request))
Exemplo n.º 4
0
def upload(request, task_id=None):

    if task_id:
        try:
            upload_rec = get_pending_upload(request.session['username'], task_id)
        except:
            return HttpResponseForbidden()
        orig_name = upload_rec['filename']
        subfiles_uploaded = upload_rec['subfiles']
        existing_files = subfiles_uploaded.keys()
        existing_files.append(orig_name)
        res = AsyncResult(task_id)
        if res.state == "FAILURE" and type(res.result).__name__ == "SubFilesNotFound":
            names = res.result.names
        else:
            return HttpResponseForbidden()

    if request.method == 'POST':
        if task_id:
            form = UploadForm(names, request.POST, request.FILES)
            if form.is_valid():
                subfiles = subfiles_uploaded
                for n in names:
                    subfiles[n] = request.FILES[n].row_key

                task = import_upload.delay(upload_rec['main_rowkey'], subfiles, upload_rec['dae_choice'])

                save_upload_task(username=request.session['username'],
                                 task_id=task.task_id,
                                 row_key=upload_rec['main_rowkey'],
                                 filename=upload_rec['filename'],
                                 subfiles=subfiles,
                                 dae_choice=upload_rec['dae_choice'],
                                 task_name="import_upload")

                try:
                    remove_pending_upload(request.session['username'], task_id)
                except:
                    return HttpResponseServerError("There was an error removing your old upload record.")

                return redirect('content.views.upload_processing', task_id=task.task_id)

            else:
                view_params = {'form':form, 'existing_files':existing_files}
        else:
            form = UploadForm(['File'], request.POST, request.FILES)
            if form.is_valid():
                upfile = request.FILES['File']
                task = import_upload.delay(upfile.row_key, subfiles={})

                save_upload_task(username=request.session['username'],
                                 task_id=task.task_id,
                                 row_key=upfile.row_key,
                                 filename=upfile.name,
                                 subfiles={},
                                 dae_choice="",
                                 task_name="import_upload")

                return redirect('content.views.upload_processing', task_id=task.task_id)
            else:
                view_params = {'form':form}
    else:
        if task_id:
            form = UploadForm(names)
            view_params = {'form':form, 'existing_files':existing_files}
        else:
            form = UploadForm(['File'])
            view_params = {'form':form}

    view_params['task_id'] = task_id
    return render_to_response('content/upload.html', view_params, context_instance = RequestContext(request))