diff --git a/api/controllers/console/workspace/plugin.py b/api/controllers/console/workspace/plugin.py index 56b6634757..572723ff65 100644 --- a/api/controllers/console/workspace/plugin.py +++ b/api/controllers/console/workspace/plugin.py @@ -656,7 +656,9 @@ class PluginReadmeApi(Resource): return jsonable_encoder( { "readme": PluginService.fetch_plugin_readme( - tenant_id, args["plugin_unique_identifier"], args.get("language", "en-US") + tenant_id, + args["plugin_unique_identifier"], + args.get("language", "en-US") ) } ) diff --git a/api/core/plugin/entities/plugin_daemon.py b/api/core/plugin/entities/plugin_daemon.py index 16ab661092..3655c2e8aa 100644 --- a/api/core/plugin/entities/plugin_daemon.py +++ b/api/core/plugin/entities/plugin_daemon.py @@ -196,3 +196,7 @@ class PluginListResponse(BaseModel): class PluginDynamicSelectOptionsResponse(BaseModel): options: Sequence[PluginParameterOption] = Field(description="The options of the dynamic select.") + +class PluginReadmeResponse(BaseModel): + content: str = Field(description="The readme of the plugin.") + language: str = Field(description="The language of the readme.") diff --git a/api/core/plugin/impl/plugin.py b/api/core/plugin/impl/plugin.py index 09ba347535..ab0b1c15ab 100644 --- a/api/core/plugin/impl/plugin.py +++ b/api/core/plugin/impl/plugin.py @@ -1,5 +1,7 @@ from collections.abc import Sequence +from requests import HTTPError + from core.plugin.entities.bundle import PluginBundleDependency from core.plugin.entities.plugin import ( GenericProviderID, @@ -14,6 +16,7 @@ from core.plugin.entities.plugin_daemon import ( PluginInstallTask, PluginInstallTaskStartResponse, PluginListResponse, + PluginReadmeResponse, ) from core.plugin.impl.base import BasePluginClient @@ -23,12 +26,23 @@ class PluginInstaller(BasePluginClient): """ Fetch plugin readme """ - return self._request_with_plugin_daemon_response( - "GET", - f"plugin/{tenant_id}/management/fetch/readme", - str, - params={"plugin_unique_identifier": plugin_unique_identifier, "language": language}, - ) + try: + response = self._request_with_plugin_daemon_response( + "GET", + f"plugin/{tenant_id}/management/fetch/readme", + PluginReadmeResponse, + params={ + "tenant_id":tenant_id, + "plugin_unique_identifier": plugin_unique_identifier, + "language": language + } + ) + return response.content + except HTTPError as e: + message = e.args[0] + if "404" in message: + return "" + raise e def fetch_plugin_by_identifier( self,