Parcourir la source

[importer_direct_upload] adding feature of automatic table creation when we drag and drop the local file in left assist

ayush.goyal il y a 4 ans
Parent
commit
d1d25b9da7

+ 4 - 0
apps/filebrowser/src/filebrowser/forms.py

@@ -134,6 +134,10 @@ class UploadFileForm(forms.Form):
   dest = PathField(label=_("Destination Path"), help_text=_("Filename or directory to upload to."), required=False)  # Used actually?
   extract_archive = BooleanField(required=False)
 
+class UploadLocalFileForm(forms.Form):
+  op = "upload"
+  file = FileField(label=_("File to Upload"))
+
 class UploadArchiveForm(forms.Form):
   op = "upload"
   archive = FileField(label=_("Archive to Upload"))

+ 1 - 1
desktop/core/src/desktop/js/ko/components/assist/ko.assistPanel.js

@@ -40,7 +40,7 @@ const TEMPLATE = `
     </div>
   </script>
   
-  <div class="assist-panel" data-bind="dropzone: { url: '/filebrowser/upload/file?dest=' + DROPZONE_HOME_DIR, params: {dest: DROPZONE_HOME_DIR}, clickable: false, paramName: 'hdfs_file', onComplete: function(path){ huePubSub.publish('assist.dropzone.complete', path); }, disabled: !window.SHOW_UPLOAD_BUTTON }">
+  <div class="assist-panel" data-bind="dropzone: { url: '/indexer/api/indexer/upload_local_file_drag_and_drop', clickable: false, paramName: 'file', onComplete: function(path){ huePubSub.publish('assist.dropzone.complete', path); }, disabled: !window.SHOW_UPLOAD_BUTTON }">
     <!-- ko if: availablePanels().length > 1 -->
     <div class="assist-panel-switches">
       <!-- ko foreach: availablePanels -->

+ 19 - 0
desktop/core/src/desktop/js/onePageViewModel.js

@@ -26,6 +26,7 @@ import waitForObservable from 'utils/timing/waitForObservable';
 import waitForVariable from 'utils/timing/waitForVariable';
 import getParameter from 'utils/url/getParameter';
 import getSearchParameter from 'utils/url/getSearchParameter';
+import { ASSIST_GET_DATABASE_EVENT, ASSIST_GET_SOURCE_EVENT } from 'ko/components/assist/events';
 
 class OnePageViewModel {
   constructor() {
@@ -443,9 +444,27 @@ class OnePageViewModel {
     };
 
     const openImporter = function (path) {
+      let databasename = '';
+      let interpreter = '';
+      const table = path.substring(path.lastIndexOf(':') + 1, path.lastIndexOf(';'));
       self.loadApp('importer');
+      huePubSub.publish(ASSIST_GET_SOURCE_EVENT, source => {
+        interpreter = source;
+      });
+      huePubSub.publish(ASSIST_GET_DATABASE_EVENT, {
+        connector: { id: interpreter },
+        callback: databaseDef => {
+          databasename = databaseDef.name;
+        }
+      });
       self.getActiveAppViewModel(vm => {
         vm.createWizard.source.path(path);
+        vm.currentStep(2);
+        vm.createWizard.source.interpreter(interpreter);
+        vm.createWizard.destination.name(databasename + '.' + table.substring(0, table.length - 4));
+        window.setTimeout(() => {
+          vm.createWizard.indexFile();
+        }, 500);
       });
     };
 

+ 18 - 2
desktop/libs/indexer/src/indexer/api3.py

@@ -44,6 +44,7 @@ from desktop.lib.exceptions_renderable import PopupException
 from desktop.lib.i18n import smart_unicode
 from desktop.lib.python_util import check_encoding
 from desktop.models import Document2
+from filebrowser.forms import UploadLocalFileForm
 from kafka.kafka_api import get_topics, get_topic_data
 from notebook.connectors.base import get_api, Notebook
 from notebook.decorators import api_error_handler
@@ -738,11 +739,26 @@ def save_pipeline(request):
   return JsonResponse(response)
 
 
+def upload_local_file_drag_and_drop(request):
+
+  response = {'status': -1, 'data': ''}
+  form = UploadLocalFileForm(request.POST, request.FILES)
+  if form.is_valid():
+    resp = upload_local_file(request)
+    json_data = json.loads(resp.content)
+    response['status'] = 0
+    response.update({
+      'path': json_data['local_file_url'],
+    })
+
+  return JsonResponse(response)
+
+
 def upload_local_file(request):
 
-  upload_file = request.FILES['inputfile']
+  upload_file = request.FILES['file']
   username = request.user.username
-  filename = "%s_%s" % (username, uuid.uuid4())
+  filename = "%s_%s:%s;" % (username, uuid.uuid4(), upload_file.name)
   temp_file = tempfile.NamedTemporaryFile(prefix=filename, suffix='.csv', delete=False)
   temp_file.write(upload_file.read())
   local_file_url = temp_file.name

+ 1 - 1
desktop/libs/indexer/src/indexer/templates/importer.mako

@@ -3183,7 +3183,7 @@ ${ commonheader(_("Importer"), "indexer", user, request, "60px") | n,unicode }
         function upload() {
           var fd = new FormData();
           var files = $('#inputfile')[0].files[0];
-          fd.append('inputfile', files);
+          fd.append('file', files);
           var file_size = files.size;
           if (file_size > 200000) {
                 $.jHueNotify.warn("${ _('File size exceeds the supported size (200 KB).') }");

+ 1 - 0
desktop/libs/indexer/src/indexer/urls.py

@@ -83,6 +83,7 @@ urlpatterns += [
   re_path(r'^api/importer/save/?$', indexer_api3.save_pipeline, name='save_pipeline'),
   
   re_path(r'^api/indexer/upload_local_file/?$', indexer_api3.upload_local_file, name='upload_local_file'),
+  re_path(r'^api/indexer/upload_local_file_drag_and_drop/?$', indexer_api3.upload_local_file_drag_and_drop, name='upload_local_file_drag_and_drop'),
 ]
 
 urlpatterns += [