fix: endpoint apis

This commit is contained in:
Yeuoly 2024-10-08 23:48:38 +08:00
parent a9c21ef929
commit 570b7d18ac
No known key found for this signature in database
GPG Key ID: A66E7E320FB19F61
3 changed files with 94 additions and 41 deletions

View File

@ -5,6 +5,7 @@ from werkzeug.exceptions import Forbidden
from controllers.console import api
from controllers.console.setup import setup_required
from controllers.console.wraps import account_initialization_required
from core.model_runtime.utils.encoders import jsonable_encoder
from libs.login import login_required
from services.plugin.endpoint_service import EndpointService
@ -28,13 +29,15 @@ class EndpointCreateApi(Resource):
settings = args["settings"]
name = args["name"]
return EndpointService.create_endpoint(
tenant_id=user.current_tenant_id,
user_id=user.id,
plugin_unique_identifier=plugin_unique_identifier,
name=name,
settings=settings,
)
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,
)
}
class EndpointListApi(Resource):
@ -44,9 +47,23 @@ class EndpointListApi(Resource):
def get(self):
user = current_user
return EndpointService.list_endpoints(
tenant_id=user.current_tenant_id,
user_id=user.id,
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,
)
}
)
@ -61,11 +78,16 @@ class EndpointDeleteApi(Resource):
parser.add_argument("endpoint_id", type=str, required=True)
args = parser.parse_args()
if not user.is_admin_or_owner:
raise Forbidden()
endpoint_id = args["endpoint_id"]
return EndpointService.delete_endpoint(
tenant_id=user.current_tenant_id, user_id=user.id, endpoint_id=endpoint_id
)
return {
"success": EndpointService.delete_endpoint(
tenant_id=user.current_tenant_id, user_id=user.id, endpoint_id=endpoint_id
)
}
class EndpointUpdateApi(Resource):
@ -85,13 +107,18 @@ class EndpointUpdateApi(Resource):
settings = args["settings"]
name = args["name"]
return EndpointService.update_endpoint(
tenant_id=user.current_tenant_id,
user_id=user.id,
endpoint_id=endpoint_id,
name=name,
settings=settings,
)
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,
)
}
class EndpointEnableApi(Resource):
@ -107,9 +134,14 @@ class EndpointEnableApi(Resource):
endpoint_id = args["endpoint_id"]
return EndpointService.enable_endpoint(
tenant_id=user.current_tenant_id, user_id=user.id, endpoint_id=endpoint_id
)
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
)
}
class EndpointDisableApi(Resource):
@ -125,9 +157,14 @@ class EndpointDisableApi(Resource):
endpoint_id = args["endpoint_id"]
return EndpointService.disable_endpoint(
tenant_id=user.current_tenant_id, user_id=user.id, endpoint_id=endpoint_id
)
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
)
}
api.add_resource(EndpointCreateApi, "/workspaces/current/endpoints/create")

View File

@ -3,16 +3,18 @@ from core.plugin.manager.base import BasePluginManager
class PluginEndpointManager(BasePluginManager):
def create_endpoint(self, tenant_id: str, user_id: str, plugin_unique_identifier: str, name: str, settings: dict):
def create_endpoint(
self, tenant_id: str, user_id: str, plugin_unique_identifier: str, name: str, settings: dict
) -> bool:
"""
Create an endpoint for the given plugin.
Errors will be raised if any error occurs.
"""
self._request_with_plugin_daemon_response(
return self._request_with_plugin_daemon_response(
"POST",
f"plugin/{tenant_id}/endpoint/setup",
dict,
bool,
headers={
"Content-Type": "application/json",
},
@ -24,7 +26,7 @@ class PluginEndpointManager(BasePluginManager):
},
)
def list_endpoints(self, tenant_id: str, user_id: str):
def list_endpoints(self, tenant_id: str, user_id: str, page: int, page_size: int):
"""
List all endpoints for the given tenant and user.
"""
@ -32,7 +34,7 @@ class PluginEndpointManager(BasePluginManager):
"GET",
f"plugin/{tenant_id}/endpoint/list",
list[EndpointEntity],
params={"page": 1, "page_size": 256},
params={"page": page, "page_size": page_size},
)
def list_plugin_endpoints(self, tenant_id: str, user_id: str, plugin_unique_identifier: str):
@ -55,53 +57,65 @@ class PluginEndpointManager(BasePluginManager):
"""
Update the settings of the given endpoint.
"""
self._request_with_plugin_daemon_response(
return self._request_with_plugin_daemon_response(
"POST",
f"plugin/{tenant_id}/endpoint/update",
dict,
bool,
data={
"user_id": user_id,
"endpoint_id": endpoint_id,
"name": name,
"settings": settings,
},
headers={
"Content-Type": "application/json",
},
)
def delete_endpoint(self, tenant_id: str, user_id: str, endpoint_id: str):
"""
Delete the given endpoint.
"""
self._request_with_plugin_daemon_response(
"DELETE",
return self._request_with_plugin_daemon_response(
"POST",
f"plugin/{tenant_id}/endpoint/remove",
dict,
bool,
data={
"endpoint_id": endpoint_id,
},
headers={
"Content-Type": "application/json",
},
)
def enable_endpoint(self, tenant_id: str, user_id: str, endpoint_id: str):
"""
Enable the given endpoint.
"""
self._request_with_plugin_daemon_response(
return self._request_with_plugin_daemon_response(
"POST",
f"plugin/{tenant_id}/endpoint/enable",
dict,
bool,
data={
"endpoint_id": endpoint_id,
},
headers={
"Content-Type": "application/json",
},
)
def disable_endpoint(self, tenant_id: str, user_id: str, endpoint_id: str):
"""
Disable the given endpoint.
"""
self._request_with_plugin_daemon_response(
return self._request_with_plugin_daemon_response(
"POST",
f"plugin/{tenant_id}/endpoint/disable",
dict,
bool,
data={
"endpoint_id": endpoint_id,
},
headers={
"Content-Type": "application/json",
},
)

View File

@ -13,10 +13,12 @@ class EndpointService:
)
@classmethod
def list_endpoints(cls, tenant_id: str, user_id: str):
def list_endpoints(cls, tenant_id: str, user_id: str, page: int, page_size: int):
return PluginEndpointManager().list_endpoints(
tenant_id=tenant_id,
user_id=user_id,
page=page,
page_size=page_size,
)
@classmethod