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)