예제 #1
0
파일: views.py 프로젝트: thomaspurchas/ESO
def get_upload_details(request):
    # Handle the file upload
    if request.method == 'POST':
        form = UploadDetailForm(request.POST)

        # Check the form is valid, and that we have a file to work with
        if form.is_valid() and request.session.get('upload_file', False):
            # Get the information that we stored on the file
            temp_file = request.session['upload_file']
            temp_file_sum = temp_file.md5_sum

            # Generate a document instance from the details the user provided
            new_document = Document(md5_sum = temp_file_sum)
            new_document.file.save(temp_file.name, temp_file.file, False)

            new_document.title = form.cleaned_data['title']

            # Save the document and clean up temp files and stuff
            new_document.save()
            log.info("Saved a new document: %s", new_document.id)
            clean_temp_file(temp_file)
            del request.session['upload_file']

            # Create a PDF and pngs
            create_pdf.delay(new_document.id,
                callback=create_pngs.subtask((new_document.id,)))

    if request.session.get('upload_file', False):
        temp_file = request.session['upload_file']

        data = {'filename': temp_file.name}

        try:
            try:
                file_data = solr.extract(temp_file.file)
            except IOError, e:
                log.warn('Solr extraction failed: %s', e)
                file_data = {'metadata': None}
            log.debug(file_data['metadata'])

            try:
                if file_data['metadata']:
                    data['title'] = file_data['metadata']['title'][0] or data['filename']
                    data['author'] = file_data['metadata']['Author'][0]
            except:
                pass

            data['title'] = data['filename']

            details_form = UploadDetailForm(data)

            # Redirect the user to the upload information page after POST
            return render_to_response('upload/upload_details.html',
                {'form': details_form, 'file_name': data['filename']},
                context_instance=RequestContext(request)
            )
        except SolrError:
            # Return an error message
            return render_to_response('upload/upload_details.html',
                {'error': 'Solr extraction error', 'file_name': data['filename']},
                context_instance=RequestContext(request)
            )