Warning

This document is for an old release of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.

Source code for galaxy.webapps.galaxy.api.remote_files

"""
API operations on remote files.
"""
import hashlib
import logging
from operator import itemgetter

from galaxy import exceptions
from galaxy.files import ProvidesUserFileSourcesUserContext
from galaxy.util import (
    jstree,
    smart_str,
)
from galaxy.web import expose_api
from galaxy.webapps.base.controller import BaseAPIController

log = logging.getLogger(__name__)


[docs]class RemoteFilesAPIController(BaseAPIController):
[docs] @expose_api def index(self, trans, **kwd): """ GET /api/remote_files/ Displays remote files. :param target: target to load available datasets from, defaults to ftpdir possible values: ftpdir, userdir, importdir :type target: str :param format: requested format of data, defaults to flat possible values: flat, jstree :returns: list of available files :rtype: list """ # If set, target must be one of 'ftpdir' (default), 'userdir', 'importdir' target = kwd.get('target', 'ftpdir') user_context = ProvidesUserFileSourcesUserContext(trans) default_recursive = False default_format = "uri" if "://" in target: uri = target elif target == 'userdir': uri = "gxuserimport://" default_format = "flat" default_recursive = True elif target == 'importdir': uri = 'gximport://' default_format = "flat" default_recursive = True elif target in ['ftpdir', 'ftp']: # legacy, allow both uri = 'gxftp://' default_format = "flat" default_recursive = True else: raise exceptions.RequestParameterInvalidException("Invalid target parameter supplied [%s]" % target) format = kwd.get('format', default_format) recursive = kwd.get('recursive', default_recursive) file_sources = self.app.file_sources file_sources.validate_uri_root(uri, user_context=user_context) file_source_path = file_sources.get_file_source_path(uri) file_source = file_source_path.file_source try: index = file_source.list(file_source_path.path, recursive=recursive, user_context=user_context) except exceptions.MessageException: log.warning(f"Problem listing file source path {file_source_path}", exc_info=True) raise except Exception: message = f"Problem listing file source path {file_source_path}" log.warning(message, exc_info=True) raise exceptions.InternalServerError(message) if format == "flat": # rip out directories, ensure sorted by path index = [i for i in index if i["class"] == "File"] index = sorted(index, key=itemgetter("path")) if format == "jstree": disable = kwd.get('disable', 'folders') jstree_paths = [] for ent in index: path = ent["path"] path_hash = hashlib.sha1(smart_str(path)).hexdigest() if ent["class"] == "Directory": path_type = 'folder' disabled = True if disable == 'folders' else False else: path_type = 'file' disabled = True if disable == 'files' else False jstree_paths.append(jstree.Path(path, path_hash, {'type': path_type, 'state': {'disabled': disabled}, 'li_attr': {'full_path': path}})) userdir_jstree = jstree.JSTree(jstree_paths) index = userdir_jstree.jsonData() return index
[docs] @expose_api def plugins(self, trans, **kwd): """ GET /api/remote_files/plugins Display plugin information for each of the gxfiles:// URI targets available. :returns: list of configured plugins :rtype: list """ return self.app.file_sources.plugins_to_dict()