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,
}
)