in airavata_django_portal_sdk/user_storage/api.py [0:0]
def list_experiment_dir(request, experiment_id, path="", storage_resource_id=None):
"""
List files, directories in experiment data directory. Returns a tuple,
see `listdir`.
"""
if remoteapi.is_remote_api_configured():
resp = remoteapi.call(request,
"/experiment-storage/{experiment_id}/{path}",
path_params={"path": path,
"experiment_id": experiment_id},
)
data = resp.json()
for directory in data['directories']:
# 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']
experiment = request.airavata_client.getExperiment(
request.authz_token, experiment_id)
backend = get_user_storage_provider(request,
storage_resource_id=storage_resource_id,
owner_username=experiment.userName)
exp_data_dir = experiment.userConfigurationData.experimentDataDir
exp_data_path = os.path.join(exp_data_dir, path)
if backend.exists(exp_data_path):
directories, files = backend.get_metadata(exp_data_path)
for directory in directories:
# construct the relative path of the directory within the experiment data dir
directory['path'] = os.path.relpath(directory['resource_path'], exp_data_dir)
# for each file, lookup or register a data product and enrich the file
# metadata with data-product-uri and mime-type
for file in files:
data_product_uri = _get_data_product_uri(request, file['resource_path'],
storage_resource_id=backend.resource_id,
backend=backend, owner=experiment.userName)
data_product = request.airavata_client.getDataProduct(
request.authz_token, data_product_uri)
mime_type = None
if 'mime-type' in data_product.productMetadata:
mime_type = data_product.productMetadata['mime-type']
file['data-product-uri'] = data_product_uri
file['mime_type'] = mime_type
# construct the relative path of the file within the experiment data dir
file['path'] = os.path.relpath(file['resource_path'], exp_data_dir)
# TODO: remove this, there's no need for hidden files
file['hidden'] = False
return directories, files
else:
raise ObjectDoesNotExist("Experiment data directory does not exist")