Skip to content

Commit 6d5887d

Browse files
documents uploads will use HDFSfileUploadHandler when task_server is on
1 parent 4d9bd21 commit 6d5887d

File tree

3 files changed

+40
-2
lines changed

3 files changed

+40
-2
lines changed

desktop/core/src/desktop/settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -660,7 +660,7 @@ def is_oidc_configured():
660660
file_upload_handlers = []
661661
if is_chunked_fileuploader_enabled():
662662
file_upload_handlers = [
663-
'hadoop.fs.upload.FineUploaderChunkedUploadHandler',
663+
'hadoop.fs.upload.CustomDocumentsUploadHandler',
664664
'django.core.files.uploadhandler.MemoryFileUploadHandler',
665665
'django.core.files.uploadhandler.TemporaryFileUploadHandler',
666666
]

desktop/core/src/desktop/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@
165165
re_path(r'^desktop/api2/user_preferences(?:/(?P<key>\w+))?/?$', desktop_api2.user_preferences, name="desktop.api2.user_preferences"),
166166

167167
re_path(r'^desktop/api2/doc/export/?$', desktop_api2.export_documents),
168-
re_path(r'^desktop/api2/doc/import/?$', desktop_api2.import_documents),
168+
re_path(r'^desktop/api2/doc/import/?$', desktop_api2.import_documents, name='import_documents'),
169169

170170
re_path(r'^desktop/api2/gist/create/?$', desktop_api2.gist_create),
171171
re_path(r'^desktop/api2/gist/open/?$', desktop_api2.gist_get),

desktop/libs/hadoop/src/hadoop/fs/upload.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
from django.core.files.uploadhandler import FileUploadHandler, SkipFile, StopFutureHandlers, StopUpload, UploadFileException
3131
from django.utils.translation import gettext as _
32+
from django.urls import reverse
3233

3334
import hadoop.cluster
3435
from desktop.lib import fsmanager
@@ -221,6 +222,43 @@ def close(self):
221222
self._file.close()
222223

223224

225+
class CustomDocumentsUploadHandler(FileUploadHandler):
226+
"""
227+
Delegates the upload handling based on the request URL.
228+
229+
When the request URL starts with "/desktop/api2/doc/import" (indicating a document
230+
import), delegate all processing to HDFSfileUploadHandler.
231+
Otherwise, delegate to FineUploaderChunkedUploadHandler.
232+
"""
233+
234+
def __init__(self, request, *args, **kwargs):
235+
super().__init__(request, *args, **kwargs)
236+
import_path = reverse('import_documents')
237+
238+
if request.path.startswith(import_path):
239+
self.delegate = HDFSfileUploadHandler(request)
240+
else:
241+
self.delegate = FineUploaderChunkedUploadHandler(request, *args, **kwargs)
242+
243+
def new_file(self, field_name, file_name, *args, **kwargs):
244+
try:
245+
if hasattr(self.delegate, 'new_file'):
246+
result = self.delegate.new_file(field_name, file_name, *args, **kwargs)
247+
except StopFutureHandlers:
248+
result = None
249+
return result
250+
251+
def receive_data_chunk(self, raw_data, start):
252+
if hasattr(self.delegate, 'receive_data_chunk'):
253+
return self.delegate.receive_data_chunk(raw_data, start)
254+
return raw_data
255+
256+
def file_complete(self, file_size):
257+
if hasattr(self.delegate, 'file_complete'):
258+
return self.delegate.file_complete(file_size)
259+
return None
260+
261+
224262
class FineUploaderChunkedUploadHandler(FileUploadHandler):
225263
"""
226264
A custom file upload handler for handling chunked uploads using FineUploader.

0 commit comments

Comments
 (0)