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 2022/08/17 19:18:57 UTC

[airavata-django-portal-sdk] branch master updated: AIRAVATA-3648 Report last modified time in metadata

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


The following commit(s) were added to refs/heads/master by this push:
     new 5b916d9  AIRAVATA-3648 Report last modified time in metadata
5b916d9 is described below

commit 5b916d9bb84756db7f5b291f965d0bfe7c037090
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Wed Aug 17 15:18:32 2022 -0400

    AIRAVATA-3648 Report last modified time in metadata
---
 airavata_django_portal_sdk/user_storage/api.py                 |  9 +++++++++
 .../user_storage/backends/django_filesystem_provider.py        | 10 ++++++++++
 .../user_storage/backends/mft_provider.py                      |  4 ++++
 3 files changed, 23 insertions(+)

diff --git a/airavata_django_portal_sdk/user_storage/api.py b/airavata_django_portal_sdk/user_storage/api.py
index f2458da..ee0edc5 100644
--- a/airavata_django_portal_sdk/user_storage/api.py
+++ b/airavata_django_portal_sdk/user_storage/api.py
@@ -419,6 +419,7 @@ def get_file_metadata(request, path, storage_resource_id=None, experiment_id=Non
             raise Exception("User storage path is a directory, not a file")
         file = data['files'][0]
         file['created_time'] = convert_iso8601_to_datetime(file['createdTime'])
+        file['modified_time'] = convert_iso8601_to_datetime(file['modifiedTime'])
         file['mime_type'] = file['mimeType']
         file['data-product-uri'] = file['dataProductURI']
         return file
@@ -541,10 +542,14 @@ def listdir(request, path, storage_resource_id=None, experiment_id=None):
             # Convert JSON ISO8601 timestamp to datetime instance
             directory['created_time'] = convert_iso8601_to_datetime(
                 directory['createdTime'])
+            directory['modified_time'] = convert_iso8601_to_datetime(
+                directory['modifiedTime'])
         for file in data['files']:
             # Convert JSON ISO8601 timestamp to datetime instance
             file['created_time'] = convert_iso8601_to_datetime(
                 file['createdTime'])
+            file['modified_time'] = convert_iso8601_to_datetime(
+                file['modifiedTime'])
             file['mime_type'] = file['mimeType']
             file['data-product-uri'] = file['dataProductURI']
         return data['directories'], data['files']
@@ -592,10 +597,14 @@ def list_experiment_dir(request, experiment_id, path="", storage_resource_id=Non
             # Convert JSON ISO8601 timestamp to datetime instance
             directory['created_time'] = convert_iso8601_to_datetime(
                 directory['createdTime'])
+            directory['modified_time'] = convert_iso8601_to_datetime(
+                directory['modifiedTime'])
         for file in data['files']:
             # Convert JSON ISO8601 timestamp to datetime instance
             file['created_time'] = convert_iso8601_to_datetime(
                 file['createdTime'])
+            file['modified_time'] = convert_iso8601_to_datetime(
+                file['modifiedTime'])
             file['mime_type'] = file['mimeType']
             file['data-product-uri'] = file['dataProductURI']
         return data['directories'], data['files']
diff --git a/airavata_django_portal_sdk/user_storage/backends/django_filesystem_provider.py b/airavata_django_portal_sdk/user_storage/backends/django_filesystem_provider.py
index a7e2e28..ef517ce 100644
--- a/airavata_django_portal_sdk/user_storage/backends/django_filesystem_provider.py
+++ b/airavata_django_portal_sdk/user_storage/backends/django_filesystem_provider.py
@@ -41,6 +41,7 @@ class DjangoFileSystemProvider(UserStorageProvider):
             for d in directories:
                 dpath = os.path.join(resource_path, d)
                 created_time = datastore.get_created_time(dpath)
+                modified_time = datastore.get_modified_time(dpath)
                 size = datastore.size(dpath)
                 directories_data.append(
                     {
@@ -48,6 +49,7 @@ class DjangoFileSystemProvider(UserStorageProvider):
                         "path": datastore.rel_path(dpath),
                         "resource_path": datastore.path(dpath),
                         "created_time": created_time,
+                        "modified_time": modified_time,
                         "size": size,
                     }
                 )
@@ -59,6 +61,7 @@ class DjangoFileSystemProvider(UserStorageProvider):
                                    "does not exist (broken symlink?)")
                     continue
                 created_time = datastore.get_created_time(user_rel_path)
+                modified_time = datastore.get_modified_time(user_rel_path)
                 size = datastore.size(user_rel_path)
                 full_path = datastore.path(user_rel_path)
                 files_data.append(
@@ -67,6 +70,7 @@ class DjangoFileSystemProvider(UserStorageProvider):
                         "path": datastore.rel_path(full_path),
                         "resource_path": full_path,
                         "created_time": created_time,
+                        "modified_time": modified_time,
                         "size": size,
                     }
                 )
