in airavata_django_portal_sdk/user_storage/backends/django_filesystem_provider.py [0:0]
def get_metadata(self, resource_path):
# TODO: also return an isDir boolean flag?
datastore = self.datastore
if datastore.dir_exists(resource_path):
directories, files = datastore.list_user_dir(
resource_path)
directories_data = []
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(
{
"name": d,
"path": datastore.rel_path(dpath),
"resource_path": datastore.path(dpath),
"created_time": created_time,
"modified_time": modified_time,
"size": size,
}
)
files_data = []
for f in files:
user_rel_path = os.path.join(resource_path, f)
if not datastore.exists(user_rel_path):
logger.warning(f"listdir skipping {user_rel_path}, "
"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(
{
"name": f,
"path": datastore.rel_path(full_path),
"resource_path": full_path,
"created_time": created_time,
"modified_time": modified_time,
"size": size,
}
)
return directories_data, files_data
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 [], [
{
"name": os.path.basename(resource_path),
"path": datastore.rel_path(full_path),
"resource_path": full_path,
"created_time": created_time,
"modified_time": modified_time,
"size": size,
}
]
else:
raise ObjectDoesNotExist(f"User storage path does not exist {resource_path}")