Przeglądaj źródła

[api] Add /storage/upload public operation

Romain Rigaux 4 lat temu
rodzic
commit
fc4b21475d

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

@@ -74,7 +74,9 @@ class PathField(CharField):
 
   def clean(self, value):
     cleaned_path = CharField.clean(self, value)
-    if value.lower().startswith(S3A_ROOT):
+    if not value:
+      value = ''
+    elif value.lower().startswith(S3A_ROOT):
       cleaned_path = s3_normpath(cleaned_path)
     elif value.lower().startswith(ABFS_ROOT):
       cleaned_path = abfs_normpath(cleaned_path)
@@ -129,7 +131,7 @@ class UploadFileForm(forms.Form):
   op = "upload"
   # The "hdfs" prefix in "hdfs_file" triggers the HDFSfileUploadHandler
   hdfs_file = FileField(label=_("File to Upload"))
-  dest = PathField(label=_("Destination Path"), help_text=_("Filename or directory to upload to."))
+  dest = PathField(label=_("Destination Path"), help_text=_("Filename or directory to upload to."), required=False)  # Used actually?
   extract_archive = BooleanField(required=False)
 
 class UploadArchiveForm(forms.Form):

+ 9 - 0
desktop/core/src/desktop/api_public.py

@@ -128,6 +128,8 @@ def autocomplete(request, server=None, database=None, table=None, column=None, n
   return notebook_api.autocomplete(django_request, server, database, table, column, nested)
 
 
+# Storage API
+
 @api_view(["GET"])
 def storage_view(request, path):
   django_request = get_django_request(request)
@@ -138,6 +140,13 @@ def storage_download(request, path):
   django_request = get_django_request(request)
   return filebrowser_views.download(django_request, path)
 
+@api_view(["POST"])
+def storage_upload_file(request):
+  django_request = get_django_request(request)
+  return filebrowser_views.upload_file(django_request)
+
+
+# Utils
 
 def _get_interpreter_from_dialect(dialect, user):
   if not dialect:

+ 1 - 0
desktop/core/src/desktop/api_public_urls.py

@@ -77,6 +77,7 @@ urlpatterns += [
 urlpatterns += [
   re_path(r'^storage/view=(?P<path>.*)$', api_public.storage_view, name='api_storage_view'),
   re_path(r'^storage/download=(?P<path>.*)$', api_public.storage_download, name='api_storage_download'),
+  re_path(r'^storage/upload/file/?$', api_public.storage_upload_file, name='api_storage_upload_file'),
 ]
 
 # Slack install API for using CORS by default

+ 4 - 5
docs/docs-site/content/developer/api/rest/_index.md

@@ -414,16 +414,15 @@ e.g. ?offset=0&length=204800&compression=none&mode=text
 
 ### Download
 
-    curl -X GET http://127.0.0.1:9000/api/storage/download=/user/hue/weblogs.csv
+    curl -X GET https://demo.gethue.com/api/storage/download=/user/hue/weblogs.csv
 
-    curl -X GET http://127.0.0.1:9000/api/storage/download=s3a://demo-hue/web_log_data/index_data.csv
+    curl -X GET https://demo.gethue.com/api/storage/download=s3a://demo-hue/web_log_data/index_data.csv
 
 ### Upload
 
-    POST http://127.0.0.1:9000/filebrowser/upload/file?dest=s3a://demo-hue
+Uploading the local README.md file into HDFS /user/hue:
 
-    hdfs_file: (binary)
-    dest: s3a://demo-hue
+    curl -X POST https://demo.gethue.com/api/storage/upload/file?dest=/user/hue/ --form hdfs_file=@README.md
 
 ## Data Importer