Advertisement
Guest User

Untitled

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