mirror of
https://github.com/langgenius/dify.git
synced 2026-10-04 13:47:55 +08:00
refactor(api): use HTTPStatus throughout Explore controllers (#42891)
This commit is contained in:
12 files changed
+89
-72
No files matched your search
@@ -3,6 +3,7 @@
|
||||
import logging
|
||||
from collections.abc import Callable
|
||||
from functools import wraps
|
||||
from http import HTTPStatus
|
||||
|
||||
from flask import Response, request
|
||||
from flask_restx import Resource
|
||||
@@ -97,7 +98,7 @@ def _audio_errors[**P, R](view: Callable[P, R]) -> Callable[P, R]:
|
||||
endpoint="installed_app_audio",
|
||||
)
|
||||
class ChatAudioApi(Resource):
|
||||
@console_ns.response(200, "Success", console_ns.models[AudioTranscriptResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[AudioTranscriptResponse.__name__])
|
||||
@console_account_admission()
|
||||
@get_installed_app
|
||||
@_audio_errors
|
||||
@@ -121,7 +122,7 @@ class ChatAudioApi(Resource):
|
||||
)
|
||||
class ChatTextApi(Resource):
|
||||
@console_ns.expect(console_ns.models[TextToAudioPayload.__name__])
|
||||
@console_ns.response(200, "Success", console_ns.models[AudioBinaryResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[AudioBinaryResponse.__name__])
|
||||
@console_account_admission()
|
||||
@get_installed_app
|
||||
@model_validate(TextToAudioPayload)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
from datetime import datetime
|
||||
from http import HTTPStatus
|
||||
from typing import cast
|
||||
|
||||
from flask_restx import Namespace, Resource
|
||||
@@ -60,7 +61,7 @@ class BannerApi(Resource):
|
||||
"""Resource for banner list."""
|
||||
|
||||
@api.doc(params=query_params_from_model(BannerListQuery))
|
||||
@api.response(200, "Success", api.models[BannerListResponse.__name__])
|
||||
@api.response(HTTPStatus.OK, "Success", api.models[BannerListResponse.__name__])
|
||||
@model_validate(BannerListQuery)
|
||||
def get(self, req_data: BannerListQuery):
|
||||
"""Get banner list."""
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import logging
|
||||
from http import HTTPStatus
|
||||
from typing import Any, Literal
|
||||
from uuid import UUID
|
||||
|
||||
@@ -87,7 +88,7 @@ register_response_schema_models(console_ns, SimpleResultResponse)
|
||||
)
|
||||
class CompletionApi(Resource):
|
||||
@console_ns.expect(console_ns.models[CompletionMessageExplorePayload.__name__])
|
||||
@console_ns.response(200, "Success")
|
||||
@console_ns.response(HTTPStatus.OK, "Success")
|
||||
@console_account_admission()
|
||||
@get_installed_app
|
||||
@model_validate(CompletionMessageExplorePayload)
|
||||
@@ -141,7 +142,7 @@ class CompletionApi(Resource):
|
||||
endpoint="installed_app_stop_completion",
|
||||
)
|
||||
class CompletionStopApi(Resource):
|
||||
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[SimpleResultResponse.__name__])
|
||||
@console_account_admission()
|
||||
@get_installed_app
|
||||
def post(
|
||||
@@ -158,7 +159,7 @@ class CompletionStopApi(Resource):
|
||||
app_mode=AppMode.value_of(app_mode),
|
||||
)
|
||||
|
||||
return SimpleResultResponse(result="success").model_dump(mode="json"), 200
|
||||
return SimpleResultResponse(result="success").model_dump(mode="json"), HTTPStatus.OK
|
||||
|
||||
|
||||
@console_ns.route(
|
||||
@@ -167,7 +168,7 @@ class CompletionStopApi(Resource):
|
||||
)
|
||||
class ChatApi(Resource):
|
||||
@console_ns.expect(console_ns.models[ChatMessagePayload.__name__])
|
||||
@console_ns.response(200, "Success")
|
||||
@console_ns.response(HTTPStatus.OK, "Success")
|
||||
@console_account_admission()
|
||||
@get_installed_app
|
||||
@model_validate(ChatMessagePayload)
|
||||
@@ -223,7 +224,7 @@ class ChatApi(Resource):
|
||||
endpoint="installed_app_stop_chat_completion",
|
||||
)
|
||||
class ChatStopApi(Resource):
|
||||
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[SimpleResultResponse.__name__])
|
||||
@console_account_admission()
|
||||
@get_installed_app
|
||||
def post(
|
||||
@@ -240,4 +241,4 @@ class ChatStopApi(Resource):
|
||||
app_mode=app_mode,
|
||||
)
|
||||
|
||||
return SimpleResultResponse(result="success").model_dump(mode="json"), 200
|
||||
return SimpleResultResponse(result="success").model_dump(mode="json"), HTTPStatus.OK
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
from collections.abc import Callable
|
||||
from functools import wraps
|
||||
from http import HTTPStatus
|
||||
from uuid import UUID
|
||||
|
||||
from flask_restx import Resource
|
||||
@@ -84,7 +85,7 @@ def _conversation_errors[**P, R](view: Callable[P, R]) -> Callable[P, R]:
|
||||
@console_ns.route("/installed-apps/<uuid:installed_app_id>/conversations", endpoint="installed_app_conversations")
|
||||
class ConversationListApi(Resource):
|
||||
@console_ns.doc(params=query_params_from_model(ConversationListQuery))
|
||||
@console_ns.response(200, "Success", console_ns.models[ConversationInfiniteScrollPagination.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[ConversationInfiniteScrollPagination.__name__])
|
||||
@console_account_admission()
|
||||
@get_installed_app
|
||||
@model_validate(ConversationListQuery)
|
||||
@@ -106,7 +107,7 @@ class ConversationListApi(Resource):
|
||||
"/installed-apps/<uuid:installed_app_id>/conversations/<uuid:c_id>", endpoint="installed_app_conversation"
|
||||
)
|
||||
class ConversationApi(Resource):
|
||||
@console_ns.response(204, "Conversation deleted successfully")
|
||||
@console_ns.response(HTTPStatus.NO_CONTENT, "Conversation deleted successfully")
|
||||
@console_account_admission()
|
||||
@get_installed_app
|
||||
@_conversation_errors
|
||||
@@ -114,7 +115,7 @@ class ConversationApi(Resource):
|
||||
application_services().installed_apps.conversations.delete(
|
||||
installed_app=installed_app, account_id=request_context.account_id, conversation_id=str(c_id)
|
||||
)
|
||||
return "", 204
|
||||
return "", HTTPStatus.NO_CONTENT
|
||||
|
||||
|
||||
@console_ns.route(
|
||||
@@ -123,7 +124,9 @@ class ConversationApi(Resource):
|
||||
)
|
||||
class ConversationRenameApi(Resource):
|
||||
@console_ns.expect(console_ns.models[ConversationRenamePayload.__name__])
|
||||
@console_ns.response(200, "Conversation renamed successfully", console_ns.models[SimpleConversation.__name__])
|
||||
@console_ns.response(
|
||||
HTTPStatus.OK, "Conversation renamed successfully", console_ns.models[SimpleConversation.__name__]
|
||||
)
|
||||
@console_account_admission()
|
||||
@get_installed_app
|
||||
@model_validate(ConversationRenamePayload)
|
||||
@@ -149,7 +152,7 @@ class ConversationRenameApi(Resource):
|
||||
"/installed-apps/<uuid:installed_app_id>/conversations/<uuid:c_id>/pin", endpoint="installed_app_conversation_pin"
|
||||
)
|
||||
class ConversationPinApi(Resource):
|
||||
@console_ns.response(200, "Success", console_ns.models[ResultResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[ResultResponse.__name__])
|
||||
@console_account_admission()
|
||||
@get_installed_app
|
||||
@_conversation_errors
|
||||
@@ -168,7 +171,7 @@ class ConversationPinApi(Resource):
|
||||
endpoint="installed_app_conversation_unpin",
|
||||
)
|
||||
class ConversationUnPinApi(Resource):
|
||||
@console_ns.response(200, "Success", console_ns.models[ResultResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[ResultResponse.__name__])
|
||||
@console_account_admission()
|
||||
@get_installed_app
|
||||
@_conversation_errors
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
from http import HTTPStatus
|
||||
|
||||
from core.logging.context import get_request_id
|
||||
from libs.exception import BaseHTTPException
|
||||
|
||||
@@ -14,115 +16,115 @@ class InstalledAppHTTPError(BaseHTTPException):
|
||||
class InstalledAppNotFoundHTTPError(InstalledAppHTTPError):
|
||||
error_code = "installed_app_not_found"
|
||||
description = "The app was not found in this workspace."
|
||||
code = 404
|
||||
code = HTTPStatus.NOT_FOUND
|
||||
|
||||
|
||||
class InstalledAppUnavailableHTTPError(InstalledAppHTTPError):
|
||||
error_code = "installed_app_unavailable"
|
||||
description = "The app is not available in this app library."
|
||||
code = 404
|
||||
code = HTTPStatus.NOT_FOUND
|
||||
|
||||
|
||||
class InstalledAppInvalidCursorError(InstalledAppHTTPError):
|
||||
error_code = "invalid_cursor"
|
||||
description = "The app list cursor is invalid. Refresh the list and try again."
|
||||
code = 400
|
||||
code = HTTPStatus.BAD_REQUEST
|
||||
|
||||
|
||||
class WebAppAccessUnavailableHTTPError(InstalledAppHTTPError):
|
||||
error_code = "web_app_access_unavailable"
|
||||
description = "The app access service is unavailable. Try again later."
|
||||
code = 503
|
||||
code = HTTPStatus.SERVICE_UNAVAILABLE
|
||||
|
||||
|
||||
class ConversationNotFoundHTTPError(InstalledAppHTTPError):
|
||||
error_code = "conversation_not_found"
|
||||
description = "The conversation was not found for this account and app."
|
||||
code = 404
|
||||
code = HTTPStatus.NOT_FOUND
|
||||
|
||||
|
||||
class ConversationCursorNotFoundHTTPError(InstalledAppHTTPError):
|
||||
error_code = "conversation_cursor_not_found"
|
||||
description = "The conversation cursor is not in the current list. Refresh the list and try again."
|
||||
code = 404
|
||||
code = HTTPStatus.NOT_FOUND
|
||||
|
||||
|
||||
class ConversationFirstMessageNotFoundHTTPError(InstalledAppHTTPError):
|
||||
error_code = "conversation_first_message_not_found"
|
||||
description = "The conversation has no message from which to generate a name."
|
||||
code = 404
|
||||
code = HTTPStatus.NOT_FOUND
|
||||
|
||||
|
||||
class ConversationNameRequiredHTTPError(InstalledAppHTTPError):
|
||||
error_code = "conversation_name_required"
|
||||
description = "A name is required when automatic naming is disabled."
|
||||
code = 400
|
||||
code = HTTPStatus.BAD_REQUEST
|
||||
|
||||
|
||||
class MessageNotFoundHTTPError(InstalledAppHTTPError):
|
||||
error_code = "message_not_found"
|
||||
description = "The message was not found for this account and app."
|
||||
code = 404
|
||||
code = HTTPStatus.NOT_FOUND
|
||||
|
||||
|
||||
class MessageCursorNotFoundHTTPError(InstalledAppHTTPError):
|
||||
error_code = "message_cursor_not_found"
|
||||
description = "The message cursor is not in this conversation. Refresh the list and try again."
|
||||
code = 404
|
||||
code = HTTPStatus.NOT_FOUND
|
||||
|
||||
|
||||
class MessageFeedbackRatingRequiredHTTPError(InstalledAppHTTPError):
|
||||
error_code = "message_feedback_rating_required"
|
||||
description = "A rating is required when there is no existing feedback to remove."
|
||||
code = 400
|
||||
code = HTTPStatus.BAD_REQUEST
|
||||
|
||||
|
||||
class NotCompletionAppError(BaseHTTPException):
|
||||
error_code = "not_completion_app"
|
||||
description = "Not Completion App"
|
||||
code = 400
|
||||
code = HTTPStatus.BAD_REQUEST
|
||||
|
||||
|
||||
class NotChatAppError(BaseHTTPException):
|
||||
error_code = "not_chat_app"
|
||||
description = "App mode is invalid."
|
||||
code = 400
|
||||
code = HTTPStatus.BAD_REQUEST
|
||||
|
||||
|
||||
class NotWorkflowAppError(BaseHTTPException):
|
||||
error_code = "not_workflow_app"
|
||||
description = "Only support workflow app."
|
||||
code = 400
|
||||
code = HTTPStatus.BAD_REQUEST
|
||||
|
||||
|
||||
class AppSuggestedQuestionsAfterAnswerDisabledError(BaseHTTPException):
|
||||
error_code = "app_suggested_questions_after_answer_disabled"
|
||||
description = "Function Suggested questions after answer disabled."
|
||||
code = 403
|
||||
code = HTTPStatus.FORBIDDEN
|
||||
|
||||
|
||||
class AppAccessDeniedError(BaseHTTPException):
|
||||
error_code = "access_denied"
|
||||
description = "App access denied."
|
||||
code = 403
|
||||
code = HTTPStatus.FORBIDDEN
|
||||
|
||||
|
||||
class RecommendedAppNotFoundError(BaseHTTPException):
|
||||
error_code = "recommended_app_not_found"
|
||||
description = "Recommended app not found."
|
||||
code = 404
|
||||
code = HTTPStatus.NOT_FOUND
|
||||
|
||||
|
||||
class AppPreviewSiteUnavailableError(BaseHTTPException):
|
||||
error_code = "app_site_unavailable"
|
||||
description = "The app preview site is unavailable."
|
||||
code = 403
|
||||
code = HTTPStatus.FORBIDDEN
|
||||
|
||||
|
||||
class AppPreviewOwnerUnavailableError(BaseHTTPException):
|
||||
error_code = "app_owner_unavailable"
|
||||
description = "The app preview owner is unavailable."
|
||||
code = 403
|
||||
code = HTTPStatus.FORBIDDEN
|
||||
|
||||
|
||||
class TrialAppNotAllowed(BaseHTTPException):
|
||||
@@ -132,7 +134,7 @@ class TrialAppNotAllowed(BaseHTTPException):
|
||||
"""
|
||||
|
||||
error_code = "trial_app_not_allowed"
|
||||
code = 403
|
||||
code = HTTPStatus.FORBIDDEN
|
||||
description = "the app is not allowed to be trial."
|
||||
|
||||
|
||||
@@ -143,11 +145,11 @@ class TrialAppLimitExceeded(BaseHTTPException):
|
||||
"""
|
||||
|
||||
error_code = "trial_app_limit_exceeded"
|
||||
code = 403
|
||||
code = HTTPStatus.FORBIDDEN
|
||||
description = "The user has exceeded the trial app limit."
|
||||
|
||||
|
||||
class TrialAppFeatureDisabledError(BaseHTTPException):
|
||||
error_code = "trial_app_feature_disabled"
|
||||
code = 403
|
||||
code = HTTPStatus.FORBIDDEN
|
||||
description = "Trial app feature is not enabled."
|
||||
@@ -1,6 +1,7 @@
|
||||
import base64
|
||||
import binascii
|
||||
import logging
|
||||
from http import HTTPStatus
|
||||
|
||||
from flask_restx import Resource
|
||||
from pydantic import BaseModel, Field, computed_field
|
||||
@@ -139,7 +140,7 @@ register_response_schema_models(
|
||||
@console_ns.route("/installed-apps")
|
||||
class InstalledAppsListApi(Resource):
|
||||
@console_ns.doc(params=query_params_from_model(InstalledAppsListQuery))
|
||||
@console_ns.response(200, "Success", console_ns.models[InstalledAppListResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[InstalledAppListResponse.__name__])
|
||||
@console_account_admission()
|
||||
@model_validate(InstalledAppsListQuery)
|
||||
def get(self, query: InstalledAppsListQuery, request_context: RequestContext) -> dict[str, object]:
|
||||
@@ -184,7 +185,7 @@ class InstalledAppsListApi(Resource):
|
||||
class InstalledAppApi(Resource):
|
||||
"""Read or update an admitted workspace installation."""
|
||||
|
||||
@console_ns.response(200, "Success", console_ns.models[InstalledAppResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[InstalledAppResponse.__name__])
|
||||
@console_account_admission()
|
||||
@get_installed_app
|
||||
def get(
|
||||
@@ -208,7 +209,7 @@ class InstalledAppApi(Resource):
|
||||
),
|
||||
)
|
||||
|
||||
@console_ns.response(200, "Success", console_ns.models[SimpleResultMessageResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[SimpleResultMessageResponse.__name__])
|
||||
@console_ns.expect(console_ns.models[InstalledAppUpdatePayload.__name__])
|
||||
@console_account_admission()
|
||||
@get_installed_app
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
import logging
|
||||
from collections.abc import Callable
|
||||
from functools import wraps
|
||||
from http import HTTPStatus
|
||||
from typing import Literal
|
||||
from uuid import UUID
|
||||
|
||||
@@ -122,7 +123,7 @@ def _message_errors[**P, R](view: Callable[P, R]) -> Callable[P, R]:
|
||||
)
|
||||
class MessageListApi(Resource):
|
||||
@console_ns.doc(params=query_params_from_model(MessageListQuery))
|
||||
@console_ns.response(200, "Success", console_ns.models[ExploreMessageInfiniteScrollPagination.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[ExploreMessageInfiniteScrollPagination.__name__])
|
||||
@console_account_admission()
|
||||
@get_installed_app
|
||||
@model_validate(MessageListQuery)
|
||||
@@ -146,7 +147,7 @@ class MessageListApi(Resource):
|
||||
)
|
||||
class MessageFeedbackApi(Resource):
|
||||
@console_ns.expect(console_ns.models[MessageFeedbackPayload.__name__])
|
||||
@console_ns.response(200, "Feedback submitted successfully", console_ns.models[ResultResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Feedback submitted successfully", console_ns.models[ResultResponse.__name__])
|
||||
@console_account_admission()
|
||||
@get_installed_app
|
||||
@model_validate(MessageFeedbackPayload)
|
||||
@@ -174,7 +175,7 @@ class MessageFeedbackApi(Resource):
|
||||
)
|
||||
class MessageMoreLikeThisApi(Resource):
|
||||
@console_ns.doc(params=query_params_from_model(MoreLikeThisQuery))
|
||||
@console_ns.response(200, "Success")
|
||||
@console_ns.response(HTTPStatus.OK, "Success")
|
||||
@console_account_admission()
|
||||
@get_installed_app
|
||||
@model_validate(MoreLikeThisQuery)
|
||||
@@ -201,7 +202,7 @@ class MessageMoreLikeThisApi(Resource):
|
||||
endpoint="installed_app_suggested_question",
|
||||
)
|
||||
class MessageSuggestedQuestionApi(Resource):
|
||||
@console_ns.response(200, "Success", console_ns.models[SuggestedQuestionsResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[SuggestedQuestionsResponse.__name__])
|
||||
@console_account_admission()
|
||||
@get_installed_app
|
||||
@_message_errors
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
from http import HTTPStatus
|
||||
from typing import Any
|
||||
|
||||
from flask_restx import Resource
|
||||
@@ -32,7 +33,7 @@ register_response_schema_models(console_ns, Parameters, ExploreAppMetaResponse)
|
||||
class AppParameterApi(Resource):
|
||||
"""Resource for app variables."""
|
||||
|
||||
@console_ns.response(200, "Success", console_ns.models[Parameters.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[Parameters.__name__])
|
||||
@console_account_admission()
|
||||
@get_installed_app
|
||||
def get(self, request_context: RequestContext, installed_app: InstalledAppRef) -> dict[str, object]:
|
||||
@@ -47,7 +48,7 @@ class AppParameterApi(Resource):
|
||||
|
||||
@console_ns.route("/installed-apps/<uuid:installed_app_id>/meta", endpoint="installed_app_meta")
|
||||
class ExploreAppMetaApi(Resource):
|
||||
@console_ns.response(200, "Success", console_ns.models[ExploreAppMetaResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[ExploreAppMetaResponse.__name__])
|
||||
@console_account_admission()
|
||||
@get_installed_app
|
||||
def get(self, request_context: RequestContext, installed_app: InstalledAppRef) -> dict[str, object]:
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
from http import HTTPStatus
|
||||
from typing import Any
|
||||
from uuid import UUID
|
||||
|
||||
@@ -96,7 +97,7 @@ register_response_schema_models(
|
||||
@console_ns.route("/explore/apps")
|
||||
class RecommendedAppListApi(Resource):
|
||||
@console_ns.doc(params=query_params_from_model(RecommendedAppsQuery))
|
||||
@console_ns.response(200, "Success", console_ns.models[RecommendedAppListResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[RecommendedAppListResponse.__name__])
|
||||
@console_account_admission()
|
||||
@model_validate(RecommendedAppsQuery)
|
||||
def get(self, req_data: RecommendedAppsQuery, _request_context: RequestContext):
|
||||
@@ -111,7 +112,7 @@ class RecommendedAppListApi(Resource):
|
||||
@console_ns.route("/explore/apps/learn-dify")
|
||||
class LearnDifyAppListApi(Resource):
|
||||
@console_ns.doc(params=query_params_from_model(RecommendedAppsQuery))
|
||||
@console_ns.response(200, "Success", console_ns.models[LearnDifyAppListResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[LearnDifyAppListResponse.__name__])
|
||||
@console_account_admission()
|
||||
@model_validate(RecommendedAppsQuery)
|
||||
def get(self, req_data: RecommendedAppsQuery, _request_context: RequestContext):
|
||||
@@ -125,8 +126,8 @@ class LearnDifyAppListApi(Resource):
|
||||
|
||||
@console_ns.route("/explore/apps/<uuid:app_id>")
|
||||
class RecommendedAppApi(Resource):
|
||||
@console_ns.response(200, "Success", console_ns.models[RecommendedAppDetailResponse.__name__])
|
||||
@console_ns.response(404, "Recommended app not found")
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[RecommendedAppDetailResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.NOT_FOUND, "Recommended app not found")
|
||||
@console_account_admission()
|
||||
def get(self, _request_context: RequestContext, app_id: UUID):
|
||||
try:
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
from http import HTTPStatus
|
||||
from uuid import UUID
|
||||
|
||||
from flask_restx import Resource
|
||||
@@ -32,7 +33,7 @@ def _require_completion_app(installed_app: InstalledAppRef) -> str:
|
||||
@console_ns.route("/installed-apps/<uuid:installed_app_id>/saved-messages", endpoint="installed_app_saved_messages")
|
||||
class SavedMessageListApi(Resource):
|
||||
@console_ns.doc(params=query_params_from_model(SavedMessageListQuery))
|
||||
@console_ns.response(200, "Success", console_ns.models[SavedMessageInfiniteScrollPagination.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[SavedMessageInfiniteScrollPagination.__name__])
|
||||
@console_account_admission()
|
||||
@get_installed_app
|
||||
@model_validate(SavedMessageListQuery)
|
||||
@@ -52,7 +53,7 @@ class SavedMessageListApi(Resource):
|
||||
return dump_response(SavedMessageInfiniteScrollPagination, pagination)
|
||||
|
||||
@console_ns.expect(console_ns.models[SavedMessageCreatePayload.__name__])
|
||||
@console_ns.response(200, "Success", console_ns.models[ResultResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[ResultResponse.__name__])
|
||||
@console_account_admission()
|
||||
@get_installed_app
|
||||
@model_validate(SavedMessageCreatePayload)
|
||||
@@ -80,7 +81,7 @@ class SavedMessageListApi(Resource):
|
||||
"/installed-apps/<uuid:installed_app_id>/saved-messages/<uuid:message_id>", endpoint="installed_app_saved_message"
|
||||
)
|
||||
class SavedMessageApi(Resource):
|
||||
@console_ns.response(204, "Saved message deleted successfully")
|
||||
@console_ns.response(HTTPStatus.NO_CONTENT, "Saved message deleted successfully")
|
||||
@console_account_admission()
|
||||
@get_installed_app
|
||||
def delete(
|
||||
@@ -96,4 +97,4 @@ class SavedMessageApi(Resource):
|
||||
message_id=str(message_id),
|
||||
)
|
||||
|
||||
return "", 204
|
||||
return "", HTTPStatus.NO_CONTENT
|
||||
@@ -3,6 +3,7 @@ from collections.abc import Callable, Mapping
|
||||
from dataclasses import asdict
|
||||
from datetime import datetime
|
||||
from functools import wraps
|
||||
from http import HTTPStatus
|
||||
from typing import Any, Literal
|
||||
from uuid import UUID
|
||||
|
||||
@@ -460,7 +461,7 @@ simple_account_model = console_ns.models[TrialSimpleAccount.__name__]
|
||||
)
|
||||
class TrialAppFileUploadApi(Resource):
|
||||
@console_ns.doc(consumes=["multipart/form-data"], params=FILE_UPLOAD_PARAMS)
|
||||
@console_ns.response(201, "File uploaded successfully", console_ns.models[FileResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.CREATED, "File uploaded successfully", console_ns.models[FileResponse.__name__])
|
||||
@console_account_admission()
|
||||
@get_trial_app
|
||||
@cloud_edition_billing_resource_check("documents")
|
||||
@@ -470,7 +471,7 @@ class TrialAppFileUploadApi(Resource):
|
||||
request_context=request_context,
|
||||
resource_tenant_id=trial_app.tenant_id,
|
||||
)
|
||||
return dump_response(FileResponse, upload_file), 201
|
||||
return dump_response(FileResponse, upload_file), HTTPStatus.CREATED
|
||||
|
||||
|
||||
@console_ns.route(
|
||||
@@ -479,7 +480,9 @@ class TrialAppFileUploadApi(Resource):
|
||||
)
|
||||
class TrialAppRemoteFileUploadApi(Resource):
|
||||
@console_ns.expect(console_ns.models[RemoteFileUploadPayload.__name__])
|
||||
@console_ns.response(201, "File uploaded successfully", console_ns.models[FileWithSignedUrl.__name__])
|
||||
@console_ns.response(
|
||||
HTTPStatus.CREATED, "File uploaded successfully", console_ns.models[FileWithSignedUrl.__name__]
|
||||
)
|
||||
@console_account_admission()
|
||||
@get_trial_app
|
||||
@cloud_edition_billing_resource_check("documents")
|
||||
@@ -493,7 +496,7 @@ class TrialAppRemoteFileUploadApi(Resource):
|
||||
current_user=FileUploadActor(id=request_context.account_id, creator_role=CreatorUserRole.ACCOUNT),
|
||||
resource_tenant_id=trial_app.tenant_id,
|
||||
)
|
||||
return dump_response(FileWithSignedUrl, remote_file), 201
|
||||
return dump_response(FileWithSignedUrl, remote_file), HTTPStatus.CREATED
|
||||
|
||||
|
||||
@console_ns.route(
|
||||
@@ -502,7 +505,7 @@ class TrialAppRemoteFileUploadApi(Resource):
|
||||
)
|
||||
class TrialAppWorkflowRunApi(Resource):
|
||||
@console_ns.expect(console_ns.models[WorkflowRunRequest.__name__])
|
||||
@console_ns.response(200, "Success")
|
||||
@console_ns.response(HTTPStatus.OK, "Success")
|
||||
@console_account_admission()
|
||||
@get_trial_app
|
||||
@model_validate(WorkflowRunRequest)
|
||||
@@ -545,7 +548,7 @@ class TrialAppWorkflowRunApi(Resource):
|
||||
|
||||
@console_ns.route("/trial-apps/<uuid:app_id>/workflows/tasks/<string:task_id>/stop")
|
||||
class TrialAppWorkflowTaskStopApi(Resource):
|
||||
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[SimpleResultResponse.__name__])
|
||||
@console_account_admission()
|
||||
@get_trial_app
|
||||
def post(self, request_context: RequestContext, trial_app: TrialAppRef, task_id: str) -> dict[str, object]:
|
||||
@@ -566,7 +569,7 @@ class TrialAppWorkflowTaskStopApi(Resource):
|
||||
)
|
||||
class TrialChatApi(Resource):
|
||||
@console_ns.expect(console_ns.models[ChatRequest.__name__])
|
||||
@console_ns.response(200, "Success")
|
||||
@console_ns.response(HTTPStatus.OK, "Success")
|
||||
@console_account_admission()
|
||||
@get_trial_app
|
||||
@model_validate(ChatRequest)
|
||||
@@ -622,7 +625,7 @@ class TrialChatApi(Resource):
|
||||
endpoint="trial_app_suggested_question",
|
||||
)
|
||||
class TrialMessageSuggestedQuestionApi(Resource):
|
||||
@console_ns.response(200, "Success", console_ns.models[SuggestedQuestionsResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[SuggestedQuestionsResponse.__name__])
|
||||
@console_account_admission()
|
||||
@get_trial_app
|
||||
def get(self, request_context: RequestContext, trial_app: TrialAppRef, message_id: UUID) -> dict[str, object]:
|
||||
@@ -701,7 +704,7 @@ def _trial_audio_errors[**P, R](view: Callable[P, R]) -> Callable[P, R]:
|
||||
endpoint="trial_app_audio",
|
||||
)
|
||||
class TrialChatAudioApi(Resource):
|
||||
@console_ns.response(200, "Success", console_ns.models[AudioTranscriptResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[AudioTranscriptResponse.__name__])
|
||||
@console_account_admission()
|
||||
@get_trial_app
|
||||
@_trial_audio_errors
|
||||
@@ -722,7 +725,7 @@ class TrialChatAudioApi(Resource):
|
||||
)
|
||||
class TrialChatTextApi(Resource):
|
||||
@console_ns.expect(console_ns.models[TextToSpeechRequest.__name__])
|
||||
@console_ns.response(200, "Success", console_ns.models[AudioBinaryResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[AudioBinaryResponse.__name__])
|
||||
@console_account_admission()
|
||||
@get_trial_app
|
||||
@model_validate(TextToSpeechRequest)
|
||||
@@ -758,7 +761,7 @@ class TrialChatTextApi(Resource):
|
||||
)
|
||||
class TrialCompletionApi(Resource):
|
||||
@console_ns.expect(console_ns.models[CompletionRequest.__name__])
|
||||
@console_ns.response(200, "Success")
|
||||
@console_ns.response(HTTPStatus.OK, "Success")
|
||||
@console_account_admission()
|
||||
@get_trial_app
|
||||
@model_validate(CompletionRequest)
|
||||
@@ -805,7 +808,7 @@ class TrialCompletionApi(Resource):
|
||||
class TrialSitApi(Resource):
|
||||
"""Resource for trial app sites."""
|
||||
|
||||
@console_ns.response(200, "Success", console_ns.models[SiteResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[SiteResponse.__name__])
|
||||
@get_preview_app
|
||||
def get(self, app: AppPreviewRef) -> dict[str, object]:
|
||||
"""Retrieve app site info.
|
||||
@@ -828,7 +831,7 @@ class TrialSitApi(Resource):
|
||||
class TrialAppParameterApi(Resource):
|
||||
"""Resource for app variables."""
|
||||
|
||||
@console_ns.response(200, "Success", console_ns.models[ParametersResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[ParametersResponse.__name__])
|
||||
@get_preview_app
|
||||
def get(self, app: AppPreviewRef) -> dict[str, object]:
|
||||
"""Retrieve app parameters."""
|
||||
@@ -843,7 +846,7 @@ class TrialAppParameterApi(Resource):
|
||||
|
||||
@console_ns.route("/trial-apps/<uuid:app_id>", endpoint="trial_app")
|
||||
class AppApi(Resource):
|
||||
@console_ns.response(200, "Success", console_ns.models[TrialAppDetailResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[TrialAppDetailResponse.__name__])
|
||||
@console_account_admission()
|
||||
@get_preview_app
|
||||
def get(self, app: AppPreviewRef, request_context: RequestContext) -> dict[str, object]:
|
||||
@@ -877,7 +880,7 @@ class AppApi(Resource):
|
||||
endpoint="trial_app_workflow",
|
||||
)
|
||||
class AppWorkflowApi(Resource):
|
||||
@console_ns.response(200, "Success", console_ns.models[TrialWorkflowResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[TrialWorkflowResponse.__name__])
|
||||
@get_preview_app
|
||||
def get(self, app: AppPreviewRef) -> dict[str, object]:
|
||||
"""Get a detached workflow definition after catalog preview admission."""
|
||||
@@ -896,7 +899,7 @@ class AppWorkflowApi(Resource):
|
||||
)
|
||||
class DatasetListApi(Resource):
|
||||
@console_ns.doc(params=query_params_from_model(TrialDatasetListQuery))
|
||||
@console_ns.response(200, "Success", console_ns.models[TrialDatasetListResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[TrialDatasetListResponse.__name__])
|
||||
@get_preview_app
|
||||
def get(self, app: AppPreviewRef) -> dict[str, object]:
|
||||
# These legacy fields are response metadata: the query returns all
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import logging
|
||||
from http import HTTPStatus
|
||||
|
||||
from flask import Response
|
||||
from flask_restx import Resource
|
||||
@@ -44,7 +45,7 @@ register_response_schema_models(console_ns, SimpleResultResponse)
|
||||
@console_ns.route("/installed-apps/<uuid:installed_app_id>/workflows/run")
|
||||
class InstalledAppWorkflowRunApi(Resource):
|
||||
@console_ns.expect(console_ns.models[WorkflowRunPayload.__name__])
|
||||
@console_ns.response(200, "Success")
|
||||
@console_ns.response(HTTPStatus.OK, "Success")
|
||||
@console_account_admission()
|
||||
@get_installed_app
|
||||
@model_validate(WorkflowRunPayload)
|
||||
@@ -89,7 +90,7 @@ class InstalledAppWorkflowRunApi(Resource):
|
||||
|
||||
@console_ns.route("/installed-apps/<uuid:installed_app_id>/workflows/tasks/<string:task_id>/stop")
|
||||
class InstalledAppWorkflowTaskStopApi(Resource):
|
||||
@console_ns.response(200, "Success", console_ns.models[SimpleResultResponse.__name__])
|
||||
@console_ns.response(HTTPStatus.OK, "Success", console_ns.models[SimpleResultResponse.__name__])
|
||||
@console_account_admission()
|
||||
@get_installed_app
|
||||
def post(self, request_context: RequestContext, installed_app: InstalledAppRef, task_id: str) -> dict[str, object]:
|
||||
|
||||
Reference in new issue
Block a user