Advertisement
Guest User

Untitled

a guest
Feb 15th, 2017
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.96 KB | None | 0 0
  1. @csrf_exempt
  2. @login_required(login_url=reverse_lazy('login'))
  3. def upload(request):
  4. from richtext.importing import source_handler
  5.  
  6. # Check if the subscription allows uploading
  7.  
  8. allow, _ = has_permission(request, 'app_upload')
  9. if not allow:
  10. # TODO: Toast the msg somehow
  11. logging.warning('%s tried to upload without proper subscription' % request.user)
  12. return HttpResponse(json.dumps({'document': None}),
  13. content_type='application/json',
  14. status=403)
  15.  
  16. # Get POST parameters
  17. source = request.POST.get('filesource')
  18. file_url = request.POST.get('fileurl')
  19. file_name = request.POST.get('file_name')
  20. access_token = request.POST.get('accessToken')
  21.  
  22. if re.findall(".zip", file_name):
  23. uploaded_zip = save_zip_from_request(file_name, request.FILES.get('file'))
  24. with zipfile.ZipFile(uploaded_zip, "r") as zip_instance:
  25. batch = BatchUpload.objects.create(
  26. batch_type="Archive",
  27. name=file_name,
  28. documents_count=len(zip_instance.namelist()),
  29. owner=request.user)
  30.  
  31. to_massage = {
  32. 'uploaded_doc': [],
  33. 'archive': str(file_name)}
  34.  
  35. try:
  36. with zipfile.ZipFile(uploaded_zip, "r") as archive:
  37. for file_in_archive in archive.namelist():
  38. with archive.open(file_in_archive, 'r') as f:
  39. document_to_analyze(f, file_in_archive, user=request.user, source="local", batch=batch)
  40. to_massage['uploaded_doc'].append({'document': str(file_in_archive)})
  41. except RuntimeError:
  42. archive_instance = Archive.objects.create(
  43. name=file_name,
  44. path=uploaded_zip,
  45. is_encrypted=True
  46. )
  47. batch.delete()
  48.  
  49. return HttpResponse(json.dumps({
  50. 'encrypted': True,
  51. 'id': archive_instance.id
  52. }), content_type='application/json')
  53. return HttpResponse(json.dumps(to_massage), content_type='application/json')
  54.  
  55. else:
  56. # TODO Change documents_count to work with files lists (after drag&drop batch will work)
  57. batch = BatchUpload.objects.create(
  58. batch_type="Archive",
  59. name=file_name,
  60. documents_count=1,
  61. owner=request.user)
  62. # Get the uploaded file
  63. uploaded_file = request.FILES.get('file')
  64.  
  65. logging.info('Uploading file from source=%s' % str(source))
  66.  
  67. # Get the proper uploader
  68. uploader = source_handler(source)
  69.  
  70. # Process the upload request
  71. is_success, payload = uploader.process(uploaded_file=uploaded_file,
  72. file_url=file_url,
  73. file_name=file_name,
  74. access_token=access_token)
  75.  
  76. # Something went wrong during the file processing, refresh
  77. if not is_success:
  78. msg = payload
  79. logging.warning('Upload failed msg=%s' % msg)
  80. # TODO: Toast the msg somehow
  81. return redirect(reverse('upload_file'))
  82.  
  83. original_filename, temp_file_handle = payload
  84. title = remove_extension(original_filename).replace('_', ' ')
  85.  
  86. # Save locally
  87. temp_path = default_storage.save(str(uuid.uuid4()), ContentFile(temp_file_handle.read()))
  88. temp_filename = os.path.join(settings.MEDIA_ROOT, temp_path)
  89.  
  90. document = Document.analysis_workflow_start(uploader=request.user,
  91. file_path=temp_filename,
  92. upload_source=source,
  93. original_filename=original_filename,
  94. title=title,
  95. is_from_batch=True,
  96. to_batch_upload=batch
  97. )
  98.  
  99. return HttpResponse(json.dumps({
  100. 'document': document.to_dict(include_analysis=False, include_raw=False)
  101. }), content_type='application/json')
  102.  
  103.  
  104. @csrf_exempt
  105. @login_required(login_url=reverse_lazy('login'))
  106. def process_encrypted_archive(request):
  107. allow, _ = has_permission(request, 'app_upload')
  108.  
  109. if not allow:
  110. logging.warning('%s tried to get without proper subscription' % request.user)
  111. return HttpResponse(content_type='application/json',
  112. status=403)
  113.  
  114. archive_id = request.POST["id"]
  115. password = str(request.POST["password"])
  116.  
  117. instance = Archive.objects.get(id=archive_id)
  118. to_massage = {
  119. 'uploaded_doc': [],
  120. 'archive': str(instance.name)}
  121. with zipfile.ZipFile(instance.path, "r") as zip_instance:
  122. batch = BatchUpload.objects.create(
  123. batch_type="Archive",
  124. name=instance.name,
  125. documents_count=len(zip_instance.namelist()),
  126. owner=request.user)
  127. try:
  128. with zipfile.ZipFile(instance.path, "r") as archive:
  129. for file_in_archive in archive.namelist():
  130. with archive.open(file_in_archive, 'r', pwd=str(password)) as f:
  131. document_to_analyze(f, file_in_archive, user=request.user, source="local", batch=batch)
  132. to_massage['uploaded_doc'].append({'document': str(file_in_archive)})
  133. instance.password = password
  134. except RuntimeError:
  135. batch.delete()
  136. return HttpResponse(json.dumps({
  137. 'massage': 'Wrong password',
  138. 'failed': True,
  139. 'archive': str(instance.name),
  140. 'password': password
  141. }), content_type='application/json')
  142. return HttpResponse(json.dumps(to_massage), content_type='application/json')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement