dify/api/controllers/console/workspace/endpoint.py

206 lines
6.3 KiB
Python
Raw Normal View History

2024-09-26 12:49:00 +08:00
from flask_login import current_user
from flask_restful import Resource, reqparse
from werkzeug.exceptions import Forbidden
2024-09-26 10:26:45 +08:00
from controllers.console import api
2024-11-01 16:28:17 +08:00
from controllers.console.wraps import account_initialization_required, setup_required
2024-10-08 23:48:38 +08:00
from core.model_runtime.utils.encoders import jsonable_encoder
2024-09-26 10:26:45 +08:00
from libs.login import login_required
2024-09-26 12:49:00 +08:00
from services.plugin.endpoint_service import EndpointService
2024-09-26 10:26:45 +08:00
class EndpointCreateApi(Resource):
@setup_required
@login_required
@account_initialization_required
def post(self):
2024-09-26 12:49:00 +08:00
user = current_user
if not user.is_admin_or_owner:
raise Forbidden()
parser = reqparse.RequestParser()
parser.add_argument("plugin_unique_identifier", type=str, required=True)
parser.add_argument("settings", type=dict, required=True)
2024-09-30 16:57:09 +08:00
parser.add_argument("name", type=str, required=True)
2024-09-26 12:49:00 +08:00
args = parser.parse_args()
plugin_unique_identifier = args["plugin_unique_identifier"]
settings = args["settings"]
2024-09-30 16:57:09 +08:00
name = args["name"]
2024-09-26 12:49:00 +08:00
2024-10-08 23:48:38 +08:00
return {
"success": EndpointService.create_endpoint(
tenant_id=user.current_tenant_id,
user_id=user.id,
plugin_unique_identifier=plugin_unique_identifier,
name=name,
settings=settings,
)
}
2024-09-26 10:26:45 +08:00
class EndpointListApi(Resource):
@setup_required
@login_required
@account_initialization_required
def get(self):
2024-09-26 12:49:00 +08:00
user = current_user
2024-10-08 23:48:38 +08:00
parser = reqparse.RequestParser()
parser.add_argument("page", type=int, required=True, location="args")
parser.add_argument("page_size", type=int, required=True, location="args")
args = parser.parse_args()
page = args["page"]
page_size = args["page_size"]
return jsonable_encoder(
{
"endpoints": EndpointService.list_endpoints(
tenant_id=user.current_tenant_id,
user_id=user.id,
page=page,
page_size=page_size,
)
}
2024-09-26 12:49:00 +08:00
)
2024-09-26 10:26:45 +08:00
class EndpointListForSinglePluginApi(Resource):
@setup_required
@login_required
@account_initialization_required
def get(self):
user = current_user
parser = reqparse.RequestParser()
parser.add_argument("page", type=int, required=True, location="args")
parser.add_argument("page_size", type=int, required=True, location="args")
parser.add_argument("plugin_id", type=str, required=True, location="args")
args = parser.parse_args()
page = args["page"]
page_size = args["page_size"]
plugin_id = args["plugin_id"]
return jsonable_encoder(
{
"endpoints": EndpointService.list_endpoints_for_single_plugin(
tenant_id=user.current_tenant_id,
user_id=user.id,
plugin_id=plugin_id,
page=page,
page_size=page_size,
)
}
)
2024-09-26 10:26:45 +08:00
class EndpointDeleteApi(Resource):
@setup_required
@login_required
@account_initialization_required
def post(self):
2024-09-26 12:49:00 +08:00
user = current_user
parser = reqparse.RequestParser()
parser.add_argument("endpoint_id", type=str, required=True)
args = parser.parse_args()
2024-10-08 23:48:38 +08:00
if not user.is_admin_or_owner:
raise Forbidden()
2024-09-26 12:49:00 +08:00
endpoint_id = args["endpoint_id"]
2024-10-08 23:48:38 +08:00
return {
"success": EndpointService.delete_endpoint(
tenant_id=user.current_tenant_id, user_id=user.id, endpoint_id=endpoint_id
)
}
2024-09-26 10:26:45 +08:00
class EndpointUpdateApi(Resource):
@setup_required
@login_required
@account_initialization_required
def post(self):
2024-09-26 12:49:00 +08:00
user = current_user
parser = reqparse.RequestParser()
parser.add_argument("endpoint_id", type=str, required=True)
parser.add_argument("settings", type=dict, required=True)
2024-09-30 16:57:09 +08:00
parser.add_argument("name", type=str, required=True)
2024-09-26 12:49:00 +08:00
args = parser.parse_args()
endpoint_id = args["endpoint_id"]
settings = args["settings"]
2024-09-30 16:57:09 +08:00
name = args["name"]
2024-09-26 12:49:00 +08:00
2024-10-08 23:48:38 +08:00
if not user.is_admin_or_owner:
raise Forbidden()
return {
"success": EndpointService.update_endpoint(
tenant_id=user.current_tenant_id,
user_id=user.id,
endpoint_id=endpoint_id,
name=name,
settings=settings,
)
}
2024-09-26 10:26:45 +08:00
class EndpointEnableApi(Resource):
@setup_required
@login_required
@account_initialization_required
def post(self):
2024-09-26 12:49:00 +08:00
user = current_user
parser = reqparse.RequestParser()
parser.add_argument("endpoint_id", type=str, required=True)
args = parser.parse_args()
endpoint_id = args["endpoint_id"]
2024-10-08 23:48:38 +08:00
if not user.is_admin_or_owner:
raise Forbidden()
return {
"success": EndpointService.enable_endpoint(
tenant_id=user.current_tenant_id, user_id=user.id, endpoint_id=endpoint_id
)
}
2024-09-26 10:26:45 +08:00
class EndpointDisableApi(Resource):
@setup_required
@login_required
@account_initialization_required
def post(self):
2024-09-26 12:49:00 +08:00
user = current_user
parser = reqparse.RequestParser()
parser.add_argument("endpoint_id", type=str, required=True)
args = parser.parse_args()
endpoint_id = args["endpoint_id"]
2024-10-08 23:48:38 +08:00
if not user.is_admin_or_owner:
raise Forbidden()
return {
"success": EndpointService.disable_endpoint(
tenant_id=user.current_tenant_id, user_id=user.id, endpoint_id=endpoint_id
)
}
2024-09-26 10:26:45 +08:00
api.add_resource(EndpointCreateApi, "/workspaces/current/endpoints/create")
api.add_resource(EndpointListApi, "/workspaces/current/endpoints/list")
api.add_resource(EndpointListForSinglePluginApi, "/workspaces/current/endpoints/list/plugin")
2024-09-26 10:26:45 +08:00
api.add_resource(EndpointDeleteApi, "/workspaces/current/endpoints/delete")
api.add_resource(EndpointUpdateApi, "/workspaces/current/endpoints/update")
api.add_resource(EndpointEnableApi, "/workspaces/current/endpoints/enable")
2024-09-26 12:49:00 +08:00
api.add_resource(EndpointDisableApi, "/workspaces/current/endpoints/disable")