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