feat: uninstall plugins

This commit is contained in:
Yeuoly 2024-10-08 22:38:33 +08:00
parent e27a03ae15
commit a9c21ef929
No known key found for this signature in database
GPG Key ID: A66E7E320FB19F61
4 changed files with 30 additions and 6 deletions

View File

@ -115,9 +115,28 @@ class PluginInstallFromPkgApi(Resource):
return Response(generator(), mimetype="text/event-stream")
class PluginUninstallApi(Resource):
@setup_required
@login_required
@account_initialization_required
def post(self):
req = reqparse.RequestParser()
req.add_argument("plugin_installation_id", type=str, required=True, location="json")
args = req.parse_args()
user = current_user
if not user.is_admin_or_owner:
raise Forbidden()
tenant_id = user.current_tenant_id
return {"success": PluginService.uninstall_plugin(tenant_id, args["plugin_installation_id"])}
api.add_resource(PluginDebuggingKeyApi, "/workspaces/current/plugin/debugging-key")
api.add_resource(PluginListApi, "/workspaces/current/plugin/list")
api.add_resource(PluginIconApi, "/workspaces/current/plugin/icon")
api.add_resource(PluginInstallCheckUniqueIdentifierApi, "/workspaces/current/plugin/install/check_unique_identifier")
api.add_resource(PluginInstallFromUniqueIdentifierApi, "/workspaces/current/plugin/install/from_unique_identifier")
api.add_resource(PluginInstallFromPkgApi, "/workspaces/current/plugin/install/from_pkg")
api.add_resource(PluginUninstallApi, "/workspaces/current/plugin/uninstall")

View File

@ -47,9 +47,9 @@ class PluginResourceRequirements(BaseModel):
class PluginDeclaration(BaseModel):
class Plugins(BaseModel):
tools: list[str] = Field(default_factory=list)
models: list[str] = Field(default_factory=list)
endpoints: list[str] = Field(default_factory=list)
tools: Optional[list[str]] = Field(default_factory=list)
models: Optional[list[str]] = Field(default_factory=list)
endpoints: Optional[list[str]] = Field(default_factory=list)
version: str = Field(..., pattern=r"^\d{1,4}(\.\d{1,4}){1,3}(-\w{1,16})?$")
author: Optional[str] = Field(..., pattern=r"^[a-zA-Z0-9_-]{1,64}$")

View File

@ -53,16 +53,16 @@ class PluginInstallationManager(BasePluginManager):
headers={"Content-Type": "application/json"},
)
def uninstall(self, tenant_id: str, identifier: str) -> bool:
def uninstall(self, tenant_id: str, plugin_installation_id: str) -> bool:
"""
Uninstall a plugin.
"""
return self._request_with_plugin_daemon_response(
"DELETE",
"POST",
f"plugin/{tenant_id}/management/uninstall",
bool,
data={
"plugin_unique_identifier": identifier,
"plugin_installation_id": plugin_installation_id,
},
headers={"Content-Type": "application/json"},
)

View File

@ -43,3 +43,8 @@ class PluginService:
yield from manager.install_from_pkg(tenant_id, pkg)
except PluginDaemonInnerError as e:
yield InstallPluginMessage(event=InstallPluginMessage.Event.Error, data=str(e.message))
@staticmethod
def uninstall_plugin(tenant_id: str, plugin_installation_id: str) -> bool:
manager = PluginInstallationManager()
return manager.uninstall(tenant_id, plugin_installation_id)