try:
from fs.googledrivefs.googledrivefs import GoogleDriveFS
from google.oauth2.credentials import Credentials
except ImportError:
GoogleDriveFS = None
from typing import (
Annotated,
Union,
)
from pydantic import (
AliasChoices,
Field,
)
from galaxy.files.models import (
BaseFileSourceConfiguration,
BaseFileSourceTemplateConfiguration,
FilesSourceRuntimeContext,
)
from galaxy.util.config_templates import TemplateExpansion
from ._pyfilesystem2 import PyFilesystem2FilesSource
AccessTokenField = Field(
...,
validation_alias=AliasChoices("oauth2_access_token", "accessToken", "access_token"),
)
class GoogleDriveFileSourceTemplateConfiguration(BaseFileSourceTemplateConfiguration):
access_token: Annotated[Union[str, TemplateExpansion], AccessTokenField]
class GoogleDriveFilesSourceConfiguration(BaseFileSourceConfiguration):
access_token: Annotated[str, AccessTokenField]
[docs]
class GoogleDriveFilesSource(
PyFilesystem2FilesSource[GoogleDriveFileSourceTemplateConfiguration, GoogleDriveFilesSourceConfiguration]
):
plugin_type = "googledrive"
required_module = GoogleDriveFS
required_package = "fs.googledrivefs"
template_config_class = GoogleDriveFileSourceTemplateConfiguration
resolved_config_class = GoogleDriveFilesSourceConfiguration
def _open_fs(self, context: FilesSourceRuntimeContext[GoogleDriveFilesSourceConfiguration]):
if GoogleDriveFS is None:
raise self.required_package_exception
credentials = Credentials(token=context.config.access_token)
handle = GoogleDriveFS(credentials)
return handle
__all__ = ("GoogleDriveFilesSource",)