mirror of
https://github.com/langgenius/dify.git
synced 2025-12-08 08:53:35 +00:00
feat: add datasource support to PluginDeclaration and PluginCategory
This commit is contained in:
parent
678d6ffe2b
commit
83ca7f8deb
@ -2,17 +2,18 @@ import logging
|
|||||||
from datetime import UTC, datetime
|
from datetime import UTC, datetime
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from flask_login import current_user
|
|
||||||
import requests
|
import requests
|
||||||
from flask import current_app, redirect, request
|
from flask import current_app, redirect, request
|
||||||
|
from flask_login import current_user
|
||||||
from flask_restful import Resource
|
from flask_restful import Resource
|
||||||
from sqlalchemy import select
|
from sqlalchemy import select
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
from werkzeug.exceptions import Unauthorized, Forbidden, NotFound
|
from werkzeug.exceptions import Forbidden, NotFound, Unauthorized
|
||||||
|
|
||||||
from configs import dify_config
|
from configs import dify_config
|
||||||
from constants.languages import languages
|
from constants.languages import languages
|
||||||
from controllers.console.wraps import account_initialization_required, setup_required
|
from controllers.console.wraps import account_initialization_required, setup_required
|
||||||
|
from core.plugin.impl.oauth import OAuthHandler
|
||||||
from events.tenant_event import tenant_was_created
|
from events.tenant_event import tenant_was_created
|
||||||
from extensions.ext_database import db
|
from extensions.ext_database import db
|
||||||
from libs.helper import extract_remote_ip
|
from libs.helper import extract_remote_ip
|
||||||
@ -25,7 +26,7 @@ from services.account_service import AccountService, RegisterService, TenantServ
|
|||||||
from services.errors.account import AccountNotFoundError, AccountRegisterError
|
from services.errors.account import AccountNotFoundError, AccountRegisterError
|
||||||
from services.errors.workspace import WorkSpaceNotAllowedCreateError, WorkSpaceNotFoundError
|
from services.errors.workspace import WorkSpaceNotAllowedCreateError, WorkSpaceNotFoundError
|
||||||
from services.feature_service import FeatureService
|
from services.feature_service import FeatureService
|
||||||
from core.plugin.impl.oauth import OAuthHandler
|
|
||||||
from .. import api
|
from .. import api
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,24 +1,15 @@
|
|||||||
from typing import cast
|
|
||||||
|
|
||||||
from flask_login import current_user # type: ignore
|
from flask_login import current_user # type: ignore
|
||||||
from flask_restful import Resource, marshal_with, reqparse # type: ignore
|
from flask_restful import Resource # type: ignore
|
||||||
from sqlalchemy.orm import Session
|
|
||||||
from werkzeug.exceptions import Forbidden
|
from werkzeug.exceptions import Forbidden
|
||||||
|
|
||||||
from controllers.console import api
|
from controllers.console import api
|
||||||
from controllers.console.datasets.wraps import get_rag_pipeline
|
|
||||||
from controllers.console.wraps import (
|
from controllers.console.wraps import (
|
||||||
account_initialization_required,
|
account_initialization_required,
|
||||||
setup_required,
|
setup_required,
|
||||||
)
|
)
|
||||||
from core.plugin.impl.datasource import PluginDatasourceManager
|
from core.plugin.impl.datasource import PluginDatasourceManager
|
||||||
from extensions.ext_database import db
|
|
||||||
from fields.rag_pipeline_fields import pipeline_import_check_dependencies_fields, pipeline_import_fields
|
|
||||||
from libs.login import login_required
|
from libs.login import login_required
|
||||||
from models import Account
|
|
||||||
from models.dataset import Pipeline
|
|
||||||
from services.app_dsl_service import ImportStatus
|
|
||||||
from services.rag_pipeline.rag_pipeline_dsl_service import RagPipelineDslService
|
|
||||||
|
|
||||||
|
|
||||||
class DatasourcePluginOauthApi(Resource):
|
class DatasourcePluginOauthApi(Resource):
|
||||||
|
|||||||
@ -30,7 +30,7 @@ from core.rag.index_processor.constant.built_in_field import BuiltInField
|
|||||||
from core.repositories import SQLAlchemyWorkflowNodeExecutionRepository
|
from core.repositories import SQLAlchemyWorkflowNodeExecutionRepository
|
||||||
from core.workflow.repository.workflow_node_execution_repository import WorkflowNodeExecutionRepository
|
from core.workflow.repository.workflow_node_execution_repository import WorkflowNodeExecutionRepository
|
||||||
from extensions.ext_database import db
|
from extensions.ext_database import db
|
||||||
from models import Account, App, EndUser, Workflow, WorkflowNodeExecutionTriggeredFrom
|
from models import Account, EndUser, Workflow, WorkflowNodeExecutionTriggeredFrom
|
||||||
from models.dataset import Document, Pipeline
|
from models.dataset import Document, Pipeline
|
||||||
from models.model import AppMode
|
from models.model import AppMode
|
||||||
from services.dataset_service import DocumentService
|
from services.dataset_service import DocumentService
|
||||||
|
|||||||
@ -10,7 +10,11 @@ class WebsiteCrawlDatasourcePluginProviderController(DatasourcePluginProviderCon
|
|||||||
plugin_unique_identifier: str
|
plugin_unique_identifier: str
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self, entity: DatasourceProviderEntityWithPlugin | None, plugin_id: str, plugin_unique_identifier: str, tenant_id: str
|
self,
|
||||||
|
entity: DatasourceProviderEntityWithPlugin | None,
|
||||||
|
plugin_id: str,
|
||||||
|
plugin_unique_identifier: str,
|
||||||
|
tenant_id: str,
|
||||||
) -> None:
|
) -> None:
|
||||||
super().__init__(entity, tenant_id)
|
super().__init__(entity, tenant_id)
|
||||||
self.plugin_id = plugin_id
|
self.plugin_id = plugin_id
|
||||||
|
|||||||
@ -8,6 +8,7 @@ from pydantic import BaseModel, Field, model_validator
|
|||||||
from werkzeug.exceptions import NotFound
|
from werkzeug.exceptions import NotFound
|
||||||
|
|
||||||
from core.agent.plugin_entities import AgentStrategyProviderEntity
|
from core.agent.plugin_entities import AgentStrategyProviderEntity
|
||||||
|
from core.datasource.entities.datasource_entities import DatasourceProviderEntity
|
||||||
from core.model_runtime.entities.provider_entities import ProviderEntity
|
from core.model_runtime.entities.provider_entities import ProviderEntity
|
||||||
from core.plugin.entities.base import BasePluginEntity
|
from core.plugin.entities.base import BasePluginEntity
|
||||||
from core.plugin.entities.endpoint import EndpointProviderDeclaration
|
from core.plugin.entities.endpoint import EndpointProviderDeclaration
|
||||||
@ -62,6 +63,7 @@ class PluginCategory(enum.StrEnum):
|
|||||||
Model = "model"
|
Model = "model"
|
||||||
Extension = "extension"
|
Extension = "extension"
|
||||||
AgentStrategy = "agent-strategy"
|
AgentStrategy = "agent-strategy"
|
||||||
|
Datasource = "datasource"
|
||||||
|
|
||||||
|
|
||||||
class PluginDeclaration(BaseModel):
|
class PluginDeclaration(BaseModel):
|
||||||
@ -69,6 +71,7 @@ class PluginDeclaration(BaseModel):
|
|||||||
tools: Optional[list[str]] = Field(default_factory=list[str])
|
tools: Optional[list[str]] = Field(default_factory=list[str])
|
||||||
models: Optional[list[str]] = Field(default_factory=list[str])
|
models: Optional[list[str]] = Field(default_factory=list[str])
|
||||||
endpoints: Optional[list[str]] = Field(default_factory=list[str])
|
endpoints: Optional[list[str]] = Field(default_factory=list[str])
|
||||||
|
datasources: Optional[list[str]] = Field(default_factory=list[str])
|
||||||
|
|
||||||
class Meta(BaseModel):
|
class Meta(BaseModel):
|
||||||
minimum_dify_version: Optional[str] = Field(default=None, pattern=r"^\d{1,4}(\.\d{1,4}){1,3}(-\w{1,16})?$")
|
minimum_dify_version: Optional[str] = Field(default=None, pattern=r"^\d{1,4}(\.\d{1,4}){1,3}(-\w{1,16})?$")
|
||||||
@ -90,6 +93,7 @@ class PluginDeclaration(BaseModel):
|
|||||||
model: Optional[ProviderEntity] = None
|
model: Optional[ProviderEntity] = None
|
||||||
endpoint: Optional[EndpointProviderDeclaration] = None
|
endpoint: Optional[EndpointProviderDeclaration] = None
|
||||||
agent_strategy: Optional[AgentStrategyProviderEntity] = None
|
agent_strategy: Optional[AgentStrategyProviderEntity] = None
|
||||||
|
datasource: Optional[DatasourceProviderEntity] = None
|
||||||
meta: Meta
|
meta: Meta
|
||||||
|
|
||||||
@model_validator(mode="before")
|
@model_validator(mode="before")
|
||||||
@ -100,6 +104,8 @@ class PluginDeclaration(BaseModel):
|
|||||||
values["category"] = PluginCategory.Tool
|
values["category"] = PluginCategory.Tool
|
||||||
elif values.get("model"):
|
elif values.get("model"):
|
||||||
values["category"] = PluginCategory.Model
|
values["category"] = PluginCategory.Model
|
||||||
|
elif values.get("datasource"):
|
||||||
|
values["category"] = PluginCategory.Datasource
|
||||||
elif values.get("agent_strategy"):
|
elif values.get("agent_strategy"):
|
||||||
values["category"] = PluginCategory.AgentStrategy
|
values["category"] = PluginCategory.AgentStrategy
|
||||||
else:
|
else:
|
||||||
|
|||||||
@ -236,7 +236,7 @@ class PluginDatasourceManager(BasePluginClient):
|
|||||||
|
|
||||||
response = self._request_with_plugin_daemon_response_stream(
|
response = self._request_with_plugin_daemon_response_stream(
|
||||||
"GET",
|
"GET",
|
||||||
f"plugin/datasource/oauth",
|
"plugin/datasource/oauth",
|
||||||
PluginBasicBooleanResponse,
|
PluginBasicBooleanResponse,
|
||||||
params={"page": 1, "page_size": 256},
|
params={"page": 1, "page_size": 256},
|
||||||
headers={
|
headers={
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
from collections.abc import Generator, Mapping, Sequence
|
from collections.abc import Mapping, Sequence
|
||||||
from typing import Any, cast
|
from typing import Any, cast
|
||||||
|
|
||||||
from core.datasource.entities.datasource_entities import (
|
from core.datasource.entities.datasource_entities import (
|
||||||
|
|||||||
@ -1,20 +1,11 @@
|
|||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from json import JSONDecodeError
|
|
||||||
from typing import Any, cast
|
|
||||||
|
|
||||||
from sqlalchemy import func
|
|
||||||
from sqlalchemy.dialects.postgresql import JSONB
|
from sqlalchemy.dialects.postgresql import JSONB
|
||||||
from sqlalchemy.orm import Mapped
|
from sqlalchemy.orm import Mapped
|
||||||
|
|
||||||
from configs import dify_config
|
|
||||||
from extensions.ext_storage import storage
|
|
||||||
from services.entities.knowledge_entities.knowledge_entities import ParentMode, Rule
|
|
||||||
|
|
||||||
from .account import Account
|
|
||||||
from .base import Base
|
from .base import Base
|
||||||
from .engine import db
|
from .engine import db
|
||||||
from .model import App, Tag, TagBinding, UploadFile
|
|
||||||
from .types import StringUUID
|
from .types import StringUUID
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user