You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2021/08/04 14:25:03 UTC
[airavata-django-portal-sdk] 04/05: AIRAVATA-3420 Implement
get_download_url for REMOTE API, return full URL
This is an automated email from the ASF dual-hosted git repository.
machristie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airavata-django-portal-sdk.git
commit 5c5b002f22ae59c66cc23d467d6b7fd80839f8db
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Wed Aug 4 10:19:16 2021 -0400
AIRAVATA-3420 Implement get_download_url for REMOTE API, return full URL
---
airavata_django_portal_sdk/user_storage/api.py | 32 +++++++++++++++++++++-----
1 file changed, 26 insertions(+), 6 deletions(-)
diff --git a/airavata_django_portal_sdk/user_storage/api.py b/airavata_django_portal_sdk/user_storage/api.py
index a15b4b7..252ce0d 100644
--- a/airavata_django_portal_sdk/user_storage/api.py
+++ b/airavata_django_portal_sdk/user_storage/api.py
@@ -196,6 +196,17 @@ def get_download_url(request, data_product=None, data_product_uri=None, force_do
"Return URL for downloading data product. One of `data_product` or `data_product_uri` is required."
if data_product is None:
data_product = _get_data_product(request, data_product_uri)
+ if _is_remote_api():
+ resp = _call_remote_api(
+ request,
+ "/data-products/",
+ params={'product-uri': data_product.productUri},
+ raise_for_status=False)
+ if resp.status_code == HTTPStatus.NOT_FOUND:
+ return None
+ resp.raise_for_status()
+ data = resp.json()
+ return data['downloadURL']
storage_resource_id, path = _get_replica_resource_id_and_filepath(data_product)
backend = get_user_storage_provider(request,
owner_username=data_product.ownerName,
@@ -210,15 +221,26 @@ def get_download_url(request, data_product=None, data_product_uri=None, force_do
params['download'] = ''
if mime_type is not None:
params['mime-type'] = mime_type
- return f"{reverse('airavata_django_portal_sdk:download_file')}?{urlencode(params)}"
+ return request.build_absolute_uri(f"{reverse('airavata_django_portal_sdk:download_file')}?{urlencode(params)}")
def get_lazy_download_url(request, data_product=None, data_product_uri=None):
if data_product is None:
data_product = _get_data_product(request, data_product_uri)
+ if _is_remote_api():
+ resp = _call_remote_api(
+ request,
+ "/data-products/",
+ params={'product-uri': data_product.productUri},
+ raise_for_status=False)
+ if resp.status_code == HTTPStatus.NOT_FOUND:
+ return None
+ resp.raise_for_status()
+ data = resp.json()
+ return data['downloadURL']
# /download will call get_download_url and redirect to it
- return (reverse("airavata_django_portal_sdk:download") + "?" +
- urlencode({"data-product-uri": data_product.productUri}))
+ return request.build_absolute_uri(reverse("airavata_django_portal_sdk:download") + "?" +
+ urlencode({"data-product-uri": data_product.productUri}))
def open_file(request, data_product=None, data_product_uri=None):
@@ -233,9 +255,7 @@ def open_file(request, data_product=None, data_product_uri=None):
request,
"/download",
params={'data-product-uri': data_product.productUri},
- # TODO: once /sdk/download is integrated with airavata-django-portal, this can be updated to
- # base_url="/sdk"
- base_url="/api")
+ base_url="/sdk")
file = io.BytesIO(resp.content)
disposition = resp.headers['Content-Disposition']
disp_value, disp_params = cgi.parse_header(disposition)