airavata-mft
airavata-mft copied to clipboard
MFT API enhancements for airavata-django-portal integration
Is your feature request related to a problem? Please describe.
The MFT API is missing some features required to implement the data management capabilities of airavata-django-portal.
- delete file/directory
- create directory/ies
- update a file - this allows users to edit files in the gateway
Possibly also (I consider these "nice to have" but aren't necessary):
- move file/directory
- this can be implemented by reading and writing a new file in the new location and then deleting the old file in the old location, but a move API could be more efficient
- probably only need this for moving files/directories within the same resource
- copy file/directory
- similar comments to move, this can be implemented by reading and writing a copy of a file, but a copy API could be more efficient
- for this we might want the ability to copy across resources. The use case is a user cloning another user's experiment and the inputs files are copied. If the source input files are on one resource but the experiment data directory is created on a different resource then copying across resources is needed.
For reference, this is the minimal interface I want to implement using MFT APIs: https://github.com/apache/airavata-django-portal-sdk/blob/mft-integration/airavata_django_portal_sdk/user_storage/backends/base.py
The MFT APIs support implementing all of these methods except for the following:
def delete(self, resource_path):
raise NotImplementedError()
def update(self, resource_path, file):
raise NotImplementedError()
def create_dirs(self, resource_path, dir_names=[], create_unique=False):
"""
Create one or more named subdirectories inside the resource_path.
resource_path must exist. dir_names will potentially be normalized as
needed. The intermediate directories may already exist, but if the
final directory already exists, this method will raise an Exception,
unless create_unique is True in which the name will be modified until
a unique directory name is found.
"""
raise NotImplementedError()