feat: uninstall plugins

pull/9184/head
Yeuoly 2 years ago
parent e27a03ae15
commit a9c21ef929
No known key found for this signature in database
GPG Key ID: A66E7E320FB19F61

@ -115,9 +115,28 @@ class PluginInstallFromPkgApi(Resource):
return Response(generator(), mimetype="text/event-stream") 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(PluginDebuggingKeyApi, "/workspaces/current/plugin/debugging-key")
api.add_resource(PluginListApi, "/workspaces/current/plugin/list") api.add_resource(PluginListApi, "/workspaces/current/plugin/list")
api.add_resource(PluginIconApi, "/workspaces/current/plugin/icon") api.add_resource(PluginIconApi, "/workspaces/current/plugin/icon")
api.add_resource(PluginInstallCheckUniqueIdentifierApi, "/workspaces/current/plugin/install/check_unique_identifier") 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(PluginInstallFromUniqueIdentifierApi, "/workspaces/current/plugin/install/from_unique_identifier")
api.add_resource(PluginInstallFromPkgApi, "/workspaces/current/plugin/install/from_pkg") api.add_resource(PluginInstallFromPkgApi, "/workspaces/current/plugin/install/from_pkg")
api.add_resource(PluginUninstallApi, "/workspaces/current/plugin/uninstall")

@ -47,9 +47,9 @@ class PluginResourceRequirements(BaseModel):
class PluginDeclaration(BaseModel): class PluginDeclaration(BaseModel):
class Plugins(BaseModel): class Plugins(BaseModel):
tools: list[str] = Field(default_factory=list) tools: Optional[list[str]] = Field(default_factory=list)
models: list[str] = Field(default_factory=list) models: Optional[list[str]] = Field(default_factory=list)
endpoints: 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})?$") 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}$") author: Optional[str] = Field(..., pattern=r"^[a-zA-Z0-9_-]{1,64}$")

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

@ -43,3 +43,8 @@ class PluginService:
yield from manager.install_from_pkg(tenant_id, pkg) yield from manager.install_from_pkg(tenant_id, pkg)
except PluginDaemonInnerError as e: except PluginDaemonInnerError as e:
yield InstallPluginMessage(event=InstallPluginMessage.Event.Error, data=str(e.message)) 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)

Loading…
Cancel
Save