2023-11-16 05:16:27 +00:00
|
|
|
|
# coding=utf-8
|
|
|
|
|
|
"""
|
|
|
|
|
|
@project: maxkb
|
|
|
|
|
|
@Author:虎
|
|
|
|
|
|
@file: application_views.py
|
|
|
|
|
|
@date:2023/10/27 14:56
|
|
|
|
|
|
@desc:
|
|
|
|
|
|
"""
|
2024-03-13 08:07:13 +00:00
|
|
|
|
|
2024-07-01 01:45:59 +00:00
|
|
|
|
from django.core import cache
|
2024-03-01 06:25:56 +00:00
|
|
|
|
from django.http import HttpResponse
|
2025-03-19 07:45:10 +00:00
|
|
|
|
from django.utils.translation import gettext_lazy as _, gettext
|
2023-11-16 05:16:27 +00:00
|
|
|
|
from drf_yasg.utils import swagger_auto_schema
|
2025-03-19 07:45:10 +00:00
|
|
|
|
from langchain_core.prompts import PromptTemplate
|
2023-11-16 05:16:27 +00:00
|
|
|
|
from rest_framework.decorators import action
|
2024-04-23 11:03:34 +00:00
|
|
|
|
from rest_framework.parsers import MultiPartParser
|
2023-11-16 05:16:27 +00:00
|
|
|
|
from rest_framework.request import Request
|
|
|
|
|
|
from rest_framework.views import APIView
|
|
|
|
|
|
|
|
|
|
|
|
from application.serializers.application_serializers import ApplicationSerializer
|
2024-03-27 09:25:37 +00:00
|
|
|
|
from application.serializers.application_statistics_serializers import ApplicationStatisticsSerializer
|
2023-11-16 05:16:27 +00:00
|
|
|
|
from application.swagger_api.application_api import ApplicationApi
|
2024-03-27 09:25:37 +00:00
|
|
|
|
from application.swagger_api.application_statistics_api import ApplicationStatisticsApi
|
2023-11-16 05:16:27 +00:00
|
|
|
|
from common.auth import TokenAuth, has_permissions
|
|
|
|
|
|
from common.constants.permission_constants import CompareConstants, PermissionConstants, Permission, Group, Operate, \
|
|
|
|
|
|
ViewPermission, RoleConstants
|
|
|
|
|
|
from common.exception.app_exception import AppAuthenticationFailed
|
2025-03-17 03:03:17 +00:00
|
|
|
|
from common.log.log import log
|
2023-11-16 05:16:27 +00:00
|
|
|
|
from common.response import result
|
2023-12-25 09:10:59 +00:00
|
|
|
|
from common.swagger_api.common_api import CommonApi
|
2024-03-13 13:50:57 +00:00
|
|
|
|
from common.util.common import query_params_to_single_dict
|
2023-11-16 05:16:27 +00:00
|
|
|
|
from dataset.serializers.dataset_serializers import DataSetSerializers
|
|
|
|
|
|
|
2024-07-25 02:41:38 +00:00
|
|
|
|
chat_cache = cache.caches['chat_cache']
|
2024-07-01 01:45:59 +00:00
|
|
|
|
|
2023-11-16 05:16:27 +00:00
|
|
|
|
|
2024-03-27 09:25:37 +00:00
|
|
|
|
class ApplicationStatistics(APIView):
|
|
|
|
|
|
class CustomerCount(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods=["GET"], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("User Statistics"),
|
|
|
|
|
|
operation_id=_("User Statistics"),
|
|
|
|
|
|
tags=[_("Application/Statistics")],
|
2024-03-27 09:25:37 +00:00
|
|
|
|
manual_parameters=ApplicationStatisticsApi.get_request_params_api(),
|
|
|
|
|
|
responses=result.get_api_response(
|
|
|
|
|
|
ApplicationStatisticsApi.CustomerCount.get_response_body_api())
|
|
|
|
|
|
)
|
|
|
|
|
|
@has_permissions(ViewPermission(
|
|
|
|
|
|
[RoleConstants.ADMIN, RoleConstants.USER],
|
|
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
|
|
|
|
|
dynamic_tag=keywords.get('application_id'))],
|
|
|
|
|
|
compare=CompareConstants.AND))
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="User Statistics")
|
2024-03-27 09:25:37 +00:00
|
|
|
|
def get(self, request: Request, application_id: str):
|
|
|
|
|
|
return result.success(
|
|
|
|
|
|
ApplicationStatisticsSerializer(data={'application_id': application_id,
|
2024-03-28 08:06:54 +00:00
|
|
|
|
'start_time': request.query_params.get(
|
|
|
|
|
|
'start_time'),
|
|
|
|
|
|
'end_time': request.query_params.get(
|
|
|
|
|
|
'end_time')
|
|
|
|
|
|
}).get_customer_count())
|
2024-03-27 09:25:37 +00:00
|
|
|
|
|
|
|
|
|
|
class CustomerCountTrend(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods=["GET"], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("User demographic trends"),
|
|
|
|
|
|
operation_id=_("User demographic trends"),
|
|
|
|
|
|
tags=[_("Application/Statistics")],
|
2024-03-27 09:25:37 +00:00
|
|
|
|
manual_parameters=ApplicationStatisticsApi.get_request_params_api(),
|
|
|
|
|
|
responses=result.get_api_array_response(
|
|
|
|
|
|
ApplicationStatisticsApi.CustomerCountTrend.get_response_body_api()))
|
|
|
|
|
|
@has_permissions(ViewPermission(
|
|
|
|
|
|
[RoleConstants.ADMIN, RoleConstants.USER],
|
|
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
|
|
|
|
|
dynamic_tag=keywords.get('application_id'))],
|
|
|
|
|
|
compare=CompareConstants.AND))
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="User demographic trends")
|
2024-03-27 09:25:37 +00:00
|
|
|
|
def get(self, request: Request, application_id: str):
|
|
|
|
|
|
return result.success(
|
|
|
|
|
|
ApplicationStatisticsSerializer(data={'application_id': application_id,
|
2024-03-28 08:06:54 +00:00
|
|
|
|
'start_time': request.query_params.get(
|
|
|
|
|
|
'start_time'),
|
|
|
|
|
|
'end_time': request.query_params.get(
|
|
|
|
|
|
'end_time')
|
|
|
|
|
|
}).get_customer_count_trend())
|
2024-03-27 09:25:37 +00:00
|
|
|
|
|
|
|
|
|
|
class ChatRecordAggregate(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods=["GET"], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Conversation statistics"),
|
|
|
|
|
|
operation_id=_("Conversation statistics"),
|
|
|
|
|
|
tags=[_("Application/Statistics")],
|
2024-03-27 09:25:37 +00:00
|
|
|
|
manual_parameters=ApplicationStatisticsApi.get_request_params_api(),
|
|
|
|
|
|
responses=result.get_api_response(
|
|
|
|
|
|
ApplicationStatisticsApi.ChatRecordAggregate.get_response_body_api())
|
|
|
|
|
|
)
|
|
|
|
|
|
@has_permissions(ViewPermission(
|
|
|
|
|
|
[RoleConstants.ADMIN, RoleConstants.USER],
|
|
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
|
|
|
|
|
dynamic_tag=keywords.get('application_id'))],
|
|
|
|
|
|
compare=CompareConstants.AND))
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Conversation statistics")
|
2024-03-27 09:25:37 +00:00
|
|
|
|
def get(self, request: Request, application_id: str):
|
|
|
|
|
|
return result.success(
|
|
|
|
|
|
ApplicationStatisticsSerializer(data={'application_id': application_id,
|
2024-03-28 08:06:54 +00:00
|
|
|
|
'start_time': request.query_params.get(
|
|
|
|
|
|
'start_time'),
|
|
|
|
|
|
'end_time': request.query_params.get(
|
|
|
|
|
|
'end_time')
|
|
|
|
|
|
}).get_chat_record_aggregate())
|
2024-03-27 09:25:37 +00:00
|
|
|
|
|
|
|
|
|
|
class ChatRecordAggregateTrend(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods=["GET"], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Dialogue-related statistical trends"),
|
|
|
|
|
|
operation_id=_("Dialogue-related statistical trends"),
|
|
|
|
|
|
tags=[_("Application/Statistics")],
|
2024-03-27 09:25:37 +00:00
|
|
|
|
manual_parameters=ApplicationStatisticsApi.get_request_params_api(),
|
|
|
|
|
|
responses=result.get_api_array_response(
|
|
|
|
|
|
ApplicationStatisticsApi.ChatRecordAggregate.get_response_body_api())
|
|
|
|
|
|
)
|
|
|
|
|
|
@has_permissions(ViewPermission(
|
|
|
|
|
|
[RoleConstants.ADMIN, RoleConstants.USER],
|
|
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
|
|
|
|
|
dynamic_tag=keywords.get('application_id'))],
|
|
|
|
|
|
compare=CompareConstants.AND))
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Dialogue-related statistical trends")
|
2024-03-27 09:25:37 +00:00
|
|
|
|
def get(self, request: Request, application_id: str):
|
|
|
|
|
|
return result.success(
|
|
|
|
|
|
ApplicationStatisticsSerializer(data={'application_id': application_id,
|
2024-03-28 08:06:54 +00:00
|
|
|
|
'start_time': request.query_params.get(
|
|
|
|
|
|
'start_time'),
|
|
|
|
|
|
'end_time': request.query_params.get(
|
|
|
|
|
|
'end_time')
|
|
|
|
|
|
}).get_chat_record_aggregate_trend())
|
2024-03-27 09:25:37 +00:00
|
|
|
|
|
|
|
|
|
|
|
2023-11-16 05:16:27 +00:00
|
|
|
|
class Application(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
2024-04-23 11:03:34 +00:00
|
|
|
|
class EditIcon(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
parser_classes = [MultiPartParser]
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods=['PUT'], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Modify application icon"),
|
|
|
|
|
|
operation_id=_("Modify application icon"),
|
|
|
|
|
|
tags=[_('Application')],
|
2024-04-23 11:03:34 +00:00
|
|
|
|
manual_parameters=ApplicationApi.EditApplicationIcon.get_request_params_api(),
|
|
|
|
|
|
request_body=ApplicationApi.Operate.get_request_body_api())
|
|
|
|
|
|
@has_permissions(ViewPermission(
|
|
|
|
|
|
[RoleConstants.ADMIN, RoleConstants.USER],
|
|
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.MANAGE,
|
|
|
|
|
|
dynamic_tag=keywords.get('application_id'))],
|
|
|
|
|
|
compare=CompareConstants.AND), PermissionConstants.APPLICATION_EDIT,
|
|
|
|
|
|
compare=CompareConstants.AND)
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Modify application icon")
|
2024-04-23 11:03:34 +00:00
|
|
|
|
def put(self, request: Request, application_id: str):
|
|
|
|
|
|
return result.success(
|
|
|
|
|
|
ApplicationSerializer.IconOperate(
|
|
|
|
|
|
data={'application_id': application_id, 'user_id': request.user.id,
|
|
|
|
|
|
'image': request.FILES.get('file')}).edit(request.data))
|
|
|
|
|
|
|
2024-12-16 06:19:57 +00:00
|
|
|
|
class Import(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
parser_classes = [MultiPartParser]
|
|
|
|
|
|
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@action(methods="POST", detail=False)
|
|
|
|
|
|
@swagger_auto_schema(operation_summary=_("Import Application"), operation_id=_("Import Application"),
|
2024-12-16 06:19:57 +00:00
|
|
|
|
manual_parameters=ApplicationApi.Import.get_request_params_api(),
|
2025-01-13 11:05:08 +00:00
|
|
|
|
tags=[_("Application")]
|
2024-12-16 06:19:57 +00:00
|
|
|
|
)
|
|
|
|
|
|
@has_permissions(RoleConstants.ADMIN, RoleConstants.USER)
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Import Application")
|
2024-12-16 06:19:57 +00:00
|
|
|
|
def post(self, request: Request):
|
|
|
|
|
|
return result.success(ApplicationSerializer.Import(
|
|
|
|
|
|
data={'user_id': request.user.id, 'file': request.FILES.get('file')}).import_())
|
|
|
|
|
|
|
|
|
|
|
|
class Export(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods="GET", detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Export Application"), operation_id=_("Export Application"),
|
2024-12-16 06:19:57 +00:00
|
|
|
|
manual_parameters=ApplicationApi.Export.get_request_params_api(),
|
2025-01-13 11:05:08 +00:00
|
|
|
|
tags=[_("Application")]
|
2024-12-16 06:19:57 +00:00
|
|
|
|
)
|
|
|
|
|
|
@has_permissions(lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.MANAGE,
|
|
|
|
|
|
dynamic_tag=keywords.get('application_id')))
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Export Application")
|
2024-12-16 06:19:57 +00:00
|
|
|
|
def get(self, request: Request, application_id: str):
|
|
|
|
|
|
return ApplicationSerializer.Operate(
|
|
|
|
|
|
data={'application_id': application_id, 'user_id': request.user.id}).export()
|
|
|
|
|
|
|
2024-03-13 08:07:13 +00:00
|
|
|
|
class Embed(APIView):
|
|
|
|
|
|
@action(methods=["GET"], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Get embedded js"),
|
|
|
|
|
|
operation_id=_("Get embedded js"),
|
|
|
|
|
|
tags=[_("Application")],
|
2024-03-13 08:07:13 +00:00
|
|
|
|
manual_parameters=ApplicationApi.ApiKey.get_request_params_api())
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Get embedded js")
|
2024-03-13 08:07:13 +00:00
|
|
|
|
def get(self, request: Request):
|
|
|
|
|
|
return ApplicationSerializer.Embed(
|
|
|
|
|
|
data={'protocol': request.query_params.get('protocol'), 'token': request.query_params.get('token'),
|
2024-09-13 07:40:13 +00:00
|
|
|
|
'host': request.query_params.get('host'), }).get_embed(params=request.query_params)
|
2024-03-13 08:07:13 +00:00
|
|
|
|
|
2024-03-05 09:03:45 +00:00
|
|
|
|
class Model(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods=["GET"], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Get a list of models"),
|
|
|
|
|
|
operation_id=_("Get a list of models"),
|
|
|
|
|
|
tags=[_("Application")],
|
2024-07-15 08:26:54 +00:00
|
|
|
|
manual_parameters=ApplicationApi.Model.get_request_params_api())
|
2024-03-05 09:03:45 +00:00
|
|
|
|
@has_permissions(ViewPermission(
|
2024-09-12 03:03:31 +00:00
|
|
|
|
[RoleConstants.ADMIN, RoleConstants.USER],
|
2024-03-05 09:03:45 +00:00
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
|
|
|
|
|
dynamic_tag=keywords.get('application_id'))],
|
|
|
|
|
|
compare=CompareConstants.AND))
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Get a list of models")
|
2024-03-05 09:03:45 +00:00
|
|
|
|
def get(self, request: Request, application_id: str):
|
|
|
|
|
|
return result.success(
|
|
|
|
|
|
ApplicationSerializer.Operate(
|
|
|
|
|
|
data={'application_id': application_id,
|
2024-07-15 08:26:54 +00:00
|
|
|
|
'user_id': request.user.id}).list_model(request.query_params.get('model_type')))
|
2024-03-05 09:03:45 +00:00
|
|
|
|
|
2024-08-27 07:06:54 +00:00
|
|
|
|
class ModelParamsForm(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods=['GET'], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Get model parameter form"),
|
|
|
|
|
|
operation_id=_("Get model parameter form"),
|
|
|
|
|
|
tags=[_("Application")])
|
2024-08-27 07:06:54 +00:00
|
|
|
|
@has_permissions(ViewPermission(
|
|
|
|
|
|
[RoleConstants.ADMIN, RoleConstants.USER],
|
|
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
|
|
|
|
|
dynamic_tag=keywords.get('application_id'))],
|
|
|
|
|
|
compare=CompareConstants.AND))
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Get model parameter form")
|
2024-08-27 07:06:54 +00:00
|
|
|
|
def get(self, request: Request, application_id: str, model_id: str):
|
|
|
|
|
|
return result.success(
|
|
|
|
|
|
ApplicationSerializer.Operate(
|
|
|
|
|
|
data={'application_id': application_id,
|
|
|
|
|
|
'user_id': request.user.id}).get_model_params_form(model_id))
|
|
|
|
|
|
|
2024-08-27 06:36:12 +00:00
|
|
|
|
class FunctionLib(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods=["GET"], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Get a list of function libraries"),
|
|
|
|
|
|
operation_id=_("Get a list of function libraries"),
|
|
|
|
|
|
tags=[_("Application")])
|
2024-08-27 06:36:12 +00:00
|
|
|
|
@has_permissions(ViewPermission(
|
|
|
|
|
|
[RoleConstants.ADMIN, RoleConstants.USER],
|
|
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
|
|
|
|
|
dynamic_tag=keywords.get('application_id'))],
|
|
|
|
|
|
compare=CompareConstants.AND))
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Get a list of function libraries")
|
2024-08-27 06:36:12 +00:00
|
|
|
|
def get(self, request: Request, application_id: str):
|
|
|
|
|
|
return result.success(
|
|
|
|
|
|
ApplicationSerializer.Operate(
|
|
|
|
|
|
data={'application_id': application_id,
|
|
|
|
|
|
'user_id': request.user.id}).list_function_lib())
|
|
|
|
|
|
|
|
|
|
|
|
class Operate(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods=["GET"], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Get library details"),
|
|
|
|
|
|
operation_id=_("Get library details"),
|
|
|
|
|
|
tags=[_("Application")],
|
2024-08-27 06:36:12 +00:00
|
|
|
|
)
|
|
|
|
|
|
@has_permissions(ViewPermission(
|
|
|
|
|
|
[RoleConstants.ADMIN, RoleConstants.USER],
|
|
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
|
|
|
|
|
dynamic_tag=keywords.get('application_id'))],
|
|
|
|
|
|
compare=CompareConstants.AND))
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Get library details")
|
2024-08-27 06:36:12 +00:00
|
|
|
|
def get(self, request: Request, application_id: str, function_lib_id: str):
|
|
|
|
|
|
return result.success(
|
|
|
|
|
|
ApplicationSerializer.Operate(
|
|
|
|
|
|
data={'application_id': application_id,
|
|
|
|
|
|
'user_id': request.user.id}).get_function_lib(function_lib_id))
|
|
|
|
|
|
|
2024-11-11 10:34:54 +00:00
|
|
|
|
class Application(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods=['GET'], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Get the list of apps created by the current user"),
|
|
|
|
|
|
operation_id=_("Get the list of apps created by the current user"),
|
|
|
|
|
|
tags=[_("Application/Chat")])
|
2024-11-11 10:34:54 +00:00
|
|
|
|
@has_permissions(ViewPermission(
|
|
|
|
|
|
[RoleConstants.ADMIN, RoleConstants.USER],
|
|
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
|
|
|
|
|
dynamic_tag=keywords.get('application_id'))],
|
|
|
|
|
|
compare=CompareConstants.AND))
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Get the list of apps created by the current user")
|
2024-11-11 10:34:54 +00:00
|
|
|
|
def get(self, request: Request, application_id: str):
|
|
|
|
|
|
return result.success(
|
|
|
|
|
|
ApplicationSerializer.Operate(
|
|
|
|
|
|
data={'application_id': application_id,
|
|
|
|
|
|
'user_id': request.user.id}).application_list())
|
|
|
|
|
|
|
2024-12-27 10:32:22 +00:00
|
|
|
|
class Operate(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods=["GET"], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Get application data"),
|
|
|
|
|
|
operation_id=_("Get application data"),
|
|
|
|
|
|
tags=[_("Application")],
|
2024-12-27 10:32:22 +00:00
|
|
|
|
)
|
|
|
|
|
|
@has_permissions(ViewPermission(
|
|
|
|
|
|
[RoleConstants.ADMIN, RoleConstants.USER],
|
|
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
|
|
|
|
|
dynamic_tag=keywords.get('application_id'))],
|
|
|
|
|
|
compare=CompareConstants.AND))
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Get application data")
|
2024-12-27 10:32:22 +00:00
|
|
|
|
def get(self, request: Request, application_id: str, app_id: str):
|
|
|
|
|
|
return result.success(
|
|
|
|
|
|
ApplicationSerializer.Operate(
|
|
|
|
|
|
data={'application_id': application_id,
|
|
|
|
|
|
'user_id': request.user.id}).get_application(app_id))
|
|
|
|
|
|
|
2023-11-16 05:16:27 +00:00
|
|
|
|
class Profile(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods=['GET'], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Get application related information"),
|
|
|
|
|
|
operation_id=_("Get application related information"),
|
|
|
|
|
|
tags=[_("Application/Chat")])
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Get application related information")
|
2023-11-16 05:16:27 +00:00
|
|
|
|
def get(self, request: Request):
|
|
|
|
|
|
if 'application_id' in request.auth.keywords:
|
|
|
|
|
|
return result.success(ApplicationSerializer.Operate(
|
|
|
|
|
|
data={'application_id': request.auth.keywords.get('application_id'),
|
|
|
|
|
|
'user_id': request.user.id}).profile())
|
2024-07-02 02:55:26 +00:00
|
|
|
|
raise AppAuthenticationFailed(401, "身份异常")
|
2023-11-16 05:16:27 +00:00
|
|
|
|
|
|
|
|
|
|
class ApplicationKey(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods=['POST'], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Add ApiKey"),
|
|
|
|
|
|
operation_id=_("Add ApiKey"),
|
|
|
|
|
|
tags=[_('Application/API_KEY')],
|
2023-11-16 05:16:27 +00:00
|
|
|
|
manual_parameters=ApplicationApi.ApiKey.get_request_params_api())
|
|
|
|
|
|
@has_permissions(ViewPermission(
|
|
|
|
|
|
[RoleConstants.ADMIN, RoleConstants.USER],
|
|
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.MANAGE,
|
|
|
|
|
|
dynamic_tag=keywords.get('application_id'))],
|
|
|
|
|
|
compare=CompareConstants.AND))
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Add ApiKey")
|
2023-11-16 05:16:27 +00:00
|
|
|
|
def post(self, request: Request, application_id: str):
|
|
|
|
|
|
return result.success(
|
|
|
|
|
|
ApplicationSerializer.ApplicationKeySerializer(
|
|
|
|
|
|
data={'application_id': application_id, 'user_id': request.user.id}).generate())
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods=['GET'], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Get the application API_KEY list"),
|
|
|
|
|
|
operation_id=_("Get the application API_KEY list"),
|
|
|
|
|
|
tags=[_('Application/API_KEY')],
|
2023-11-16 05:16:27 +00:00
|
|
|
|
manual_parameters=ApplicationApi.ApiKey.get_request_params_api()
|
|
|
|
|
|
)
|
|
|
|
|
|
@has_permissions(ViewPermission(
|
|
|
|
|
|
[RoleConstants.ADMIN, RoleConstants.USER],
|
2024-02-29 08:14:07 +00:00
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
2023-11-16 05:16:27 +00:00
|
|
|
|
dynamic_tag=keywords.get('application_id'))],
|
|
|
|
|
|
compare=CompareConstants.AND))
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Get the application API_KEY list")
|
2023-11-16 05:16:27 +00:00
|
|
|
|
def get(self, request: Request, application_id: str):
|
|
|
|
|
|
return result.success(ApplicationSerializer.ApplicationKeySerializer(
|
|
|
|
|
|
data={'application_id': application_id, 'user_id': request.user.id}).list())
|
|
|
|
|
|
|
|
|
|
|
|
class Operate(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
2023-12-08 05:58:21 +00:00
|
|
|
|
@action(methods=['PUT'], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Modify application API_KEY"),
|
|
|
|
|
|
operation_id=_("Modify application API_KEY"),
|
|
|
|
|
|
tags=[_('Application/API_KEY')],
|
2023-12-08 05:58:21 +00:00
|
|
|
|
manual_parameters=ApplicationApi.ApiKey.Operate.get_request_params_api(),
|
|
|
|
|
|
request_body=ApplicationApi.ApiKey.Operate.get_request_body_api())
|
|
|
|
|
|
@has_permissions(ViewPermission(
|
|
|
|
|
|
[RoleConstants.ADMIN, RoleConstants.USER],
|
|
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.MANAGE,
|
|
|
|
|
|
dynamic_tag=keywords.get('application_id'))],
|
2024-02-29 08:14:07 +00:00
|
|
|
|
compare=CompareConstants.AND), PermissionConstants.APPLICATION_EDIT,
|
2023-12-08 05:58:21 +00:00
|
|
|
|
compare=CompareConstants.AND)
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Modify application API_KEY")
|
2023-12-08 05:58:21 +00:00
|
|
|
|
def put(self, request: Request, application_id: str, api_key_id: str):
|
|
|
|
|
|
return result.success(
|
|
|
|
|
|
ApplicationSerializer.ApplicationKeySerializer.Operate(
|
|
|
|
|
|
data={'application_id': application_id, 'user_id': request.user.id,
|
|
|
|
|
|
'api_key_id': api_key_id}).edit(request.data))
|
|
|
|
|
|
|
2023-11-16 05:16:27 +00:00
|
|
|
|
@action(methods=['DELETE'], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Delete Application API_KEY"),
|
|
|
|
|
|
operation_id=_("Delete Application API_KEY"),
|
|
|
|
|
|
tags=[_('Application/API_KEY')],
|
2023-11-16 05:16:27 +00:00
|
|
|
|
manual_parameters=ApplicationApi.ApiKey.Operate.get_request_params_api())
|
|
|
|
|
|
@has_permissions(ViewPermission(
|
|
|
|
|
|
[RoleConstants.ADMIN, RoleConstants.USER],
|
|
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.MANAGE,
|
|
|
|
|
|
dynamic_tag=keywords.get('application_id'))],
|
2024-02-29 08:14:07 +00:00
|
|
|
|
compare=CompareConstants.AND), PermissionConstants.APPLICATION_DELETE,
|
2023-11-16 05:16:27 +00:00
|
|
|
|
compare=CompareConstants.AND)
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Delete Application API_KEY")
|
2023-11-16 05:16:27 +00:00
|
|
|
|
def delete(self, request: Request, application_id: str, api_key_id: str):
|
|
|
|
|
|
return result.success(
|
|
|
|
|
|
ApplicationSerializer.ApplicationKeySerializer.Operate(
|
|
|
|
|
|
data={'application_id': application_id, 'user_id': request.user.id,
|
|
|
|
|
|
'api_key_id': api_key_id}).delete())
|
|
|
|
|
|
|
|
|
|
|
|
class AccessToken(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods=['PUT'], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Modify Application AccessToken"),
|
|
|
|
|
|
operation_id=_("Modify Application AccessToken"),
|
|
|
|
|
|
tags=[_('Application/Public Access')],
|
2023-11-16 05:16:27 +00:00
|
|
|
|
manual_parameters=ApplicationApi.AccessToken.get_request_params_api(),
|
|
|
|
|
|
request_body=ApplicationApi.AccessToken.get_request_body_api())
|
|
|
|
|
|
@has_permissions(ViewPermission(
|
|
|
|
|
|
[RoleConstants.ADMIN, RoleConstants.USER],
|
|
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.MANAGE,
|
|
|
|
|
|
dynamic_tag=keywords.get('application_id'))],
|
|
|
|
|
|
compare=CompareConstants.AND))
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Modify Application AccessToken")
|
2023-11-16 05:16:27 +00:00
|
|
|
|
def put(self, request: Request, application_id: str):
|
|
|
|
|
|
return result.success(
|
2024-12-16 06:19:57 +00:00
|
|
|
|
ApplicationSerializer.AccessTokenSerializer(data={'application_id': application_id}).edit(
|
|
|
|
|
|
request.data))
|
2023-11-16 05:16:27 +00:00
|
|
|
|
|
|
|
|
|
|
@action(methods=['GET'], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Get the application AccessToken information"),
|
|
|
|
|
|
operation_id=_("Get the application AccessToken information"),
|
2023-11-16 05:16:27 +00:00
|
|
|
|
manual_parameters=ApplicationApi.AccessToken.get_request_params_api(),
|
2025-01-13 11:05:08 +00:00
|
|
|
|
tags=[_('Application/Public Access')],
|
2023-11-16 05:16:27 +00:00
|
|
|
|
)
|
|
|
|
|
|
@has_permissions(ViewPermission(
|
|
|
|
|
|
[RoleConstants.ADMIN, RoleConstants.USER],
|
|
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
|
|
|
|
|
dynamic_tag=keywords.get('application_id'))],
|
|
|
|
|
|
compare=CompareConstants.AND))
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Get the application AccessToken information")
|
2023-11-16 05:16:27 +00:00
|
|
|
|
def get(self, request: Request, application_id: str):
|
|
|
|
|
|
return result.success(
|
|
|
|
|
|
ApplicationSerializer.AccessTokenSerializer(data={'application_id': application_id}).one())
|
|
|
|
|
|
|
|
|
|
|
|
class Authentication(APIView):
|
2024-03-01 06:25:56 +00:00
|
|
|
|
@action(methods=['OPTIONS'], detail=False)
|
|
|
|
|
|
def options(self, request, *args, **kwargs):
|
2024-12-16 06:19:57 +00:00
|
|
|
|
return HttpResponse(
|
|
|
|
|
|
headers={"Access-Control-Allow-Origin": "*", "Access-Control-Allow-Credentials": "true",
|
|
|
|
|
|
"Access-Control-Allow-Methods": "POST",
|
|
|
|
|
|
"Access-Control-Allow-Headers": "Origin,Content-Type,Cookie,Accept,Token"}, )
|
2024-03-01 06:25:56 +00:00
|
|
|
|
|
2023-11-16 05:16:27 +00:00
|
|
|
|
@action(methods=['POST'], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Application Certification"),
|
|
|
|
|
|
operation_id=_("Application Certification"),
|
2023-11-16 05:16:27 +00:00
|
|
|
|
request_body=ApplicationApi.Authentication.get_request_body_api(),
|
2025-01-13 11:05:08 +00:00
|
|
|
|
tags=[_("Application/Certification")],
|
2023-11-16 05:16:27 +00:00
|
|
|
|
security=[])
|
|
|
|
|
|
def post(self, request: Request):
|
2024-03-13 13:50:57 +00:00
|
|
|
|
return result.success(
|
2024-10-22 10:29:13 +00:00
|
|
|
|
ApplicationSerializer.Authentication(data={'access_token': request.data.get("access_token"),
|
|
|
|
|
|
'authentication_value': request.data.get(
|
|
|
|
|
|
'authentication_value')}).auth(
|
2024-03-13 21:43:01 +00:00
|
|
|
|
request),
|
2024-03-01 06:25:56 +00:00
|
|
|
|
headers={"Access-Control-Allow-Origin": "*", "Access-Control-Allow-Credentials": "true",
|
|
|
|
|
|
"Access-Control-Allow-Methods": "POST",
|
|
|
|
|
|
"Access-Control-Allow-Headers": "Origin,Content-Type,Cookie,Accept,Token"}
|
|
|
|
|
|
)
|
2023-11-16 05:16:27 +00:00
|
|
|
|
|
|
|
|
|
|
@action(methods=['POST'], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Create an application"),
|
|
|
|
|
|
operation_id=_("Create an application"),
|
2023-11-16 05:16:27 +00:00
|
|
|
|
request_body=ApplicationApi.Create.get_request_body_api(),
|
2025-01-13 11:05:08 +00:00
|
|
|
|
tags=[_('Application')])
|
2023-11-16 05:16:27 +00:00
|
|
|
|
@has_permissions(PermissionConstants.APPLICATION_CREATE, compare=CompareConstants.AND)
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Create an application")
|
2023-11-16 05:16:27 +00:00
|
|
|
|
def post(self, request: Request):
|
2024-07-01 01:45:59 +00:00
|
|
|
|
return result.success(ApplicationSerializer.Create(data={'user_id': request.user.id}).insert(request.data))
|
2023-11-16 05:16:27 +00:00
|
|
|
|
|
|
|
|
|
|
@action(methods=['GET'], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Get the application list"),
|
|
|
|
|
|
operation_id=_("Get the application list"),
|
2023-11-16 05:16:27 +00:00
|
|
|
|
manual_parameters=ApplicationApi.Query.get_request_params_api(),
|
|
|
|
|
|
responses=result.get_api_array_response(ApplicationApi.get_response_body_api()),
|
2025-01-13 11:05:08 +00:00
|
|
|
|
tags=[_('Application')])
|
2023-11-16 05:16:27 +00:00
|
|
|
|
@has_permissions(PermissionConstants.APPLICATION_READ, compare=CompareConstants.AND)
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Get the application list")
|
2023-11-16 05:16:27 +00:00
|
|
|
|
def get(self, request: Request):
|
|
|
|
|
|
return result.success(
|
|
|
|
|
|
ApplicationSerializer.Query(
|
|
|
|
|
|
data={**query_params_to_single_dict(request.query_params), 'user_id': request.user.id}).list())
|
|
|
|
|
|
|
2023-12-25 09:10:59 +00:00
|
|
|
|
class HitTest(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods="GET", detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Hit Test List"), operation_id=_("Hit Test List"),
|
2023-12-25 09:10:59 +00:00
|
|
|
|
manual_parameters=CommonApi.HitTestApi.get_request_params_api(),
|
|
|
|
|
|
responses=result.get_api_array_response(CommonApi.HitTestApi.get_response_body_api()),
|
2025-01-13 11:05:08 +00:00
|
|
|
|
tags=[_("Application")])
|
2023-12-25 09:10:59 +00:00
|
|
|
|
@has_permissions(ViewPermission(
|
|
|
|
|
|
[RoleConstants.ADMIN, RoleConstants.USER, RoleConstants.APPLICATION_ACCESS_TOKEN,
|
|
|
|
|
|
RoleConstants.APPLICATION_KEY],
|
|
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
|
|
|
|
|
dynamic_tag=keywords.get('application_id'))],
|
|
|
|
|
|
compare=CompareConstants.AND))
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Hit Test List")
|
2023-12-25 09:10:59 +00:00
|
|
|
|
def get(self, request: Request, application_id: str):
|
|
|
|
|
|
return result.success(
|
|
|
|
|
|
ApplicationSerializer.HitTest(data={'id': application_id, 'user_id': request.user.id,
|
|
|
|
|
|
"query_text": request.query_params.get("query_text"),
|
|
|
|
|
|
"top_number": request.query_params.get("top_number"),
|
2024-04-22 03:21:24 +00:00
|
|
|
|
'similarity': request.query_params.get('similarity'),
|
2024-12-16 06:19:57 +00:00
|
|
|
|
'search_mode': request.query_params.get(
|
|
|
|
|
|
'search_mode')}).hit_test(
|
2023-12-25 09:10:59 +00:00
|
|
|
|
))
|
|
|
|
|
|
|
2024-07-01 01:45:59 +00:00
|
|
|
|
class Publish(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods=['PUT'], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Publishing an application"),
|
|
|
|
|
|
operation_id=_("Publishing an application"),
|
2024-07-01 01:45:59 +00:00
|
|
|
|
manual_parameters=ApplicationApi.Operate.get_request_params_api(),
|
|
|
|
|
|
request_body=ApplicationApi.Publish.get_request_body_api(),
|
|
|
|
|
|
responses=result.get_default_response(),
|
2025-01-13 11:05:08 +00:00
|
|
|
|
tags=[_('Application')])
|
2024-07-01 01:45:59 +00:00
|
|
|
|
@has_permissions(ViewPermission(
|
|
|
|
|
|
[RoleConstants.ADMIN, RoleConstants.USER],
|
|
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.MANAGE,
|
|
|
|
|
|
dynamic_tag=keywords.get('application_id'))],
|
|
|
|
|
|
compare=CompareConstants.AND))
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Publishing an application")
|
2024-07-01 01:45:59 +00:00
|
|
|
|
def put(self, request: Request, application_id: str):
|
|
|
|
|
|
return result.success(
|
|
|
|
|
|
ApplicationSerializer.Operate(
|
|
|
|
|
|
data={'application_id': application_id, 'user_id': request.user.id}).publish(request.data))
|
|
|
|
|
|
|
2023-11-16 05:16:27 +00:00
|
|
|
|
class Operate(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods=['DELETE'], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Deleting application"),
|
|
|
|
|
|
operation_id=_("Deleting application"),
|
2023-11-16 05:16:27 +00:00
|
|
|
|
manual_parameters=ApplicationApi.Operate.get_request_params_api(),
|
|
|
|
|
|
responses=result.get_default_response(),
|
2025-01-13 11:05:08 +00:00
|
|
|
|
tags=[_('Application')])
|
2023-11-16 05:16:27 +00:00
|
|
|
|
@has_permissions(ViewPermission(
|
|
|
|
|
|
[RoleConstants.ADMIN, RoleConstants.USER],
|
|
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.MANAGE,
|
|
|
|
|
|
dynamic_tag=keywords.get('application_id'))],
|
|
|
|
|
|
compare=CompareConstants.AND),
|
|
|
|
|
|
lambda r, k: Permission(group=Group.APPLICATION, operate=Operate.DELETE,
|
|
|
|
|
|
dynamic_tag=k.get('application_id')), compare=CompareConstants.AND)
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Deleting application")
|
2023-11-16 05:16:27 +00:00
|
|
|
|
def delete(self, request: Request, application_id: str):
|
|
|
|
|
|
return result.success(ApplicationSerializer.Operate(
|
|
|
|
|
|
data={'application_id': application_id, 'user_id': request.user.id}).delete(
|
|
|
|
|
|
with_valid=True))
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods=['PUT'], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Modify the application"),
|
|
|
|
|
|
operation_id=_("Modify the application"),
|
2023-11-16 05:16:27 +00:00
|
|
|
|
manual_parameters=ApplicationApi.Operate.get_request_params_api(),
|
2023-12-05 07:58:30 +00:00
|
|
|
|
request_body=ApplicationApi.Edit.get_request_body_api(),
|
2023-11-16 05:16:27 +00:00
|
|
|
|
responses=result.get_api_array_response(ApplicationApi.get_response_body_api()),
|
2025-01-13 11:05:08 +00:00
|
|
|
|
tags=[_('Application')])
|
2023-11-16 05:16:27 +00:00
|
|
|
|
@has_permissions(ViewPermission(
|
|
|
|
|
|
[RoleConstants.ADMIN, RoleConstants.USER],
|
2024-03-04 03:34:44 +00:00
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.MANAGE,
|
2023-11-16 05:16:27 +00:00
|
|
|
|
dynamic_tag=keywords.get('application_id'))],
|
|
|
|
|
|
compare=CompareConstants.AND))
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Modify the application")
|
2023-11-16 05:16:27 +00:00
|
|
|
|
def put(self, request: Request, application_id: str):
|
|
|
|
|
|
return result.success(
|
2024-12-16 06:19:57 +00:00
|
|
|
|
ApplicationSerializer.Operate(
|
|
|
|
|
|
data={'application_id': application_id, 'user_id': request.user.id}).edit(
|
2023-11-16 05:16:27 +00:00
|
|
|
|
request.data))
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods=['GET'], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Get application details"),
|
|
|
|
|
|
operation_id=_("Get application details"),
|
2023-11-16 05:16:27 +00:00
|
|
|
|
manual_parameters=ApplicationApi.Operate.get_request_params_api(),
|
|
|
|
|
|
responses=result.get_api_array_response(ApplicationApi.get_response_body_api()),
|
2025-01-13 11:05:08 +00:00
|
|
|
|
tags=[_('Application')])
|
2023-11-16 05:16:27 +00:00
|
|
|
|
@has_permissions(ViewPermission(
|
|
|
|
|
|
[RoleConstants.ADMIN, RoleConstants.USER, RoleConstants.APPLICATION_ACCESS_TOKEN,
|
|
|
|
|
|
RoleConstants.APPLICATION_KEY],
|
|
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
|
|
|
|
|
|
dynamic_tag=keywords.get('application_id'))],
|
|
|
|
|
|
compare=CompareConstants.AND))
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Get application details")
|
2023-11-16 05:16:27 +00:00
|
|
|
|
def get(self, request: Request, application_id: str):
|
|
|
|
|
|
return result.success(ApplicationSerializer.Operate(
|
|
|
|
|
|
data={'application_id': application_id, 'user_id': request.user.id}).one())
|
|
|
|
|
|
|
|
|
|
|
|
class ListApplicationDataSet(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods=['GET'], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Get the knowledge base available to the current application"),
|
|
|
|
|
|
operation_id=_("Get the knowledge base available to the current application"),
|
2023-11-16 05:16:27 +00:00
|
|
|
|
manual_parameters=ApplicationApi.Operate.get_request_params_api(),
|
2024-12-16 06:19:57 +00:00
|
|
|
|
responses=result.get_api_array_response(
|
|
|
|
|
|
DataSetSerializers.Query.get_response_body_api()),
|
2025-01-13 11:05:08 +00:00
|
|
|
|
tags=[_('Application')])
|
2023-11-16 05:16:27 +00:00
|
|
|
|
@has_permissions(ViewPermission([RoleConstants.ADMIN, RoleConstants.USER],
|
2024-12-16 06:19:57 +00:00
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION,
|
|
|
|
|
|
operate=Operate.USE,
|
|
|
|
|
|
dynamic_tag=keywords.get(
|
|
|
|
|
|
'application_id'))],
|
2023-11-16 05:16:27 +00:00
|
|
|
|
compare=CompareConstants.AND))
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Get the knowledge base available to the current application")
|
2023-11-16 05:16:27 +00:00
|
|
|
|
def get(self, request: Request, application_id: str):
|
|
|
|
|
|
return result.success(ApplicationSerializer.Operate(
|
|
|
|
|
|
data={'application_id': application_id, 'user_id': request.user.id}).list_dataset())
|
|
|
|
|
|
|
|
|
|
|
|
class Page(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods=['GET'], detail=False)
|
2025-01-13 11:05:08 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("Get the application list by page"),
|
|
|
|
|
|
operation_id=_("Get the application list by page"),
|
2023-11-16 05:16:27 +00:00
|
|
|
|
manual_parameters=result.get_page_request_params(
|
|
|
|
|
|
ApplicationApi.Query.get_request_params_api()),
|
|
|
|
|
|
responses=result.get_page_api_response(ApplicationApi.get_response_body_api()),
|
2025-01-13 11:05:08 +00:00
|
|
|
|
tags=[_('Application')])
|
2023-11-16 05:16:27 +00:00
|
|
|
|
@has_permissions(PermissionConstants.APPLICATION_READ, compare=CompareConstants.AND)
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="Get the application list by page")
|
2023-11-16 05:16:27 +00:00
|
|
|
|
def get(self, request: Request, current_page: int, page_size: int):
|
|
|
|
|
|
return result.success(
|
|
|
|
|
|
ApplicationSerializer.Query(
|
|
|
|
|
|
data={**query_params_to_single_dict(request.query_params), 'user_id': request.user.id}).page(
|
|
|
|
|
|
current_page, page_size))
|
2024-09-04 09:02:15 +00:00
|
|
|
|
|
|
|
|
|
|
class SpeechToText(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods=['POST'], detail=False)
|
2024-10-22 10:29:13 +00:00
|
|
|
|
@has_permissions(
|
|
|
|
|
|
ViewPermission([RoleConstants.ADMIN, RoleConstants.USER, RoleConstants.APPLICATION_ACCESS_TOKEN],
|
|
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION,
|
|
|
|
|
|
operate=Operate.USE,
|
|
|
|
|
|
dynamic_tag=keywords.get(
|
|
|
|
|
|
'application_id'))],
|
|
|
|
|
|
compare=CompareConstants.AND))
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="speech to text")
|
2024-09-06 06:38:07 +00:00
|
|
|
|
def post(self, request: Request, application_id: str):
|
2024-09-04 09:02:15 +00:00
|
|
|
|
return result.success(
|
2024-09-06 06:38:07 +00:00
|
|
|
|
ApplicationSerializer.Operate(data={'application_id': application_id, 'user_id': request.user.id})
|
2024-09-04 09:02:15 +00:00
|
|
|
|
.speech_to_text(request.FILES.getlist('file')[0]))
|
|
|
|
|
|
|
|
|
|
|
|
class TextToSpeech(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods=['POST'], detail=False)
|
2025-01-20 02:43:50 +00:00
|
|
|
|
@swagger_auto_schema(operation_summary=_("text to speech"),
|
|
|
|
|
|
operation_id=_("text to speech"),
|
|
|
|
|
|
manual_parameters=ApplicationApi.TextToSpeech.get_request_params_api(),
|
|
|
|
|
|
request_body=ApplicationApi.TextToSpeech.get_request_body_api(),
|
|
|
|
|
|
responses=result.get_default_response(),
|
|
|
|
|
|
tags=[_('Application')])
|
2024-10-22 10:29:13 +00:00
|
|
|
|
@has_permissions(
|
|
|
|
|
|
ViewPermission([RoleConstants.ADMIN, RoleConstants.USER, RoleConstants.APPLICATION_ACCESS_TOKEN],
|
|
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION,
|
|
|
|
|
|
operate=Operate.USE,
|
|
|
|
|
|
dynamic_tag=keywords.get(
|
|
|
|
|
|
'application_id'))],
|
|
|
|
|
|
compare=CompareConstants.AND))
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="text to speech")
|
2024-09-06 06:38:07 +00:00
|
|
|
|
def post(self, request: Request, application_id: str):
|
|
|
|
|
|
byte_data = ApplicationSerializer.Operate(
|
|
|
|
|
|
data={'application_id': application_id, 'user_id': request.user.id}).text_to_speech(
|
|
|
|
|
|
request.data.get('text'))
|
|
|
|
|
|
return HttpResponse(byte_data, status=200, headers={'Content-Type': 'audio/mp3',
|
2024-10-22 10:29:13 +00:00
|
|
|
|
'Content-Disposition': 'attachment; filename="abc.mp3"'})
|
2024-10-18 06:17:47 +00:00
|
|
|
|
|
|
|
|
|
|
class PlayDemoText(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods=['POST'], detail=False)
|
2024-10-22 10:29:13 +00:00
|
|
|
|
@has_permissions(
|
|
|
|
|
|
ViewPermission([RoleConstants.ADMIN, RoleConstants.USER, RoleConstants.APPLICATION_ACCESS_TOKEN],
|
|
|
|
|
|
[lambda r, keywords: Permission(group=Group.APPLICATION,
|
|
|
|
|
|
operate=Operate.USE,
|
|
|
|
|
|
dynamic_tag=keywords.get(
|
|
|
|
|
|
'application_id'))],
|
|
|
|
|
|
compare=CompareConstants.AND))
|
2025-03-19 07:45:10 +00:00
|
|
|
|
@log(menu='Application', operate="trial listening")
|
2024-10-18 06:17:47 +00:00
|
|
|
|
def post(self, request: Request, application_id: str):
|
|
|
|
|
|
byte_data = ApplicationSerializer.Operate(
|
|
|
|
|
|
data={'application_id': application_id, 'user_id': request.user.id}).play_demo_text(request.data)
|
|
|
|
|
|
return HttpResponse(byte_data, status=200, headers={'Content-Type': 'audio/mp3',
|
2024-10-22 10:29:13 +00:00
|
|
|
|
'Content-Disposition': 'attachment; filename="abc.mp3"'})
|
2025-03-21 09:06:01 +00:00
|
|
|
|
|
|
|
|
|
|
class McpServers(APIView):
|
|
|
|
|
|
authentication_classes = [TokenAuth]
|
|
|
|
|
|
|
|
|
|
|
|
@action(methods=['GET'], detail=False)
|
|
|
|
|
|
@has_permissions(PermissionConstants.APPLICATION_READ, compare=CompareConstants.AND)
|
|
|
|
|
|
@log(menu='Application', operate="Get the MCP server tools")
|
|
|
|
|
|
def get(self, request: Request):
|
|
|
|
|
|
return result.success(ApplicationSerializer.McpServers(
|
|
|
|
|
|
data={'mcp_servers': request.query_params.get('mcp_servers')}).get_mcp_servers())
|