mirror of https://github.com/langgenius/dify.git
feat: uninstall plugins
This commit is contained in:
parent
e27a03ae15
commit
a9c21ef929
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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}$")
|
||||
|
|
|
|||
|
|
@ -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"},
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue