mirror of
https://github.com/langgenius/dify.git
synced 2026-10-16 15:35:32 +08:00
403 lines
9.7 KiB
Python
403 lines
9.7 KiB
Python
from typing import override
|
|
|
|
from flask import Blueprint
|
|
from flask_restx import Namespace
|
|
|
|
from controllers.openapi._catalog import attach_catalog
|
|
from controllers.openapi._errors import ErrorBody, OpenApiErrorCode, OpenApiErrorFormatter
|
|
from controllers.openapi._upload import describe_multipart_bodies
|
|
from libs.device_flow_security import attach_anti_framing
|
|
from libs.external_api import ErrorSpec, ExternalApi
|
|
|
|
bp = Blueprint("openapi", __name__, url_prefix="/openapi/v1")
|
|
attach_anti_framing(bp)
|
|
attach_catalog(bp)
|
|
|
|
|
|
class _OpenApi(ExternalApi):
|
|
"""The surface's document also names the multipart form its file-bearing bodies accept."""
|
|
|
|
error_response_model = ErrorBody
|
|
|
|
@override
|
|
def finish_document(self, document: dict[str, object]) -> dict[str, object]:
|
|
return super().finish_document(describe_multipart_bodies(document))
|
|
|
|
@override
|
|
def error_code_for(self, spec: ErrorSpec) -> str:
|
|
return OpenApiErrorFormatter.code_for(spec["status"], spec["error_code"])
|
|
|
|
@override
|
|
def implicit_error_codes(self, status: int) -> set[str]:
|
|
return {OpenApiErrorFormatter.code_for(status, None)}
|
|
|
|
|
|
api = _OpenApi(
|
|
bp,
|
|
version="1.0",
|
|
title="OpenAPI",
|
|
description="User-scoped programmatic API (bearer auth)",
|
|
error_body_formatter=OpenApiErrorFormatter(),
|
|
)
|
|
|
|
openapi_ns = Namespace("openapi", description="User-scoped operations", path="/")
|
|
|
|
# Register response/query models BEFORE importing controller modules so that
|
|
# @openapi_ns.response / @openapi_ns.expect decorators can resolve model names.
|
|
from controllers.common.fields import EventStreamResponse, SimpleResultResponse
|
|
from controllers.common.schema import register_enum_models, register_response_schema_models, register_schema_models
|
|
from controllers.openapi._models import (
|
|
AccountPayload,
|
|
AccountResponse,
|
|
AdvancedChatNodeRunPayload,
|
|
AdvancedChatRunPayload,
|
|
AdvancedChatWebApp,
|
|
AdvancedChatWebAppPatch,
|
|
AgentAppInfo,
|
|
AgentAppInfoPatch,
|
|
AgentServiceApi,
|
|
AgentWebApp,
|
|
AppDescribeInfo,
|
|
AppDescribeQuery,
|
|
AppDescribeResponse,
|
|
AppDslExportQuery,
|
|
AppDslExportResponse,
|
|
AppDslImportPayload,
|
|
AppDslImportResponse,
|
|
AppInfo,
|
|
AppInfoPatch,
|
|
AppListQuery,
|
|
AppListResponse,
|
|
AppListRow,
|
|
AppSettingsInfo,
|
|
ChatAppInfo,
|
|
ChatAppInfoPatch,
|
|
ChatRunPayload,
|
|
ChatWebApp,
|
|
ChatWebAppPatch,
|
|
CheckDependenciesResponse,
|
|
CompletionRunPayload,
|
|
CreateAppPayload,
|
|
CreatedAppResponse,
|
|
CredentialFormField,
|
|
CredentialRef,
|
|
CredentialWriteResponse,
|
|
CustomModelRow,
|
|
DeviceCodeRequest,
|
|
DeviceCodeResponse,
|
|
DeviceFlowErrorResponse,
|
|
DeviceLookupQuery,
|
|
DeviceLookupResponse,
|
|
DeviceMutateRequest,
|
|
DeviceMutateResponse,
|
|
DevicePollRequest,
|
|
DeviceTokenResponse,
|
|
DraftWorkflowRunPayload,
|
|
DslCheckPayload,
|
|
DslCheckResponse,
|
|
DslIssueRow,
|
|
EnvVariableListResponse,
|
|
EnvVariableSetPayload,
|
|
FileUploadPayload,
|
|
FormSubmitResponse,
|
|
HealthResponse,
|
|
Hint,
|
|
HumanInputFormDefinitionResponse,
|
|
KnowledgeBaseListQuery,
|
|
KnowledgeBaseListResponse,
|
|
KnowledgeBaseRow,
|
|
KnowledgeRetrievalFragment,
|
|
LlmModelBlock,
|
|
MarketplacePluginListResponse,
|
|
MarketplacePluginQuery,
|
|
MarketplacePluginRow,
|
|
MemberActionResponse,
|
|
MemberInvitePayload,
|
|
MemberInviteResponse,
|
|
MemberListQuery,
|
|
MemberListResponse,
|
|
MemberResponse,
|
|
MemberRoleUpdatePayload,
|
|
MessageMetadata,
|
|
ModelCredentialCreatePayload,
|
|
ModelCredentialUpdatePayload,
|
|
ModelListQuery,
|
|
ModelListResponse,
|
|
ModelProviderDetailResponse,
|
|
ModelProviderRow,
|
|
ModelRef,
|
|
ModelRow,
|
|
MultipleRetrievalFragment,
|
|
NodeRunPayload,
|
|
NodeTypeDetailResponse,
|
|
NodeTypeListResponse,
|
|
NodeTypeRow,
|
|
OpenApiFormSubmitPayload,
|
|
PermittedExternalAppsListQuery,
|
|
PermittedExternalAppsListResponse,
|
|
PluginDeleteResponse,
|
|
PluginInstallPayload,
|
|
PluginListQuery,
|
|
PluginListResponse,
|
|
PluginProvides,
|
|
PluginRow,
|
|
PluginTaskItem,
|
|
PluginTaskResponse,
|
|
PluginTaskStartResponse,
|
|
ProviderCredentialCreatePayload,
|
|
ProviderCredentialUpdatePayload,
|
|
PublishPayload,
|
|
PublishResponse,
|
|
ReleaseCheckResponse,
|
|
RestoreResponse,
|
|
RevokeResponse,
|
|
RunListQuery,
|
|
RunListResponse,
|
|
ServerVersionResponse,
|
|
ServiceApi,
|
|
ServiceApiPatch,
|
|
SessionListQuery,
|
|
SessionListResponse,
|
|
SessionRow,
|
|
TaskStopResponse,
|
|
ToolCredentialCreatePayload,
|
|
ToolCredentialUpdatePayload,
|
|
ToolListQuery,
|
|
ToolListResponse,
|
|
ToolProviderDetailResponse,
|
|
ToolProviderRow,
|
|
UsageInfo,
|
|
VersionListQuery,
|
|
VersionListResponse,
|
|
WebApp,
|
|
WebAppAccess,
|
|
WebAppAccessPayload,
|
|
WebAppPatch,
|
|
WebAppToken,
|
|
WorkflowRunData,
|
|
WorkflowRunPayload,
|
|
WorkflowWebApp,
|
|
WorkflowWebAppPatch,
|
|
WorkspaceDetailResponse,
|
|
WorkspaceListQuery,
|
|
WorkspaceListResponse,
|
|
WorkspacePayload,
|
|
WorkspaceSummaryResponse,
|
|
)
|
|
from fields.file_fields import FileResponse
|
|
from fields.workflow_run_fields import (
|
|
WorkflowRunDetailResponse,
|
|
WorkflowRunNodeExecutionListResponse,
|
|
WorkflowRunNodeExecutionResponse,
|
|
)
|
|
from services.entities.dsl_entities import CheckDependenciesResult, Import
|
|
|
|
register_schema_models(
|
|
openapi_ns,
|
|
AdvancedChatNodeRunPayload,
|
|
AdvancedChatRunPayload,
|
|
AgentAppInfoPatch,
|
|
AppDescribeQuery,
|
|
AppInfoPatch,
|
|
ChatAppInfoPatch,
|
|
ServiceApiPatch,
|
|
AdvancedChatWebAppPatch,
|
|
ChatWebAppPatch,
|
|
WebAppAccessPayload,
|
|
WebAppPatch,
|
|
WorkflowWebAppPatch,
|
|
AppDslImportPayload,
|
|
DslCheckPayload,
|
|
AppDslExportQuery,
|
|
AppListQuery,
|
|
ChatRunPayload,
|
|
CompletionRunPayload,
|
|
CreateAppPayload,
|
|
DeviceCodeRequest,
|
|
DevicePollRequest,
|
|
DeviceLookupQuery,
|
|
DeviceMutateRequest,
|
|
DraftWorkflowRunPayload,
|
|
FileUploadPayload,
|
|
MemberInvitePayload,
|
|
MemberListQuery,
|
|
MemberRoleUpdatePayload,
|
|
NodeRunPayload,
|
|
OpenApiFormSubmitPayload,
|
|
EnvVariableSetPayload,
|
|
MarketplacePluginQuery,
|
|
PermittedExternalAppsListQuery,
|
|
PluginInstallPayload,
|
|
PluginListQuery,
|
|
ModelListQuery,
|
|
KnowledgeBaseListQuery,
|
|
ToolListQuery,
|
|
ProviderCredentialCreatePayload,
|
|
ProviderCredentialUpdatePayload,
|
|
ModelRef,
|
|
ModelCredentialCreatePayload,
|
|
ModelCredentialUpdatePayload,
|
|
ToolCredentialCreatePayload,
|
|
ToolCredentialUpdatePayload,
|
|
PublishPayload,
|
|
RunListQuery,
|
|
SessionListQuery,
|
|
VersionListQuery,
|
|
WorkflowRunPayload,
|
|
WorkspaceListQuery,
|
|
)
|
|
register_response_schema_models(
|
|
openapi_ns,
|
|
ErrorBody,
|
|
EventStreamResponse,
|
|
SimpleResultResponse,
|
|
UsageInfo,
|
|
MessageMetadata,
|
|
Hint,
|
|
AppListRow,
|
|
AppListResponse,
|
|
AppInfo,
|
|
AppDescribeInfo,
|
|
AppDescribeResponse,
|
|
AppDslExportResponse,
|
|
Import,
|
|
AppDslImportResponse,
|
|
DslIssueRow,
|
|
DslCheckResponse,
|
|
ReleaseCheckResponse,
|
|
CheckDependenciesResult,
|
|
CheckDependenciesResponse,
|
|
WorkflowRunData,
|
|
AccountPayload,
|
|
WorkspacePayload,
|
|
AccountResponse,
|
|
SessionRow,
|
|
SessionListResponse,
|
|
PermittedExternalAppsListResponse,
|
|
RevokeResponse,
|
|
WorkspaceSummaryResponse,
|
|
WorkspaceListResponse,
|
|
WorkspaceDetailResponse,
|
|
MemberResponse,
|
|
MemberListResponse,
|
|
MemberInviteResponse,
|
|
MemberActionResponse,
|
|
TaskStopResponse,
|
|
FormSubmitResponse,
|
|
HumanInputFormDefinitionResponse,
|
|
DeviceCodeResponse,
|
|
DeviceTokenResponse,
|
|
DeviceLookupResponse,
|
|
DeviceMutateResponse,
|
|
DeviceFlowErrorResponse,
|
|
FileResponse,
|
|
ServerVersionResponse,
|
|
HealthResponse,
|
|
RunListResponse,
|
|
PublishResponse,
|
|
VersionListResponse,
|
|
RestoreResponse,
|
|
EnvVariableListResponse,
|
|
WorkflowRunDetailResponse,
|
|
WorkflowRunNodeExecutionListResponse,
|
|
WorkflowRunNodeExecutionResponse,
|
|
CreatedAppResponse,
|
|
NodeTypeRow,
|
|
NodeTypeListResponse,
|
|
NodeTypeDetailResponse,
|
|
AppSettingsInfo,
|
|
ChatAppInfo,
|
|
AgentAppInfo,
|
|
ServiceApi,
|
|
AgentServiceApi,
|
|
AdvancedChatWebApp,
|
|
AgentWebApp,
|
|
ChatWebApp,
|
|
WebApp,
|
|
WebAppAccess,
|
|
WebAppToken,
|
|
WorkflowWebApp,
|
|
MarketplacePluginRow,
|
|
MarketplacePluginListResponse,
|
|
PluginProvides,
|
|
PluginRow,
|
|
PluginListResponse,
|
|
PluginTaskStartResponse,
|
|
PluginTaskItem,
|
|
PluginTaskResponse,
|
|
PluginDeleteResponse,
|
|
CredentialFormField,
|
|
CredentialRef,
|
|
CredentialWriteResponse,
|
|
CustomModelRow,
|
|
ModelListResponse,
|
|
ToolListResponse,
|
|
ModelProviderDetailResponse,
|
|
ModelProviderRow,
|
|
ModelRow,
|
|
KnowledgeBaseListResponse,
|
|
KnowledgeBaseRow,
|
|
KnowledgeRetrievalFragment,
|
|
LlmModelBlock,
|
|
MultipleRetrievalFragment,
|
|
ToolProviderDetailResponse,
|
|
ToolProviderRow,
|
|
)
|
|
# Standalone definition for contract codegen; ErrorBody.code stays an open
|
|
# string on the wire so old clients keep parsing future codes.
|
|
register_enum_models(openapi_ns, OpenApiErrorCode)
|
|
|
|
from . import (
|
|
account,
|
|
app_create,
|
|
app_dsl,
|
|
app_info,
|
|
app_release,
|
|
app_run,
|
|
app_webapp,
|
|
app_workflow,
|
|
apps,
|
|
apps_permitted_external,
|
|
files,
|
|
human_input_form,
|
|
index,
|
|
knowledge_bases,
|
|
model_providers,
|
|
node_types,
|
|
oauth_device,
|
|
oauth_device_sso,
|
|
plugins,
|
|
tool_providers,
|
|
workflow_events,
|
|
workspaces,
|
|
)
|
|
|
|
# Request models are imported from _models.py and registered above.
|
|
|
|
__all__ = [
|
|
"account",
|
|
"app_create",
|
|
"app_dsl",
|
|
"app_info",
|
|
"app_release",
|
|
"app_run",
|
|
"app_webapp",
|
|
"app_workflow",
|
|
"apps",
|
|
"apps_permitted_external",
|
|
"files",
|
|
"human_input_form",
|
|
"index",
|
|
"knowledge_bases",
|
|
"model_providers",
|
|
"node_types",
|
|
"oauth_device",
|
|
"oauth_device_sso",
|
|
"plugins",
|
|
"tool_providers",
|
|
"workflow_events",
|
|
"workspaces",
|
|
]
|
|
|
|
api.add_namespace(openapi_ns)
|