Advertisement
Guest User

Untitled

a guest
Feb 15th, 2017
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.13 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 = {'uploaded_doc': [
  32.  
  33. ]}
  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. NotificationManager.create_user_message(request.user, "Uploaded", to_massage).send()
  54. return HttpResponse(json.dumps({
  55. 'document': str(file_name)
  56. }), content_type='application/json')
  57.  
  58. else:
  59. # TODO Change documents_count to work with files lists (after drag&drop batch will work)
  60. batch = BatchUpload.objects.create(
  61. batch_type="Archive",
  62. name=file_name,
  63. documents_count=1,
  64. owner=request.user)
  65. # Get the uploaded file
  66. uploaded_file = request.FILES.get('file')
  67.  
  68. logging.info('Uploading file from source=%s' % str(source))
  69.  
  70. # Get the proper uploader
  71. uploader = source_handler(source)
  72.  
  73. # Process the upload request
  74. is_success, payload = uploader.process(uploaded_file=uploaded_file,
  75. file_url=file_url,
  76. file_name=file_name,
  77. access_token=access_token)
  78.  
  79. # Something went wrong during the file processing, refresh
  80. if not is_success:
  81. msg = payload
  82. logging.warning('Upload failed msg=%s' % msg)
  83. # TODO: Toast the msg somehow
  84. return redirect(reverse('upload_file'))
  85.  
  86. original_filename, temp_file_handle = payload
  87. title = remove_extension(original_filename).replace('_', ' ')
  88.  
  89. # Save locally
  90. temp_path = default_storage.save(str(uuid.uuid4()), ContentFile(temp_file_handle.read()))
  91. temp_filename = os.path.join(settings.MEDIA_ROOT, temp_path)
  92.  
  93. document = Document.analysis_workflow_start(uploader=request.user,
  94. file_path=temp_filename,
  95. upload_source=source,
  96. original_filename=original_filename,
  97. title=title,
  98. is_from_batch=True,
  99. to_batch_upload=batch
  100. )
  101.  
  102. return HttpResponse(json.dumps({
  103. 'document': document.to_dict(include_analysis=False, include_raw=False)
  104. }), content_type='application/json')
  105.  
  106.  
  107. @csrf_exempt
  108. @login_required(login_url=reverse_lazy('login'))
  109. def process_encrypted_archive(request):
  110. allow, _ = has_permission(request, 'app_upload')
  111.  
  112. if not allow:
  113. logging.warning('%s tried to get without proper subscription' % request.user)
  114. return HttpResponse(content_type='application/json',
  115. status=403)
  116.  
  117. archive_id = request.POST["id"]
  118. password = str(request.POST["password"])
  119.  
  120. instance = Archive.objects.get(id=archive_id)
  121. to_massage = {'uploaded_doc': [
  122.  
  123. ]}
  124. with zipfile.ZipFile(instance.path, "r") as zip_instance:
  125. batch = BatchUpload.objects.create(
  126. batch_type="Archive",
  127. name=instance.name,
  128. documents_count=len(zip_instance.namelist()),
  129. owner=request.user)
  130. try:
  131. with zipfile.ZipFile(instance.path, "r") as archive:
  132. for file_in_archive in archive.namelist():
  133. with archive.open(file_in_archive, 'r', pwd=str(password)) as f:
  134. document_to_analyze(f, file_in_archive, user=request.user, source="local", batch=batch)
  135. to_massage['uploaded_doc'].append({'document': str(file_in_archive)})
  136. instance.password = password
  137. except RuntimeError:
  138. batch.delete()
  139. return HttpResponse(json.dumps({
  140. 'massage': 'Wrong password',
  141. 'failed': True,
  142. 'archive': str(instance.name),
  143. 'password': password
  144. }), content_type='application/json')
  145. NotificationManager.create_user_message(request.user, "Uploaded", to_massage).send()
  146. return HttpResponse(json.dumps({
  147. 'archive': str(instance.name)
  148. }), content_type='application/json')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement