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 2019/10/27 13:06:05 UTC
[airavata-django-portal] branch master updated: AIRAVATA-3224 Check
if file exists before trying to open
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.git
The following commit(s) were added to refs/heads/master by this push:
new 934263a AIRAVATA-3224 Check if file exists before trying to open
934263a is described below
commit 934263a8c1747e2eaa16195084d2f9be890388bf
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Sun Oct 27 09:05:50 2019 -0400
AIRAVATA-3224 Check if file exists before trying to open
Previous test was checking for existence, but returned true when a directory.
---
django_airavata/apps/api/data_products_helper.py | 6 ++---
django_airavata/apps/api/datastore.py | 32 +++++++++++-------------
2 files changed, 18 insertions(+), 20 deletions(-)
diff --git a/django_airavata/apps/api/data_products_helper.py b/django_airavata/apps/api/data_products_helper.py
index cdcf03f..30ab128 100644
--- a/django_airavata/apps/api/data_products_helper.py
+++ b/django_airavata/apps/api/data_products_helper.py
@@ -104,12 +104,12 @@ def exists(request, data_product):
def dir_exists(request, path):
- return datastore.exists(request.user.username, path)
+ return datastore.dir_exists(request.user.username, path)
def user_file_exists(request, path):
"""If file exists, return data product URI, else None."""
- if datastore.user_file_exists(request.user.username, path):
+ if datastore.exists(request.user.username, path):
full_path = datastore.path(request.user.username, path)
data_product_uri = _get_data_product_uri(request, full_path)
return data_product_uri
@@ -134,7 +134,7 @@ def delete(request, data_product):
def listdir(request, path):
- if datastore.user_file_exists(request.user.username, path):
+ if datastore.dir_exists(request.user.username, path):
directories, files = datastore.list_user_dir(
request.user.username, path)
directories_data = []
diff --git a/django_airavata/apps/api/datastore.py b/django_airavata/apps/api/datastore.py
index 82392de..c3a1318 100644
--- a/django_airavata/apps/api/datastore.py
+++ b/django_airavata/apps/api/datastore.py
@@ -11,9 +11,20 @@ logger = logging.getLogger(__name__)
def exists(username, path):
- """Check if replica for data product exists in this data store."""
+ """Check if file path exists in this data store."""
try:
- return _user_data_storage(username).exists(path)
+ return (_user_data_storage(username).exists(path) and
+ os.path.isfile(path_(username, path)))
+ except SuspiciousFileOperation as e:
+ logger.warning("Invalid path for user {}: {}".format(username, str(e)))
+ return False
+
+
+def dir_exists(username, path):
+ """Check if directory path exists in this data store."""
+ try:
+ return (_user_data_storage(username).exists(path) and
+ os.path.isdir(path_(username, path)))
except SuspiciousFileOperation as e:
logger.warning("Invalid path for user {}: {}".format(username, str(e)))
return False
@@ -61,7 +72,7 @@ def move_external(external_path, target_username, target_dir, file_name):
# Get available file path: if there is an existing file at target_path
# create a uniquely named path
target_path = user_data_storage.get_available_name(target_path)
- if not exists(target_username, target_dir):
+ if not dir_exists(target_username, target_dir):
create_user_dir(target_username, target_dir)
target_full_path = path_(target_username, target_path)
file_move_safe(external_path, target_full_path)
@@ -98,7 +109,7 @@ def delete(username, path):
def delete_dir(username, path):
"""Delete entire directory in this data store."""
- if exists(username, path):
+ if dir_exists(username, path):
user_path = path_(username, path)
shutil.rmtree(user_path)
else:
@@ -137,19 +148,6 @@ def get_experiment_dir(
return experiment_dir
-def user_file_exists(username, file_path):
- """Check if file path exists in user's data storage space."""
- try:
- # file_path can be relative or absolute
- user_experiment_data_storage = _user_data_storage(username)
- return user_experiment_data_storage.exists(file_path)
- except SuspiciousFileOperation as e:
- logger.warning(
- "File does not exist for user {} at file path {}".format(
- username, file_path))
- return False
-
-
def list_user_dir(username, file_path):
logger.debug("file_path={}".format(file_path))
user_data_storage = _user_data_storage(username)