mirror of
https://github.com/langgenius/dify-plugin-sdks.git
synced 2026-07-22 18:35:29 -04:00
72 lines
2.9 KiB
Python
72 lines
2.9 KiB
Python
from collections.abc import Mapping
|
|
from typing import Any
|
|
|
|
from werkzeug import Request
|
|
|
|
from dify_plugin.entities.datasource import DatasourceOAuthCredentials
|
|
from dify_plugin.protocol.oauth import OAuthCredentials
|
|
|
|
|
|
class DatasourceProvider:
|
|
"""
|
|
A provider for a datasource
|
|
"""
|
|
|
|
def validate_credentials(self, credentials: Mapping[str, Any]):
|
|
return self._validate_credentials(credentials)
|
|
|
|
def _validate_credentials(self, credentials: Mapping[str, Any]):
|
|
raise NotImplementedError("This method should be implemented by a subclass")
|
|
|
|
def oauth_get_authorization_url(self, redirect_uri: str, system_credentials: Mapping[str, Any]) -> str:
|
|
return self._oauth_get_authorization_url(redirect_uri, system_credentials)
|
|
|
|
def _oauth_get_authorization_url(self, redirect_uri: str, system_credentials: Mapping[str, Any]) -> str:
|
|
raise NotImplementedError("This method should be implemented by a subclass")
|
|
|
|
def oauth_get_credentials(
|
|
self, redirect_uri: str, system_credentials: Mapping[str, Any], request: Request
|
|
) -> OAuthCredentials:
|
|
datasource_credentials = self._oauth_get_credentials(redirect_uri, system_credentials, request)
|
|
return OAuthCredentials(
|
|
metadata={
|
|
"avatar_url": datasource_credentials.avatar_url,
|
|
"name": datasource_credentials.name,
|
|
},
|
|
credentials=datasource_credentials.credentials,
|
|
expires_at=datasource_credentials.expires_at,
|
|
)
|
|
|
|
def _oauth_get_credentials(
|
|
self, redirect_uri: str, system_credentials: Mapping[str, Any], request: Request
|
|
) -> DatasourceOAuthCredentials:
|
|
raise NotImplementedError("This method should be implemented by a subclass")
|
|
|
|
def oauth_refresh_credentials(
|
|
self, redirect_uri: str, system_credentials: Mapping[str, Any], credentials: Mapping[str, Any]
|
|
) -> OAuthCredentials:
|
|
"""
|
|
Refresh the credentials
|
|
|
|
:param redirect_uri: redirect uri
|
|
:param system_credentials: system credentials
|
|
:param credentials: credentials
|
|
:return: refreshed credentials
|
|
"""
|
|
datasource_credentials = self._oauth_refresh_credentials(redirect_uri, system_credentials, credentials)
|
|
return OAuthCredentials(
|
|
metadata={
|
|
"avatar_url": datasource_credentials.avatar_url,
|
|
"name": datasource_credentials.name,
|
|
},
|
|
credentials=datasource_credentials.credentials,
|
|
expires_at=datasource_credentials.expires_at,
|
|
)
|
|
|
|
def _oauth_refresh_credentials(
|
|
self, redirect_uri: str, system_credentials: Mapping[str, Any], credentials: Mapping[str, Any]
|
|
) -> DatasourceOAuthCredentials:
|
|
raise NotImplementedError(
|
|
"The tool you are using does not support OAuth, please implement `_oauth_refresh_credentials` method"
|
|
)
|