refactor(router): apply ns.route style (#26339)
This commit is contained in:
@@ -1,31 +1,10 @@
|
|||||||
|
from importlib import import_module
|
||||||
|
|
||||||
from flask import Blueprint
|
from flask import Blueprint
|
||||||
from flask_restx import Namespace
|
from flask_restx import Namespace
|
||||||
|
|
||||||
from libs.external_api import ExternalApi
|
from libs.external_api import ExternalApi
|
||||||
|
|
||||||
from .app.app_import import AppImportApi, AppImportCheckDependenciesApi, AppImportConfirmApi
|
|
||||||
from .explore.audio import ChatAudioApi, ChatTextApi
|
|
||||||
from .explore.completion import ChatApi, ChatStopApi, CompletionApi, CompletionStopApi
|
|
||||||
from .explore.conversation import (
|
|
||||||
ConversationApi,
|
|
||||||
ConversationListApi,
|
|
||||||
ConversationPinApi,
|
|
||||||
ConversationRenameApi,
|
|
||||||
ConversationUnPinApi,
|
|
||||||
)
|
|
||||||
from .explore.message import (
|
|
||||||
MessageFeedbackApi,
|
|
||||||
MessageListApi,
|
|
||||||
MessageMoreLikeThisApi,
|
|
||||||
MessageSuggestedQuestionApi,
|
|
||||||
)
|
|
||||||
from .explore.workflow import (
|
|
||||||
InstalledAppWorkflowRunApi,
|
|
||||||
InstalledAppWorkflowTaskStopApi,
|
|
||||||
)
|
|
||||||
from .files import FileApi, FilePreviewApi, FileSupportTypeApi
|
|
||||||
from .remote_files import RemoteFileInfoApi, RemoteFileUploadApi
|
|
||||||
|
|
||||||
bp = Blueprint("console", __name__, url_prefix="/console/api")
|
bp = Blueprint("console", __name__, url_prefix="/console/api")
|
||||||
|
|
||||||
api = ExternalApi(
|
api = ExternalApi(
|
||||||
@@ -35,23 +14,23 @@ api = ExternalApi(
|
|||||||
description="Console management APIs for app configuration, monitoring, and administration",
|
description="Console management APIs for app configuration, monitoring, and administration",
|
||||||
)
|
)
|
||||||
|
|
||||||
# Create namespace
|
|
||||||
console_ns = Namespace("console", description="Console management API operations", path="/")
|
console_ns = Namespace("console", description="Console management API operations", path="/")
|
||||||
|
|
||||||
# File
|
RESOURCE_MODULES = (
|
||||||
api.add_resource(FileApi, "/files/upload")
|
"controllers.console.app.app_import",
|
||||||
api.add_resource(FilePreviewApi, "/files/<uuid:file_id>/preview")
|
"controllers.console.explore.audio",
|
||||||
api.add_resource(FileSupportTypeApi, "/files/support-type")
|
"controllers.console.explore.completion",
|
||||||
|
"controllers.console.explore.conversation",
|
||||||
|
"controllers.console.explore.message",
|
||||||
|
"controllers.console.explore.workflow",
|
||||||
|
"controllers.console.files",
|
||||||
|
"controllers.console.remote_files",
|
||||||
|
)
|
||||||
|
|
||||||
# Remote files
|
for module_name in RESOURCE_MODULES:
|
||||||
api.add_resource(RemoteFileInfoApi, "/remote-files/<path:url>")
|
import_module(module_name)
|
||||||
api.add_resource(RemoteFileUploadApi, "/remote-files/upload")
|
|
||||||
|
|
||||||
# Import App
|
|
||||||
api.add_resource(AppImportApi, "/apps/imports")
|
|
||||||
api.add_resource(AppImportConfirmApi, "/apps/imports/<string:import_id>/confirm")
|
|
||||||
api.add_resource(AppImportCheckDependenciesApi, "/apps/imports/<string:app_id>/check-dependencies")
|
|
||||||
|
|
||||||
|
# Ensure resource modules are imported so route decorators are evaluated.
|
||||||
# Import other controllers
|
# Import other controllers
|
||||||
from . import (
|
from . import (
|
||||||
admin,
|
admin,
|
||||||
@@ -150,77 +129,6 @@ from .workspace import (
|
|||||||
workspace,
|
workspace,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Explore Audio
|
|
||||||
api.add_resource(ChatAudioApi, "/installed-apps/<uuid:installed_app_id>/audio-to-text", endpoint="installed_app_audio")
|
|
||||||
api.add_resource(ChatTextApi, "/installed-apps/<uuid:installed_app_id>/text-to-audio", endpoint="installed_app_text")
|
|
||||||
|
|
||||||
# Explore Completion
|
|
||||||
api.add_resource(
|
|
||||||
CompletionApi, "/installed-apps/<uuid:installed_app_id>/completion-messages", endpoint="installed_app_completion"
|
|
||||||
)
|
|
||||||
api.add_resource(
|
|
||||||
CompletionStopApi,
|
|
||||||
"/installed-apps/<uuid:installed_app_id>/completion-messages/<string:task_id>/stop",
|
|
||||||
endpoint="installed_app_stop_completion",
|
|
||||||
)
|
|
||||||
api.add_resource(
|
|
||||||
ChatApi, "/installed-apps/<uuid:installed_app_id>/chat-messages", endpoint="installed_app_chat_completion"
|
|
||||||
)
|
|
||||||
api.add_resource(
|
|
||||||
ChatStopApi,
|
|
||||||
"/installed-apps/<uuid:installed_app_id>/chat-messages/<string:task_id>/stop",
|
|
||||||
endpoint="installed_app_stop_chat_completion",
|
|
||||||
)
|
|
||||||
|
|
||||||
# Explore Conversation
|
|
||||||
api.add_resource(
|
|
||||||
ConversationRenameApi,
|
|
||||||
"/installed-apps/<uuid:installed_app_id>/conversations/<uuid:c_id>/name",
|
|
||||||
endpoint="installed_app_conversation_rename",
|
|
||||||
)
|
|
||||||
api.add_resource(
|
|
||||||
ConversationListApi, "/installed-apps/<uuid:installed_app_id>/conversations", endpoint="installed_app_conversations"
|
|
||||||
)
|
|
||||||
api.add_resource(
|
|
||||||
ConversationApi,
|
|
||||||
"/installed-apps/<uuid:installed_app_id>/conversations/<uuid:c_id>",
|
|
||||||
endpoint="installed_app_conversation",
|
|
||||||
)
|
|
||||||
api.add_resource(
|
|
||||||
ConversationPinApi,
|
|
||||||
"/installed-apps/<uuid:installed_app_id>/conversations/<uuid:c_id>/pin",
|
|
||||||
endpoint="installed_app_conversation_pin",
|
|
||||||
)
|
|
||||||
api.add_resource(
|
|
||||||
ConversationUnPinApi,
|
|
||||||
"/installed-apps/<uuid:installed_app_id>/conversations/<uuid:c_id>/unpin",
|
|
||||||
endpoint="installed_app_conversation_unpin",
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
# Explore Message
|
|
||||||
api.add_resource(MessageListApi, "/installed-apps/<uuid:installed_app_id>/messages", endpoint="installed_app_messages")
|
|
||||||
api.add_resource(
|
|
||||||
MessageFeedbackApi,
|
|
||||||
"/installed-apps/<uuid:installed_app_id>/messages/<uuid:message_id>/feedbacks",
|
|
||||||
endpoint="installed_app_message_feedback",
|
|
||||||
)
|
|
||||||
api.add_resource(
|
|
||||||
MessageMoreLikeThisApi,
|
|
||||||
"/installed-apps/<uuid:installed_app_id>/messages/<uuid:message_id>/more-like-this",
|
|
||||||
endpoint="installed_app_more_like_this",
|
|
||||||
)
|
|
||||||
api.add_resource(
|
|
||||||
MessageSuggestedQuestionApi,
|
|
||||||
"/installed-apps/<uuid:installed_app_id>/messages/<uuid:message_id>/suggested-questions",
|
|
||||||
endpoint="installed_app_suggested_question",
|
|
||||||
)
|
|
||||||
# Explore Workflow
|
|
||||||
api.add_resource(InstalledAppWorkflowRunApi, "/installed-apps/<uuid:installed_app_id>/workflows/run")
|
|
||||||
api.add_resource(
|
|
||||||
InstalledAppWorkflowTaskStopApi, "/installed-apps/<uuid:installed_app_id>/workflows/tasks/<string:task_id>/stop"
|
|
||||||
)
|
|
||||||
|
|
||||||
api.add_namespace(console_ns)
|
api.add_namespace(console_ns)
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
|
|||||||
@@ -20,7 +20,10 @@ from services.app_dsl_service import AppDslService, ImportStatus
|
|||||||
from services.enterprise.enterprise_service import EnterpriseService
|
from services.enterprise.enterprise_service import EnterpriseService
|
||||||
from services.feature_service import FeatureService
|
from services.feature_service import FeatureService
|
||||||
|
|
||||||
|
from .. import console_ns
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/apps/imports")
|
||||||
class AppImportApi(Resource):
|
class AppImportApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -74,6 +77,7 @@ class AppImportApi(Resource):
|
|||||||
return result.model_dump(mode="json"), 200
|
return result.model_dump(mode="json"), 200
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/apps/imports/<string:import_id>/confirm")
|
||||||
class AppImportConfirmApi(Resource):
|
class AppImportConfirmApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -98,6 +102,7 @@ class AppImportConfirmApi(Resource):
|
|||||||
return result.model_dump(mode="json"), 200
|
return result.model_dump(mode="json"), 200
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/apps/imports/<string:app_id>/check-dependencies")
|
||||||
class AppImportCheckDependenciesApi(Resource):
|
class AppImportCheckDependenciesApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from flask_login import current_user
|
|||||||
from flask_restx import Resource, reqparse
|
from flask_restx import Resource, reqparse
|
||||||
from werkzeug.exceptions import Forbidden
|
from werkzeug.exceptions import Forbidden
|
||||||
|
|
||||||
from controllers.console import api
|
from controllers.console import console_ns
|
||||||
from controllers.console.auth.error import ApiKeyAuthFailedError
|
from controllers.console.auth.error import ApiKeyAuthFailedError
|
||||||
from libs.login import login_required
|
from libs.login import login_required
|
||||||
from services.auth.api_key_auth_service import ApiKeyAuthService
|
from services.auth.api_key_auth_service import ApiKeyAuthService
|
||||||
@@ -10,6 +10,7 @@ from services.auth.api_key_auth_service import ApiKeyAuthService
|
|||||||
from ..wraps import account_initialization_required, setup_required
|
from ..wraps import account_initialization_required, setup_required
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/api-key-auth/data-source")
|
||||||
class ApiKeyAuthDataSource(Resource):
|
class ApiKeyAuthDataSource(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -33,6 +34,7 @@ class ApiKeyAuthDataSource(Resource):
|
|||||||
return {"sources": []}
|
return {"sources": []}
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/api-key-auth/data-source/binding")
|
||||||
class ApiKeyAuthDataSourceBinding(Resource):
|
class ApiKeyAuthDataSourceBinding(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -54,6 +56,7 @@ class ApiKeyAuthDataSourceBinding(Resource):
|
|||||||
return {"result": "success"}, 200
|
return {"result": "success"}, 200
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/api-key-auth/data-source/<uuid:binding_id>")
|
||||||
class ApiKeyAuthDataSourceBindingDelete(Resource):
|
class ApiKeyAuthDataSourceBindingDelete(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -66,8 +69,3 @@ class ApiKeyAuthDataSourceBindingDelete(Resource):
|
|||||||
ApiKeyAuthService.delete_provider_auth(current_user.current_tenant_id, binding_id)
|
ApiKeyAuthService.delete_provider_auth(current_user.current_tenant_id, binding_id)
|
||||||
|
|
||||||
return {"result": "success"}, 204
|
return {"result": "success"}, 204
|
||||||
|
|
||||||
|
|
||||||
api.add_resource(ApiKeyAuthDataSource, "/api-key-auth/data-source")
|
|
||||||
api.add_resource(ApiKeyAuthDataSourceBinding, "/api-key-auth/data-source/binding")
|
|
||||||
api.add_resource(ApiKeyAuthDataSourceBindingDelete, "/api-key-auth/data-source/<uuid:binding_id>")
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from sqlalchemy.orm import Session
|
|||||||
|
|
||||||
from configs import dify_config
|
from configs import dify_config
|
||||||
from constants.languages import languages
|
from constants.languages import languages
|
||||||
from controllers.console import api
|
from controllers.console import console_ns
|
||||||
from controllers.console.auth.error import (
|
from controllers.console.auth.error import (
|
||||||
EmailAlreadyInUseError,
|
EmailAlreadyInUseError,
|
||||||
EmailCodeError,
|
EmailCodeError,
|
||||||
@@ -25,6 +25,7 @@ from services.billing_service import BillingService
|
|||||||
from services.errors.account import AccountNotFoundError, AccountRegisterError
|
from services.errors.account import AccountNotFoundError, AccountRegisterError
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/email-register/send-email")
|
||||||
class EmailRegisterSendEmailApi(Resource):
|
class EmailRegisterSendEmailApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@email_password_login_enabled
|
@email_password_login_enabled
|
||||||
@@ -52,6 +53,7 @@ class EmailRegisterSendEmailApi(Resource):
|
|||||||
return {"result": "success", "data": token}
|
return {"result": "success", "data": token}
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/email-register/validity")
|
||||||
class EmailRegisterCheckApi(Resource):
|
class EmailRegisterCheckApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@email_password_login_enabled
|
@email_password_login_enabled
|
||||||
@@ -92,6 +94,7 @@ class EmailRegisterCheckApi(Resource):
|
|||||||
return {"is_valid": True, "email": token_data.get("email"), "token": new_token}
|
return {"is_valid": True, "email": token_data.get("email"), "token": new_token}
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/email-register")
|
||||||
class EmailRegisterResetApi(Resource):
|
class EmailRegisterResetApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@email_password_login_enabled
|
@email_password_login_enabled
|
||||||
@@ -148,8 +151,3 @@ class EmailRegisterResetApi(Resource):
|
|||||||
raise AccountInFreezeError()
|
raise AccountInFreezeError()
|
||||||
|
|
||||||
return account
|
return account
|
||||||
|
|
||||||
|
|
||||||
api.add_resource(EmailRegisterSendEmailApi, "/email-register/send-email")
|
|
||||||
api.add_resource(EmailRegisterCheckApi, "/email-register/validity")
|
|
||||||
api.add_resource(EmailRegisterResetApi, "/email-register")
|
|
||||||
|
|||||||
@@ -221,8 +221,3 @@ class ForgotPasswordResetApi(Resource):
|
|||||||
TenantService.create_tenant_member(tenant, account, role="owner")
|
TenantService.create_tenant_member(tenant, account, role="owner")
|
||||||
account.current_tenant = tenant
|
account.current_tenant = tenant
|
||||||
tenant_was_created.send(tenant)
|
tenant_was_created.send(tenant)
|
||||||
|
|
||||||
|
|
||||||
api.add_resource(ForgotPasswordSendEmailApi, "/forgot-password")
|
|
||||||
api.add_resource(ForgotPasswordCheckApi, "/forgot-password/validity")
|
|
||||||
api.add_resource(ForgotPasswordResetApi, "/forgot-password/resets")
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from flask_restx import Resource, reqparse
|
|||||||
import services
|
import services
|
||||||
from configs import dify_config
|
from configs import dify_config
|
||||||
from constants.languages import languages
|
from constants.languages import languages
|
||||||
from controllers.console import api
|
from controllers.console import console_ns
|
||||||
from controllers.console.auth.error import (
|
from controllers.console.auth.error import (
|
||||||
AuthenticationFailedError,
|
AuthenticationFailedError,
|
||||||
EmailCodeError,
|
EmailCodeError,
|
||||||
@@ -34,6 +34,7 @@ from services.errors.workspace import WorkSpaceNotAllowedCreateError, Workspaces
|
|||||||
from services.feature_service import FeatureService
|
from services.feature_service import FeatureService
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/login")
|
||||||
class LoginApi(Resource):
|
class LoginApi(Resource):
|
||||||
"""Resource for user login."""
|
"""Resource for user login."""
|
||||||
|
|
||||||
@@ -91,6 +92,7 @@ class LoginApi(Resource):
|
|||||||
return {"result": "success", "data": token_pair.model_dump()}
|
return {"result": "success", "data": token_pair.model_dump()}
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/logout")
|
||||||
class LogoutApi(Resource):
|
class LogoutApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
def get(self):
|
def get(self):
|
||||||
@@ -102,6 +104,7 @@ class LogoutApi(Resource):
|
|||||||
return {"result": "success"}
|
return {"result": "success"}
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/reset-password")
|
||||||
class ResetPasswordSendEmailApi(Resource):
|
class ResetPasswordSendEmailApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@email_password_login_enabled
|
@email_password_login_enabled
|
||||||
@@ -130,6 +133,7 @@ class ResetPasswordSendEmailApi(Resource):
|
|||||||
return {"result": "success", "data": token}
|
return {"result": "success", "data": token}
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/email-code-login")
|
||||||
class EmailCodeLoginSendEmailApi(Resource):
|
class EmailCodeLoginSendEmailApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
def post(self):
|
def post(self):
|
||||||
@@ -162,6 +166,7 @@ class EmailCodeLoginSendEmailApi(Resource):
|
|||||||
return {"result": "success", "data": token}
|
return {"result": "success", "data": token}
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/email-code-login/validity")
|
||||||
class EmailCodeLoginApi(Resource):
|
class EmailCodeLoginApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
def post(self):
|
def post(self):
|
||||||
@@ -218,6 +223,7 @@ class EmailCodeLoginApi(Resource):
|
|||||||
return {"result": "success", "data": token_pair.model_dump()}
|
return {"result": "success", "data": token_pair.model_dump()}
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/refresh-token")
|
||||||
class RefreshTokenApi(Resource):
|
class RefreshTokenApi(Resource):
|
||||||
def post(self):
|
def post(self):
|
||||||
parser = reqparse.RequestParser()
|
parser = reqparse.RequestParser()
|
||||||
@@ -229,11 +235,3 @@ class RefreshTokenApi(Resource):
|
|||||||
return {"result": "success", "data": new_token_pair.model_dump()}
|
return {"result": "success", "data": new_token_pair.model_dump()}
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return {"result": "fail", "data": str(e)}, 401
|
return {"result": "fail", "data": str(e)}, 401
|
||||||
|
|
||||||
|
|
||||||
api.add_resource(LoginApi, "/login")
|
|
||||||
api.add_resource(LogoutApi, "/logout")
|
|
||||||
api.add_resource(EmailCodeLoginSendEmailApi, "/email-code-login")
|
|
||||||
api.add_resource(EmailCodeLoginApi, "/email-code-login/validity")
|
|
||||||
api.add_resource(ResetPasswordSendEmailApi, "/reset-password")
|
|
||||||
api.add_resource(RefreshTokenApi, "/refresh-token")
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ from models.account import Account
|
|||||||
from models.model import OAuthProviderApp
|
from models.model import OAuthProviderApp
|
||||||
from services.oauth_server import OAUTH_ACCESS_TOKEN_EXPIRES_IN, OAuthGrantType, OAuthServerService
|
from services.oauth_server import OAUTH_ACCESS_TOKEN_EXPIRES_IN, OAuthGrantType, OAuthServerService
|
||||||
|
|
||||||
from .. import api
|
from .. import console_ns
|
||||||
|
|
||||||
P = ParamSpec("P")
|
P = ParamSpec("P")
|
||||||
R = TypeVar("R")
|
R = TypeVar("R")
|
||||||
@@ -86,6 +86,7 @@ def oauth_server_access_token_required(view: Callable[Concatenate[T, OAuthProvid
|
|||||||
return decorated
|
return decorated
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/oauth/provider")
|
||||||
class OAuthServerAppApi(Resource):
|
class OAuthServerAppApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@oauth_server_client_id_required
|
@oauth_server_client_id_required
|
||||||
@@ -108,6 +109,7 @@ class OAuthServerAppApi(Resource):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/oauth/provider/authorize")
|
||||||
class OAuthServerUserAuthorizeApi(Resource):
|
class OAuthServerUserAuthorizeApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -125,6 +127,7 @@ class OAuthServerUserAuthorizeApi(Resource):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/oauth/provider/token")
|
||||||
class OAuthServerUserTokenApi(Resource):
|
class OAuthServerUserTokenApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@oauth_server_client_id_required
|
@oauth_server_client_id_required
|
||||||
@@ -180,6 +183,7 @@ class OAuthServerUserTokenApi(Resource):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/oauth/provider/account")
|
||||||
class OAuthServerUserAccountApi(Resource):
|
class OAuthServerUserAccountApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@oauth_server_client_id_required
|
@oauth_server_client_id_required
|
||||||
@@ -194,9 +198,3 @@ class OAuthServerUserAccountApi(Resource):
|
|||||||
"timezone": account.timezone,
|
"timezone": account.timezone,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
api.add_resource(OAuthServerAppApi, "/oauth/provider")
|
|
||||||
api.add_resource(OAuthServerUserAuthorizeApi, "/oauth/provider/authorize")
|
|
||||||
api.add_resource(OAuthServerUserTokenApi, "/oauth/provider/token")
|
|
||||||
api.add_resource(OAuthServerUserAccountApi, "/oauth/provider/account")
|
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
from flask_restx import Resource, reqparse
|
from flask_restx import Resource, reqparse
|
||||||
|
|
||||||
from controllers.console import api
|
from controllers.console import console_ns
|
||||||
from controllers.console.wraps import account_initialization_required, only_edition_cloud, setup_required
|
from controllers.console.wraps import account_initialization_required, only_edition_cloud, setup_required
|
||||||
from libs.login import current_user, login_required
|
from libs.login import current_user, login_required
|
||||||
from models.model import Account
|
from models.model import Account
|
||||||
from services.billing_service import BillingService
|
from services.billing_service import BillingService
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/billing/subscription")
|
||||||
class Subscription(Resource):
|
class Subscription(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -26,6 +27,7 @@ class Subscription(Resource):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/billing/invoices")
|
||||||
class Invoices(Resource):
|
class Invoices(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -36,7 +38,3 @@ class Invoices(Resource):
|
|||||||
BillingService.is_tenant_owner_or_admin(current_user)
|
BillingService.is_tenant_owner_or_admin(current_user)
|
||||||
assert current_user.current_tenant_id is not None
|
assert current_user.current_tenant_id is not None
|
||||||
return BillingService.get_invoices(current_user.email, current_user.current_tenant_id)
|
return BillingService.get_invoices(current_user.email, current_user.current_tenant_id)
|
||||||
|
|
||||||
|
|
||||||
api.add_resource(Subscription, "/billing/subscription")
|
|
||||||
api.add_resource(Invoices, "/billing/invoices")
|
|
||||||
|
|||||||
@@ -6,10 +6,11 @@ from libs.helper import extract_remote_ip
|
|||||||
from libs.login import login_required
|
from libs.login import login_required
|
||||||
from services.billing_service import BillingService
|
from services.billing_service import BillingService
|
||||||
|
|
||||||
from .. import api
|
from .. import console_ns
|
||||||
from ..wraps import account_initialization_required, only_edition_cloud, setup_required
|
from ..wraps import account_initialization_required, only_edition_cloud, setup_required
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/compliance/download")
|
||||||
class ComplianceApi(Resource):
|
class ComplianceApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -30,6 +31,3 @@ class ComplianceApi(Resource):
|
|||||||
ip=ip_address,
|
ip=ip_address,
|
||||||
device_info=device_info,
|
device_info=device_info,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
api.add_resource(ComplianceApi, "/compliance/download")
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ from sqlalchemy import select
|
|||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
from werkzeug.exceptions import NotFound
|
from werkzeug.exceptions import NotFound
|
||||||
|
|
||||||
from controllers.console import api
|
from controllers.console import console_ns
|
||||||
from controllers.console.wraps import account_initialization_required, setup_required
|
from controllers.console.wraps import account_initialization_required, setup_required
|
||||||
from core.datasource.entities.datasource_entities import DatasourceProviderType, OnlineDocumentPagesMessage
|
from core.datasource.entities.datasource_entities import DatasourceProviderType, OnlineDocumentPagesMessage
|
||||||
from core.datasource.online_document.online_document_plugin import OnlineDocumentDatasourcePlugin
|
from core.datasource.online_document.online_document_plugin import OnlineDocumentDatasourcePlugin
|
||||||
@@ -27,6 +27,10 @@ from services.datasource_provider_service import DatasourceProviderService
|
|||||||
from tasks.document_indexing_sync_task import document_indexing_sync_task
|
from tasks.document_indexing_sync_task import document_indexing_sync_task
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route(
|
||||||
|
"/data-source/integrates",
|
||||||
|
"/data-source/integrates/<uuid:binding_id>/<string:action>",
|
||||||
|
)
|
||||||
class DataSourceApi(Resource):
|
class DataSourceApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -109,6 +113,7 @@ class DataSourceApi(Resource):
|
|||||||
return {"result": "success"}, 200
|
return {"result": "success"}, 200
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/notion/pre-import/pages")
|
||||||
class DataSourceNotionListApi(Resource):
|
class DataSourceNotionListApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -196,6 +201,10 @@ class DataSourceNotionListApi(Resource):
|
|||||||
return {"notion_info": {**workspace_info, "pages": pages}}, 200
|
return {"notion_info": {**workspace_info, "pages": pages}}, 200
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route(
|
||||||
|
"/notion/workspaces/<uuid:workspace_id>/pages/<uuid:page_id>/<string:page_type>/preview",
|
||||||
|
"/datasets/notion-indexing-estimate",
|
||||||
|
)
|
||||||
class DataSourceNotionApi(Resource):
|
class DataSourceNotionApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -269,6 +278,7 @@ class DataSourceNotionApi(Resource):
|
|||||||
return response.model_dump(), 200
|
return response.model_dump(), 200
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/datasets/<uuid:dataset_id>/notion/sync")
|
||||||
class DataSourceNotionDatasetSyncApi(Resource):
|
class DataSourceNotionDatasetSyncApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -285,6 +295,7 @@ class DataSourceNotionDatasetSyncApi(Resource):
|
|||||||
return {"result": "success"}, 200
|
return {"result": "success"}, 200
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/notion/sync")
|
||||||
class DataSourceNotionDocumentSyncApi(Resource):
|
class DataSourceNotionDocumentSyncApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -301,16 +312,3 @@ class DataSourceNotionDocumentSyncApi(Resource):
|
|||||||
raise NotFound("Document not found.")
|
raise NotFound("Document not found.")
|
||||||
document_indexing_sync_task.delay(dataset_id_str, document_id_str)
|
document_indexing_sync_task.delay(dataset_id_str, document_id_str)
|
||||||
return {"result": "success"}, 200
|
return {"result": "success"}, 200
|
||||||
|
|
||||||
|
|
||||||
api.add_resource(DataSourceApi, "/data-source/integrates", "/data-source/integrates/<uuid:binding_id>/<string:action>")
|
|
||||||
api.add_resource(DataSourceNotionListApi, "/notion/pre-import/pages")
|
|
||||||
api.add_resource(
|
|
||||||
DataSourceNotionApi,
|
|
||||||
"/notion/workspaces/<uuid:workspace_id>/pages/<uuid:page_id>/<string:page_type>/preview",
|
|
||||||
"/datasets/notion-indexing-estimate",
|
|
||||||
)
|
|
||||||
api.add_resource(DataSourceNotionDatasetSyncApi, "/datasets/<uuid:dataset_id>/notion/sync")
|
|
||||||
api.add_resource(
|
|
||||||
DataSourceNotionDocumentSyncApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/notion/sync"
|
|
||||||
)
|
|
||||||
|
|||||||
@@ -1114,6 +1114,7 @@ class WebsiteDocumentSyncApi(DocumentResource):
|
|||||||
return {"result": "success"}, 200
|
return {"result": "success"}, 200
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/pipeline-execution-log")
|
||||||
class DocumentPipelineExecutionLogApi(DocumentResource):
|
class DocumentPipelineExecutionLogApi(DocumentResource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -1147,29 +1148,3 @@ class DocumentPipelineExecutionLogApi(DocumentResource):
|
|||||||
"input_data": log.input_data,
|
"input_data": log.input_data,
|
||||||
"datasource_node_id": log.datasource_node_id,
|
"datasource_node_id": log.datasource_node_id,
|
||||||
}, 200
|
}, 200
|
||||||
|
|
||||||
|
|
||||||
api.add_resource(GetProcessRuleApi, "/datasets/process-rule")
|
|
||||||
api.add_resource(DatasetDocumentListApi, "/datasets/<uuid:dataset_id>/documents")
|
|
||||||
api.add_resource(DatasetInitApi, "/datasets/init")
|
|
||||||
api.add_resource(
|
|
||||||
DocumentIndexingEstimateApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/indexing-estimate"
|
|
||||||
)
|
|
||||||
api.add_resource(DocumentBatchIndexingEstimateApi, "/datasets/<uuid:dataset_id>/batch/<string:batch>/indexing-estimate")
|
|
||||||
api.add_resource(DocumentBatchIndexingStatusApi, "/datasets/<uuid:dataset_id>/batch/<string:batch>/indexing-status")
|
|
||||||
api.add_resource(DocumentIndexingStatusApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/indexing-status")
|
|
||||||
api.add_resource(DocumentApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>")
|
|
||||||
api.add_resource(
|
|
||||||
DocumentProcessingApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/processing/<string:action>"
|
|
||||||
)
|
|
||||||
api.add_resource(DocumentMetadataApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/metadata")
|
|
||||||
api.add_resource(DocumentStatusApi, "/datasets/<uuid:dataset_id>/documents/status/<string:action>/batch")
|
|
||||||
api.add_resource(DocumentPauseApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/processing/pause")
|
|
||||||
api.add_resource(DocumentRecoverApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/processing/resume")
|
|
||||||
api.add_resource(DocumentRetryApi, "/datasets/<uuid:dataset_id>/retry")
|
|
||||||
api.add_resource(DocumentRenameApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/rename")
|
|
||||||
|
|
||||||
api.add_resource(WebsiteDocumentSyncApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/website-sync")
|
|
||||||
api.add_resource(
|
|
||||||
DocumentPipelineExecutionLogApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/pipeline-execution-log"
|
|
||||||
)
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from sqlalchemy import select
|
|||||||
from werkzeug.exceptions import Forbidden, NotFound
|
from werkzeug.exceptions import Forbidden, NotFound
|
||||||
|
|
||||||
import services
|
import services
|
||||||
from controllers.console import api
|
from controllers.console import console_ns
|
||||||
from controllers.console.app.error import ProviderNotInitializeError
|
from controllers.console.app.error import ProviderNotInitializeError
|
||||||
from controllers.console.datasets.error import (
|
from controllers.console.datasets.error import (
|
||||||
ChildChunkDeleteIndexError,
|
ChildChunkDeleteIndexError,
|
||||||
@@ -37,6 +37,7 @@ from services.errors.chunk import ChildChunkIndexingError as ChildChunkIndexingS
|
|||||||
from tasks.batch_create_segment_to_index_task import batch_create_segment_to_index_task
|
from tasks.batch_create_segment_to_index_task import batch_create_segment_to_index_task
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/segments")
|
||||||
class DatasetDocumentSegmentListApi(Resource):
|
class DatasetDocumentSegmentListApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -139,6 +140,7 @@ class DatasetDocumentSegmentListApi(Resource):
|
|||||||
return {"result": "success"}, 204
|
return {"result": "success"}, 204
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/segment/<string:action>")
|
||||||
class DatasetDocumentSegmentApi(Resource):
|
class DatasetDocumentSegmentApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -193,6 +195,7 @@ class DatasetDocumentSegmentApi(Resource):
|
|||||||
return {"result": "success"}, 200
|
return {"result": "success"}, 200
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/segment")
|
||||||
class DatasetDocumentSegmentAddApi(Resource):
|
class DatasetDocumentSegmentAddApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -244,6 +247,7 @@ class DatasetDocumentSegmentAddApi(Resource):
|
|||||||
return {"data": marshal(segment, segment_fields), "doc_form": document.doc_form}, 200
|
return {"data": marshal(segment, segment_fields), "doc_form": document.doc_form}, 200
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/segments/<uuid:segment_id>")
|
||||||
class DatasetDocumentSegmentUpdateApi(Resource):
|
class DatasetDocumentSegmentUpdateApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -345,6 +349,10 @@ class DatasetDocumentSegmentUpdateApi(Resource):
|
|||||||
return {"result": "success"}, 204
|
return {"result": "success"}, 204
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route(
|
||||||
|
"/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/segments/batch_import",
|
||||||
|
"/datasets/batch_import_status/<uuid:job_id>",
|
||||||
|
)
|
||||||
class DatasetDocumentSegmentBatchImportApi(Resource):
|
class DatasetDocumentSegmentBatchImportApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -393,7 +401,9 @@ class DatasetDocumentSegmentBatchImportApi(Resource):
|
|||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@account_initialization_required
|
@account_initialization_required
|
||||||
def get(self, job_id):
|
def get(self, job_id=None, dataset_id=None, document_id=None):
|
||||||
|
if job_id is None:
|
||||||
|
raise NotFound("The job does not exist.")
|
||||||
job_id = str(job_id)
|
job_id = str(job_id)
|
||||||
indexing_cache_key = f"segment_batch_import_{job_id}"
|
indexing_cache_key = f"segment_batch_import_{job_id}"
|
||||||
cache_result = redis_client.get(indexing_cache_key)
|
cache_result = redis_client.get(indexing_cache_key)
|
||||||
@@ -403,6 +413,7 @@ class DatasetDocumentSegmentBatchImportApi(Resource):
|
|||||||
return {"job_id": job_id, "job_status": cache_result.decode()}, 200
|
return {"job_id": job_id, "job_status": cache_result.decode()}, 200
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/segments/<uuid:segment_id>/child_chunks")
|
||||||
class ChildChunkAddApi(Resource):
|
class ChildChunkAddApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -553,6 +564,9 @@ class ChildChunkAddApi(Resource):
|
|||||||
return {"data": marshal(child_chunks, child_chunk_fields)}, 200
|
return {"data": marshal(child_chunks, child_chunk_fields)}, 200
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route(
|
||||||
|
"/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/segments/<uuid:segment_id>/child_chunks/<uuid:child_chunk_id>"
|
||||||
|
)
|
||||||
class ChildChunkUpdateApi(Resource):
|
class ChildChunkUpdateApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -666,27 +680,3 @@ class ChildChunkUpdateApi(Resource):
|
|||||||
except ChildChunkIndexingServiceError as e:
|
except ChildChunkIndexingServiceError as e:
|
||||||
raise ChildChunkIndexingError(str(e))
|
raise ChildChunkIndexingError(str(e))
|
||||||
return {"data": marshal(child_chunk, child_chunk_fields)}, 200
|
return {"data": marshal(child_chunk, child_chunk_fields)}, 200
|
||||||
|
|
||||||
|
|
||||||
api.add_resource(DatasetDocumentSegmentListApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/segments")
|
|
||||||
api.add_resource(
|
|
||||||
DatasetDocumentSegmentApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/segment/<string:action>"
|
|
||||||
)
|
|
||||||
api.add_resource(DatasetDocumentSegmentAddApi, "/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/segment")
|
|
||||||
api.add_resource(
|
|
||||||
DatasetDocumentSegmentUpdateApi,
|
|
||||||
"/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/segments/<uuid:segment_id>",
|
|
||||||
)
|
|
||||||
api.add_resource(
|
|
||||||
DatasetDocumentSegmentBatchImportApi,
|
|
||||||
"/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/segments/batch_import",
|
|
||||||
"/datasets/batch_import_status/<uuid:job_id>",
|
|
||||||
)
|
|
||||||
api.add_resource(
|
|
||||||
ChildChunkAddApi,
|
|
||||||
"/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/segments/<uuid:segment_id>/child_chunks",
|
|
||||||
)
|
|
||||||
api.add_resource(
|
|
||||||
ChildChunkUpdateApi,
|
|
||||||
"/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/segments/<uuid:segment_id>/child_chunks/<uuid:child_chunk_id>",
|
|
||||||
)
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from flask_login import current_user
|
|||||||
from flask_restx import Resource, marshal_with, reqparse
|
from flask_restx import Resource, marshal_with, reqparse
|
||||||
from werkzeug.exceptions import NotFound
|
from werkzeug.exceptions import NotFound
|
||||||
|
|
||||||
from controllers.console import api
|
from controllers.console import console_ns
|
||||||
from controllers.console.wraps import account_initialization_required, enterprise_license_required, setup_required
|
from controllers.console.wraps import account_initialization_required, enterprise_license_required, setup_required
|
||||||
from fields.dataset_fields import dataset_metadata_fields
|
from fields.dataset_fields import dataset_metadata_fields
|
||||||
from libs.login import login_required
|
from libs.login import login_required
|
||||||
@@ -16,6 +16,7 @@ from services.entities.knowledge_entities.knowledge_entities import (
|
|||||||
from services.metadata_service import MetadataService
|
from services.metadata_service import MetadataService
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/datasets/<uuid:dataset_id>/metadata")
|
||||||
class DatasetMetadataCreateApi(Resource):
|
class DatasetMetadataCreateApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -50,6 +51,7 @@ class DatasetMetadataCreateApi(Resource):
|
|||||||
return MetadataService.get_dataset_metadatas(dataset), 200
|
return MetadataService.get_dataset_metadatas(dataset), 200
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/datasets/<uuid:dataset_id>/metadata/<uuid:metadata_id>")
|
||||||
class DatasetMetadataApi(Resource):
|
class DatasetMetadataApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -87,6 +89,7 @@ class DatasetMetadataApi(Resource):
|
|||||||
return {"result": "success"}, 204
|
return {"result": "success"}, 204
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/datasets/metadata/built-in")
|
||||||
class DatasetMetadataBuiltInFieldApi(Resource):
|
class DatasetMetadataBuiltInFieldApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -97,6 +100,7 @@ class DatasetMetadataBuiltInFieldApi(Resource):
|
|||||||
return {"fields": built_in_fields}, 200
|
return {"fields": built_in_fields}, 200
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/datasets/<uuid:dataset_id>/metadata/built-in/<string:action>")
|
||||||
class DatasetMetadataBuiltInFieldActionApi(Resource):
|
class DatasetMetadataBuiltInFieldActionApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -116,6 +120,7 @@ class DatasetMetadataBuiltInFieldActionApi(Resource):
|
|||||||
return {"result": "success"}, 200
|
return {"result": "success"}, 200
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/datasets/<uuid:dataset_id>/documents/metadata")
|
||||||
class DocumentMetadataEditApi(Resource):
|
class DocumentMetadataEditApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -136,10 +141,3 @@ class DocumentMetadataEditApi(Resource):
|
|||||||
MetadataService.update_documents_metadata(dataset, metadata_args)
|
MetadataService.update_documents_metadata(dataset, metadata_args)
|
||||||
|
|
||||||
return {"result": "success"}, 200
|
return {"result": "success"}, 200
|
||||||
|
|
||||||
|
|
||||||
api.add_resource(DatasetMetadataCreateApi, "/datasets/<uuid:dataset_id>/metadata")
|
|
||||||
api.add_resource(DatasetMetadataApi, "/datasets/<uuid:dataset_id>/metadata/<uuid:metadata_id>")
|
|
||||||
api.add_resource(DatasetMetadataBuiltInFieldApi, "/datasets/metadata/built-in")
|
|
||||||
api.add_resource(DatasetMetadataBuiltInFieldActionApi, "/datasets/<uuid:dataset_id>/metadata/built-in/<string:action>")
|
|
||||||
api.add_resource(DocumentMetadataEditApi, "/datasets/<uuid:dataset_id>/documents/metadata")
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from flask_restx import Resource, reqparse
|
|||||||
from werkzeug.exceptions import Forbidden, NotFound
|
from werkzeug.exceptions import Forbidden, NotFound
|
||||||
|
|
||||||
from configs import dify_config
|
from configs import dify_config
|
||||||
from controllers.console import api
|
from controllers.console import console_ns
|
||||||
from controllers.console.wraps import (
|
from controllers.console.wraps import (
|
||||||
account_initialization_required,
|
account_initialization_required,
|
||||||
setup_required,
|
setup_required,
|
||||||
@@ -19,6 +19,7 @@ from services.datasource_provider_service import DatasourceProviderService
|
|||||||
from services.plugin.oauth_service import OAuthProxyService
|
from services.plugin.oauth_service import OAuthProxyService
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/oauth/plugin/<path:provider_id>/datasource/get-authorization-url")
|
||||||
class DatasourcePluginOAuthAuthorizationUrl(Resource):
|
class DatasourcePluginOAuthAuthorizationUrl(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -68,6 +69,7 @@ class DatasourcePluginOAuthAuthorizationUrl(Resource):
|
|||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/oauth/plugin/<path:provider_id>/datasource/callback")
|
||||||
class DatasourceOAuthCallback(Resource):
|
class DatasourceOAuthCallback(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
def get(self, provider_id: str):
|
def get(self, provider_id: str):
|
||||||
@@ -123,6 +125,7 @@ class DatasourceOAuthCallback(Resource):
|
|||||||
return redirect(f"{dify_config.CONSOLE_WEB_URL}/oauth-callback")
|
return redirect(f"{dify_config.CONSOLE_WEB_URL}/oauth-callback")
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/auth/plugin/datasource/<path:provider_id>")
|
||||||
class DatasourceAuth(Resource):
|
class DatasourceAuth(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -165,6 +168,7 @@ class DatasourceAuth(Resource):
|
|||||||
return {"result": datasources}, 200
|
return {"result": datasources}, 200
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/auth/plugin/datasource/<path:provider_id>/delete")
|
||||||
class DatasourceAuthDeleteApi(Resource):
|
class DatasourceAuthDeleteApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -188,6 +192,7 @@ class DatasourceAuthDeleteApi(Resource):
|
|||||||
return {"result": "success"}, 200
|
return {"result": "success"}, 200
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/auth/plugin/datasource/<path:provider_id>/update")
|
||||||
class DatasourceAuthUpdateApi(Resource):
|
class DatasourceAuthUpdateApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -213,6 +218,7 @@ class DatasourceAuthUpdateApi(Resource):
|
|||||||
return {"result": "success"}, 201
|
return {"result": "success"}, 201
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/auth/plugin/datasource/list")
|
||||||
class DatasourceAuthListApi(Resource):
|
class DatasourceAuthListApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -225,6 +231,7 @@ class DatasourceAuthListApi(Resource):
|
|||||||
return {"result": jsonable_encoder(datasources)}, 200
|
return {"result": jsonable_encoder(datasources)}, 200
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/auth/plugin/datasource/default-list")
|
||||||
class DatasourceHardCodeAuthListApi(Resource):
|
class DatasourceHardCodeAuthListApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -237,6 +244,7 @@ class DatasourceHardCodeAuthListApi(Resource):
|
|||||||
return {"result": jsonable_encoder(datasources)}, 200
|
return {"result": jsonable_encoder(datasources)}, 200
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/auth/plugin/datasource/<path:provider_id>/custom-client")
|
||||||
class DatasourceAuthOauthCustomClient(Resource):
|
class DatasourceAuthOauthCustomClient(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -271,6 +279,7 @@ class DatasourceAuthOauthCustomClient(Resource):
|
|||||||
return {"result": "success"}, 200
|
return {"result": "success"}, 200
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/auth/plugin/datasource/<path:provider_id>/default")
|
||||||
class DatasourceAuthDefaultApi(Resource):
|
class DatasourceAuthDefaultApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -291,6 +300,7 @@ class DatasourceAuthDefaultApi(Resource):
|
|||||||
return {"result": "success"}, 200
|
return {"result": "success"}, 200
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/auth/plugin/datasource/<path:provider_id>/update-name")
|
||||||
class DatasourceUpdateProviderNameApi(Resource):
|
class DatasourceUpdateProviderNameApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -311,52 +321,3 @@ class DatasourceUpdateProviderNameApi(Resource):
|
|||||||
credential_id=args["credential_id"],
|
credential_id=args["credential_id"],
|
||||||
)
|
)
|
||||||
return {"result": "success"}, 200
|
return {"result": "success"}, 200
|
||||||
|
|
||||||
|
|
||||||
api.add_resource(
|
|
||||||
DatasourcePluginOAuthAuthorizationUrl,
|
|
||||||
"/oauth/plugin/<path:provider_id>/datasource/get-authorization-url",
|
|
||||||
)
|
|
||||||
api.add_resource(
|
|
||||||
DatasourceOAuthCallback,
|
|
||||||
"/oauth/plugin/<path:provider_id>/datasource/callback",
|
|
||||||
)
|
|
||||||
api.add_resource(
|
|
||||||
DatasourceAuth,
|
|
||||||
"/auth/plugin/datasource/<path:provider_id>",
|
|
||||||
)
|
|
||||||
|
|
||||||
api.add_resource(
|
|
||||||
DatasourceAuthUpdateApi,
|
|
||||||
"/auth/plugin/datasource/<path:provider_id>/update",
|
|
||||||
)
|
|
||||||
|
|
||||||
api.add_resource(
|
|
||||||
DatasourceAuthDeleteApi,
|
|
||||||
"/auth/plugin/datasource/<path:provider_id>/delete",
|
|
||||||
)
|
|
||||||
|
|
||||||
api.add_resource(
|
|
||||||
DatasourceAuthListApi,
|
|
||||||
"/auth/plugin/datasource/list",
|
|
||||||
)
|
|
||||||
|
|
||||||
api.add_resource(
|
|
||||||
DatasourceHardCodeAuthListApi,
|
|
||||||
"/auth/plugin/datasource/default-list",
|
|
||||||
)
|
|
||||||
|
|
||||||
api.add_resource(
|
|
||||||
DatasourceAuthOauthCustomClient,
|
|
||||||
"/auth/plugin/datasource/<path:provider_id>/custom-client",
|
|
||||||
)
|
|
||||||
|
|
||||||
api.add_resource(
|
|
||||||
DatasourceAuthDefaultApi,
|
|
||||||
"/auth/plugin/datasource/<path:provider_id>/default",
|
|
||||||
)
|
|
||||||
|
|
||||||
api.add_resource(
|
|
||||||
DatasourceUpdateProviderNameApi,
|
|
||||||
"/auth/plugin/datasource/<path:provider_id>/update-name",
|
|
||||||
)
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from flask_restx import ( # type: ignore
|
|||||||
)
|
)
|
||||||
from werkzeug.exceptions import Forbidden
|
from werkzeug.exceptions import Forbidden
|
||||||
|
|
||||||
from controllers.console import api
|
from controllers.console import console_ns
|
||||||
from controllers.console.datasets.wraps import get_rag_pipeline
|
from controllers.console.datasets.wraps import get_rag_pipeline
|
||||||
from controllers.console.wraps import account_initialization_required, setup_required
|
from controllers.console.wraps import account_initialization_required, setup_required
|
||||||
from libs.login import current_user, login_required
|
from libs.login import current_user, login_required
|
||||||
@@ -13,6 +13,7 @@ from models.dataset import Pipeline
|
|||||||
from services.rag_pipeline.rag_pipeline import RagPipelineService
|
from services.rag_pipeline.rag_pipeline import RagPipelineService
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/rag/pipelines/<uuid:pipeline_id>/workflows/published/datasource/nodes/<string:node_id>/preview")
|
||||||
class DataSourceContentPreviewApi(Resource):
|
class DataSourceContentPreviewApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -49,9 +50,3 @@ class DataSourceContentPreviewApi(Resource):
|
|||||||
credential_id=args.get("credential_id"),
|
credential_id=args.get("credential_id"),
|
||||||
)
|
)
|
||||||
return preview_content, 200
|
return preview_content, 200
|
||||||
|
|
||||||
|
|
||||||
api.add_resource(
|
|
||||||
DataSourceContentPreviewApi,
|
|
||||||
"/rag/pipelines/<uuid:pipeline_id>/workflows/published/datasource/nodes/<string:node_id>/preview",
|
|
||||||
)
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from flask import request
|
|||||||
from flask_restx import Resource, reqparse
|
from flask_restx import Resource, reqparse
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
|
|
||||||
from controllers.console import api
|
from controllers.console import console_ns
|
||||||
from controllers.console.wraps import (
|
from controllers.console.wraps import (
|
||||||
account_initialization_required,
|
account_initialization_required,
|
||||||
enterprise_license_required,
|
enterprise_license_required,
|
||||||
@@ -32,6 +32,7 @@ def _validate_description_length(description):
|
|||||||
return description
|
return description
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/rag/pipeline/templates")
|
||||||
class PipelineTemplateListApi(Resource):
|
class PipelineTemplateListApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -45,6 +46,7 @@ class PipelineTemplateListApi(Resource):
|
|||||||
return pipeline_templates, 200
|
return pipeline_templates, 200
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/rag/pipeline/templates/<string:template_id>")
|
||||||
class PipelineTemplateDetailApi(Resource):
|
class PipelineTemplateDetailApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -57,6 +59,7 @@ class PipelineTemplateDetailApi(Resource):
|
|||||||
return pipeline_template, 200
|
return pipeline_template, 200
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/rag/pipeline/customized/templates/<string:template_id>")
|
||||||
class CustomizedPipelineTemplateApi(Resource):
|
class CustomizedPipelineTemplateApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -112,6 +115,7 @@ class CustomizedPipelineTemplateApi(Resource):
|
|||||||
return {"data": template.yaml_content}, 200
|
return {"data": template.yaml_content}, 200
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/rag/pipelines/<string:pipeline_id>/customized/publish")
|
||||||
class PublishCustomizedPipelineTemplateApi(Resource):
|
class PublishCustomizedPipelineTemplateApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -144,21 +148,3 @@ class PublishCustomizedPipelineTemplateApi(Resource):
|
|||||||
rag_pipeline_service = RagPipelineService()
|
rag_pipeline_service = RagPipelineService()
|
||||||
rag_pipeline_service.publish_customized_pipeline_template(pipeline_id, args)
|
rag_pipeline_service.publish_customized_pipeline_template(pipeline_id, args)
|
||||||
return {"result": "success"}
|
return {"result": "success"}
|
||||||
|
|
||||||
|
|
||||||
api.add_resource(
|
|
||||||
PipelineTemplateListApi,
|
|
||||||
"/rag/pipeline/templates",
|
|
||||||
)
|
|
||||||
api.add_resource(
|
|
||||||
PipelineTemplateDetailApi,
|
|
||||||
"/rag/pipeline/templates/<string:template_id>",
|
|
||||||
)
|
|
||||||
api.add_resource(
|
|
||||||
CustomizedPipelineTemplateApi,
|
|
||||||
"/rag/pipeline/customized/templates/<string:template_id>",
|
|
||||||
)
|
|
||||||
api.add_resource(
|
|
||||||
PublishCustomizedPipelineTemplateApi,
|
|
||||||
"/rag/pipelines/<string:pipeline_id>/customized/publish",
|
|
||||||
)
|
|
||||||
|
|||||||
@@ -26,9 +26,15 @@ from services.errors.audio import (
|
|||||||
UnsupportedAudioTypeServiceError,
|
UnsupportedAudioTypeServiceError,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
from .. import console_ns
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route(
|
||||||
|
"/installed-apps/<uuid:installed_app_id>/audio-to-text",
|
||||||
|
endpoint="installed_app_audio",
|
||||||
|
)
|
||||||
class ChatAudioApi(InstalledAppResource):
|
class ChatAudioApi(InstalledAppResource):
|
||||||
def post(self, installed_app):
|
def post(self, installed_app):
|
||||||
app_model = installed_app.app
|
app_model = installed_app.app
|
||||||
@@ -65,6 +71,10 @@ class ChatAudioApi(InstalledAppResource):
|
|||||||
raise InternalServerError()
|
raise InternalServerError()
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route(
|
||||||
|
"/installed-apps/<uuid:installed_app_id>/text-to-audio",
|
||||||
|
endpoint="installed_app_text",
|
||||||
|
)
|
||||||
class ChatTextApi(InstalledAppResource):
|
class ChatTextApi(InstalledAppResource):
|
||||||
def post(self, installed_app):
|
def post(self, installed_app):
|
||||||
from flask_restx import reqparse
|
from flask_restx import reqparse
|
||||||
|
|||||||
@@ -33,10 +33,16 @@ from models.model import AppMode
|
|||||||
from services.app_generate_service import AppGenerateService
|
from services.app_generate_service import AppGenerateService
|
||||||
from services.errors.llm import InvokeRateLimitError
|
from services.errors.llm import InvokeRateLimitError
|
||||||
|
|
||||||
|
from .. import console_ns
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
# define completion api for user
|
# define completion api for user
|
||||||
|
@console_ns.route(
|
||||||
|
"/installed-apps/<uuid:installed_app_id>/completion-messages",
|
||||||
|
endpoint="installed_app_completion",
|
||||||
|
)
|
||||||
class CompletionApi(InstalledAppResource):
|
class CompletionApi(InstalledAppResource):
|
||||||
def post(self, installed_app):
|
def post(self, installed_app):
|
||||||
app_model = installed_app.app
|
app_model = installed_app.app
|
||||||
@@ -87,6 +93,10 @@ class CompletionApi(InstalledAppResource):
|
|||||||
raise InternalServerError()
|
raise InternalServerError()
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route(
|
||||||
|
"/installed-apps/<uuid:installed_app_id>/completion-messages/<string:task_id>/stop",
|
||||||
|
endpoint="installed_app_stop_completion",
|
||||||
|
)
|
||||||
class CompletionStopApi(InstalledAppResource):
|
class CompletionStopApi(InstalledAppResource):
|
||||||
def post(self, installed_app, task_id):
|
def post(self, installed_app, task_id):
|
||||||
app_model = installed_app.app
|
app_model = installed_app.app
|
||||||
@@ -100,6 +110,10 @@ class CompletionStopApi(InstalledAppResource):
|
|||||||
return {"result": "success"}, 200
|
return {"result": "success"}, 200
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route(
|
||||||
|
"/installed-apps/<uuid:installed_app_id>/chat-messages",
|
||||||
|
endpoint="installed_app_chat_completion",
|
||||||
|
)
|
||||||
class ChatApi(InstalledAppResource):
|
class ChatApi(InstalledAppResource):
|
||||||
def post(self, installed_app):
|
def post(self, installed_app):
|
||||||
app_model = installed_app.app
|
app_model = installed_app.app
|
||||||
@@ -153,6 +167,10 @@ class ChatApi(InstalledAppResource):
|
|||||||
raise InternalServerError()
|
raise InternalServerError()
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route(
|
||||||
|
"/installed-apps/<uuid:installed_app_id>/chat-messages/<string:task_id>/stop",
|
||||||
|
endpoint="installed_app_stop_chat_completion",
|
||||||
|
)
|
||||||
class ChatStopApi(InstalledAppResource):
|
class ChatStopApi(InstalledAppResource):
|
||||||
def post(self, installed_app, task_id):
|
def post(self, installed_app, task_id):
|
||||||
app_model = installed_app.app
|
app_model = installed_app.app
|
||||||
|
|||||||
@@ -16,7 +16,13 @@ from services.conversation_service import ConversationService
|
|||||||
from services.errors.conversation import ConversationNotExistsError, LastConversationNotExistsError
|
from services.errors.conversation import ConversationNotExistsError, LastConversationNotExistsError
|
||||||
from services.web_conversation_service import WebConversationService
|
from services.web_conversation_service import WebConversationService
|
||||||
|
|
||||||
|
from .. import console_ns
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route(
|
||||||
|
"/installed-apps/<uuid:installed_app_id>/conversations",
|
||||||
|
endpoint="installed_app_conversations",
|
||||||
|
)
|
||||||
class ConversationListApi(InstalledAppResource):
|
class ConversationListApi(InstalledAppResource):
|
||||||
@marshal_with(conversation_infinite_scroll_pagination_fields)
|
@marshal_with(conversation_infinite_scroll_pagination_fields)
|
||||||
def get(self, installed_app):
|
def get(self, installed_app):
|
||||||
@@ -52,6 +58,10 @@ class ConversationListApi(InstalledAppResource):
|
|||||||
raise NotFound("Last Conversation Not Exists.")
|
raise NotFound("Last Conversation Not Exists.")
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route(
|
||||||
|
"/installed-apps/<uuid:installed_app_id>/conversations/<uuid:c_id>",
|
||||||
|
endpoint="installed_app_conversation",
|
||||||
|
)
|
||||||
class ConversationApi(InstalledAppResource):
|
class ConversationApi(InstalledAppResource):
|
||||||
def delete(self, installed_app, c_id):
|
def delete(self, installed_app, c_id):
|
||||||
app_model = installed_app.app
|
app_model = installed_app.app
|
||||||
@@ -70,6 +80,10 @@ class ConversationApi(InstalledAppResource):
|
|||||||
return {"result": "success"}, 204
|
return {"result": "success"}, 204
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route(
|
||||||
|
"/installed-apps/<uuid:installed_app_id>/conversations/<uuid:c_id>/name",
|
||||||
|
endpoint="installed_app_conversation_rename",
|
||||||
|
)
|
||||||
class ConversationRenameApi(InstalledAppResource):
|
class ConversationRenameApi(InstalledAppResource):
|
||||||
@marshal_with(simple_conversation_fields)
|
@marshal_with(simple_conversation_fields)
|
||||||
def post(self, installed_app, c_id):
|
def post(self, installed_app, c_id):
|
||||||
@@ -95,6 +109,10 @@ class ConversationRenameApi(InstalledAppResource):
|
|||||||
raise NotFound("Conversation Not Exists.")
|
raise NotFound("Conversation Not Exists.")
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route(
|
||||||
|
"/installed-apps/<uuid:installed_app_id>/conversations/<uuid:c_id>/pin",
|
||||||
|
endpoint="installed_app_conversation_pin",
|
||||||
|
)
|
||||||
class ConversationPinApi(InstalledAppResource):
|
class ConversationPinApi(InstalledAppResource):
|
||||||
def patch(self, installed_app, c_id):
|
def patch(self, installed_app, c_id):
|
||||||
app_model = installed_app.app
|
app_model = installed_app.app
|
||||||
@@ -114,6 +132,10 @@ class ConversationPinApi(InstalledAppResource):
|
|||||||
return {"result": "success"}
|
return {"result": "success"}
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route(
|
||||||
|
"/installed-apps/<uuid:installed_app_id>/conversations/<uuid:c_id>/unpin",
|
||||||
|
endpoint="installed_app_conversation_unpin",
|
||||||
|
)
|
||||||
class ConversationUnPinApi(InstalledAppResource):
|
class ConversationUnPinApi(InstalledAppResource):
|
||||||
def patch(self, installed_app, c_id):
|
def patch(self, installed_app, c_id):
|
||||||
app_model = installed_app.app
|
app_model = installed_app.app
|
||||||
|
|||||||
@@ -36,9 +36,15 @@ from services.errors.message import (
|
|||||||
)
|
)
|
||||||
from services.message_service import MessageService
|
from services.message_service import MessageService
|
||||||
|
|
||||||
|
from .. import console_ns
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route(
|
||||||
|
"/installed-apps/<uuid:installed_app_id>/messages",
|
||||||
|
endpoint="installed_app_messages",
|
||||||
|
)
|
||||||
class MessageListApi(InstalledAppResource):
|
class MessageListApi(InstalledAppResource):
|
||||||
@marshal_with(message_infinite_scroll_pagination_fields)
|
@marshal_with(message_infinite_scroll_pagination_fields)
|
||||||
def get(self, installed_app):
|
def get(self, installed_app):
|
||||||
@@ -66,6 +72,10 @@ class MessageListApi(InstalledAppResource):
|
|||||||
raise NotFound("First Message Not Exists.")
|
raise NotFound("First Message Not Exists.")
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route(
|
||||||
|
"/installed-apps/<uuid:installed_app_id>/messages/<uuid:message_id>/feedbacks",
|
||||||
|
endpoint="installed_app_message_feedback",
|
||||||
|
)
|
||||||
class MessageFeedbackApi(InstalledAppResource):
|
class MessageFeedbackApi(InstalledAppResource):
|
||||||
def post(self, installed_app, message_id):
|
def post(self, installed_app, message_id):
|
||||||
app_model = installed_app.app
|
app_model = installed_app.app
|
||||||
@@ -93,6 +103,10 @@ class MessageFeedbackApi(InstalledAppResource):
|
|||||||
return {"result": "success"}
|
return {"result": "success"}
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route(
|
||||||
|
"/installed-apps/<uuid:installed_app_id>/messages/<uuid:message_id>/more-like-this",
|
||||||
|
endpoint="installed_app_more_like_this",
|
||||||
|
)
|
||||||
class MessageMoreLikeThisApi(InstalledAppResource):
|
class MessageMoreLikeThisApi(InstalledAppResource):
|
||||||
def get(self, installed_app, message_id):
|
def get(self, installed_app, message_id):
|
||||||
app_model = installed_app.app
|
app_model = installed_app.app
|
||||||
@@ -139,6 +153,10 @@ class MessageMoreLikeThisApi(InstalledAppResource):
|
|||||||
raise InternalServerError()
|
raise InternalServerError()
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route(
|
||||||
|
"/installed-apps/<uuid:installed_app_id>/messages/<uuid:message_id>/suggested-questions",
|
||||||
|
endpoint="installed_app_suggested_question",
|
||||||
|
)
|
||||||
class MessageSuggestedQuestionApi(InstalledAppResource):
|
class MessageSuggestedQuestionApi(InstalledAppResource):
|
||||||
def get(self, installed_app, message_id):
|
def get(self, installed_app, message_id):
|
||||||
app_model = installed_app.app
|
app_model = installed_app.app
|
||||||
|
|||||||
@@ -27,9 +27,12 @@ from models.model import AppMode, InstalledApp
|
|||||||
from services.app_generate_service import AppGenerateService
|
from services.app_generate_service import AppGenerateService
|
||||||
from services.errors.llm import InvokeRateLimitError
|
from services.errors.llm import InvokeRateLimitError
|
||||||
|
|
||||||
|
from .. import console_ns
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/installed-apps/<uuid:installed_app_id>/workflows/run")
|
||||||
class InstalledAppWorkflowRunApi(InstalledAppResource):
|
class InstalledAppWorkflowRunApi(InstalledAppResource):
|
||||||
def post(self, installed_app: InstalledApp):
|
def post(self, installed_app: InstalledApp):
|
||||||
"""
|
"""
|
||||||
@@ -70,6 +73,7 @@ class InstalledAppWorkflowRunApi(InstalledAppResource):
|
|||||||
raise InternalServerError()
|
raise InternalServerError()
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/installed-apps/<uuid:installed_app_id>/workflows/tasks/<string:task_id>/stop")
|
||||||
class InstalledAppWorkflowTaskStopApi(InstalledAppResource):
|
class InstalledAppWorkflowTaskStopApi(InstalledAppResource):
|
||||||
def post(self, installed_app: InstalledApp, task_id: str):
|
def post(self, installed_app: InstalledApp, task_id: str):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -26,9 +26,12 @@ from libs.login import login_required
|
|||||||
from models import Account
|
from models import Account
|
||||||
from services.file_service import FileService
|
from services.file_service import FileService
|
||||||
|
|
||||||
|
from . import console_ns
|
||||||
|
|
||||||
PREVIEW_WORDS_LIMIT = 3000
|
PREVIEW_WORDS_LIMIT = 3000
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/files/upload")
|
||||||
class FileApi(Resource):
|
class FileApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -88,6 +91,7 @@ class FileApi(Resource):
|
|||||||
return upload_file, 201
|
return upload_file, 201
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/files/<uuid:file_id>/preview")
|
||||||
class FilePreviewApi(Resource):
|
class FilePreviewApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -98,6 +102,7 @@ class FilePreviewApi(Resource):
|
|||||||
return {"content": text}
|
return {"content": text}
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/files/support-type")
|
||||||
class FileSupportTypeApi(Resource):
|
class FileSupportTypeApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
|
|||||||
@@ -19,7 +19,10 @@ from fields.file_fields import file_fields_with_signed_url, remote_file_info_fie
|
|||||||
from models.account import Account
|
from models.account import Account
|
||||||
from services.file_service import FileService
|
from services.file_service import FileService
|
||||||
|
|
||||||
|
from . import console_ns
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/remote-files/<path:url>")
|
||||||
class RemoteFileInfoApi(Resource):
|
class RemoteFileInfoApi(Resource):
|
||||||
@marshal_with(remote_file_info_fields)
|
@marshal_with(remote_file_info_fields)
|
||||||
def get(self, url):
|
def get(self, url):
|
||||||
@@ -35,6 +38,7 @@ class RemoteFileInfoApi(Resource):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/remote-files/upload")
|
||||||
class RemoteFileUploadApi(Resource):
|
class RemoteFileUploadApi(Resource):
|
||||||
@marshal_with(file_fields_with_signed_url)
|
@marshal_with(file_fields_with_signed_url)
|
||||||
def post(self):
|
def post(self):
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import logging
|
|||||||
|
|
||||||
from flask_restx import Resource
|
from flask_restx import Resource
|
||||||
|
|
||||||
from controllers.console import api
|
|
||||||
from controllers.console.wraps import (
|
from controllers.console.wraps import (
|
||||||
account_initialization_required,
|
account_initialization_required,
|
||||||
setup_required,
|
setup_required,
|
||||||
@@ -10,9 +9,12 @@ from controllers.console.wraps import (
|
|||||||
from core.schemas.schema_manager import SchemaManager
|
from core.schemas.schema_manager import SchemaManager
|
||||||
from libs.login import login_required
|
from libs.login import login_required
|
||||||
|
|
||||||
|
from . import console_ns
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
@console_ns.route("/spec/schema-definitions")
|
||||||
class SpecSchemaDefinitionsApi(Resource):
|
class SpecSchemaDefinitionsApi(Resource):
|
||||||
@setup_required
|
@setup_required
|
||||||
@login_required
|
@login_required
|
||||||
@@ -30,6 +32,3 @@ class SpecSchemaDefinitionsApi(Resource):
|
|||||||
logger.exception("Failed to get schema definitions from local registry")
|
logger.exception("Failed to get schema definitions from local registry")
|
||||||
# Return empty array as fallback
|
# Return empty array as fallback
|
||||||
return [], 200
|
return [], 200
|
||||||
|
|
||||||
|
|
||||||
api.add_resource(SpecSchemaDefinitionsApi, "/spec/schema-definitions")
|
|
||||||
|
|||||||
Reference in New Issue
Block a user