airavata-mft icon indicating copy to clipboard operation
airavata-mft copied to clipboard

MFT API enhancements for airavata-django-portal integration

Open machristie opened this issue 3 years ago • 0 comments

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()

machristie avatar Apr 09 '21 21:04 machristie