Warning

This document is for an in-development version 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 logging
from typing import Any, Dict, List, Optional

from fastapi.param_functions import Query

from galaxy.managers.context import ProvidesUserContext
from galaxy.managers.remote_files import RemoteFilesManager
from galaxy.schema.remote_files import (
    FilesSourcePluginList,
    RemoteFilesDisableMode,
    RemoteFilesFormat,
    RemoteFilesTarget,
)
from galaxy.web import expose_api
from . import (
    BaseGalaxyAPIController,
    depends,
    DependsOnTrans,
    Router,
)

log = logging.getLogger(__name__)

router = Router(tags=['remote files'])

TargetQueryParam: str = Query(
    default=RemoteFilesTarget.ftpdir,
    title="Target source",
    description=(
        "The source to load datasets from."
        " Possible values: ftpdir, userdir, importdir"
    ),
)

FormatQueryParam: Optional[RemoteFilesFormat] = Query(
    default=RemoteFilesFormat.uri,
    title="Response format",
    description=(
        "The requested format of returned data. Either `flat` to simply list all the files"
        ", `jstree` to get a tree representation of the files, or the default `uri` to list "
        "files and directories by their URI."
    ),
)

RecursiveQueryParam: Optional[bool] = Query(
    default=None,
    title="Recursive",
    description=(
        "Wether to recursively lists all sub-directories."
        " This will be `True` by default depending on the `target`."
    ),
)

DisableModeQueryParam: Optional[RemoteFilesDisableMode] = Query(
    default=None,
    title="Disable mode",
    description=(
        "(This only applies when `format` is `jstree`)"
        " The value can be either `folders` or `files` and it will disable the"
        " corresponding nodes of the tree."
    ),
)


[docs]@router.cbv class FastAPIRemoteFiles: manager: RemoteFilesManager = depends(RemoteFilesManager)
[docs] @router.get( '/api/remote_files', summary="Displays remote files available to the user.", response_description="A list with details about the remote files available to the user.", ) async def index( self, user_ctx: ProvidesUserContext = DependsOnTrans, target: str = TargetQueryParam, format: Optional[RemoteFilesFormat] = FormatQueryParam, recursive: Optional[bool] = RecursiveQueryParam, disable: Optional[RemoteFilesDisableMode] = DisableModeQueryParam ) -> List[Dict[str, Any]]: """Lists all remote files available to the user from different sources.""" return self.manager.index(user_ctx, target, format, recursive, disable)
[docs] @router.get( '/api/remote_files/plugins', summary="Display plugin information for each of the gxfiles:// URI targets available.", response_description="A list with details about each plugin.", ) async def plugins( self, user_ctx: ProvidesUserContext = DependsOnTrans, ) -> FilesSourcePluginList: """Display plugin information for each of the gxfiles:// URI targets available.""" return self.manager.get_files_source_plugins(user_ctx)
[docs]class RemoteFilesAPIController(BaseGalaxyAPIController): manager: RemoteFilesManager = depends(RemoteFilesManager)
[docs] @expose_api def index(self, trans: ProvidesUserContext, **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') format = kwd.get('format', None) recursive = kwd.get('recursive', None) disable = kwd.get('disable', None) return self.manager.index(trans, target, format, recursive, disable)
[docs] @expose_api def plugins(self, trans: ProvidesUserContext, **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.manager.get_files_source_plugins(trans)