@@ -74,6 +78,7 @@ class DjangoFileSystemProvider(UserStorageProvider):
         elif datastore.exists(resource_path):
 
             created_time = datastore.get_created_time(resource_path)
+            modified_time = datastore.get_modified_time(resource_path)
             size = datastore.size(resource_path)
             full_path = datastore.path(resource_path)
             return [], [
@@ -82,6 +87,7 @@ class DjangoFileSystemProvider(UserStorageProvider):
                     "path": datastore.rel_path(full_path),
                     "resource_path": full_path,
                     "created_time": created_time,
+                    "modified_time": modified_time,
                     "size": size,
                 }
             ]
@@ -293,6 +299,10 @@ class _Datastore:
         user_data_storage = self.storage
         return user_data_storage.get_created_time(file_path)
 
+    def get_modified_time(self, file_path):
+        user_data_storage = self.storage
+        return user_data_storage.get_modified_time(file_path)
+
     def size(self, file_path):
         user_data_storage = self.storage
         full_path = self.path(file_path)
diff --git a/airavata_django_portal_sdk/user_storage/backends/mft_provider.py b/airavata_django_portal_sdk/user_storage/backends/mft_provider.py
index 504f8df..4f10ae4 100644
--- a/airavata_django_portal_sdk/user_storage/backends/mft_provider.py
+++ b/airavata_django_portal_sdk/user_storage/backends/mft_provider.py
@@ -93,6 +93,7 @@ class MFTUserStorageProvider(UserStorageProvider, ProvidesDownloadUrl):
 
                 dpath = os.path.join(resource_path, d.friendlyName)
                 created_time = datetime.fromtimestamp(d.createdTime)
+                modified_time = datetime.fromtimestamp(d.updateTime)
                 # TODO MFT API doesn't report size
                 size = 0
                 directories_data.append(
@@ -103,6 +104,7 @@ class MFTUserStorageProvider(UserStorageProvider, ProvidesDownloadUrl):
                         # resource_path is the id or full path to the resource
                         "resource_path": d.resourcePath,
                         "created_time": created_time,
+                        "modified_time": modified_time,
                         "size": size,
                     }
                 )
@@ -111,6 +113,7 @@ class MFTUserStorageProvider(UserStorageProvider, ProvidesDownloadUrl):
                 user_rel_path = os.path.join(resource_path, f.friendlyName)
                 # TODO do we need to check for broken symlinks?
                 created_time = datetime.fromtimestamp(f.createdTime)
+                modified_time = datetime.fromtimestamp(f.updateTime)
                 size = f.resourceSize
                 # full_path = datastore.path(request.user.username, user_rel_path)
                 # TODO how do we register these as data products, do we need to?
@@ -127,6 +130,7 @@ class MFTUserStorageProvider(UserStorageProvider, ProvidesDownloadUrl):
                         "path": user_rel_path,
                         "resource_path": f.resourcePath,
                         "created_time": created_time,
+                        "modified_time": modified_time,
                         "size": size,
                     }
                 )