Files
dify-plugin-sdks/python/dify_plugin/interfaces/datasource/online_drive.py

65 lines
1.8 KiB
Python

from abc import abstractmethod
from collections.abc import Generator
from typing import final
from dify_plugin.core.runtime import Session
from dify_plugin.entities.datasource import (
DatasourceMessage,
DatasourceRuntime,
OnlineDriveBrowseFilesRequest,
OnlineDriveBrowseFilesResponse,
OnlineDriveDownloadFileRequest,
)
from dify_plugin.interfaces.tool import ToolLike
class OnlineDriveDatasource(ToolLike[DatasourceMessage]):
"""
Online Drive Datasource abstract class
"""
runtime: DatasourceRuntime
session: Session
@final
def __init__(
self,
runtime: DatasourceRuntime,
session: Session,
):
"""
Initialize the datasource
NOTE:
- This method has been marked as final, DO NOT OVERRIDE IT.
"""
self.runtime = runtime
self.session = session
self.response_type = DatasourceMessage
def browse_files(self, request: OnlineDriveBrowseFilesRequest) -> OnlineDriveBrowseFilesResponse:
"""
Get the file list
"""
return self._browse_files(request)
@abstractmethod
def _browse_files(self, request: OnlineDriveBrowseFilesRequest) -> OnlineDriveBrowseFilesResponse:
"""
Browse the files
"""
raise NotImplementedError("This method should be implemented by a subclass")
def download_file(self, request: OnlineDriveDownloadFileRequest) -> Generator[DatasourceMessage, None, None]:
"""
Get the file content
"""
return self._download_file(request)
@abstractmethod
def _download_file(self, request: OnlineDriveDownloadFileRequest) -> Generator[DatasourceMessage, None, None]:
"""
Download the file content
"""
raise NotImplementedError("This method should be implemented by a subclass")