diff --git a/app/db/plugindata_oper.py b/app/db/plugindata_oper.py index 317724bc7..a9328bc7b 100644 --- a/app/db/plugindata_oper.py +++ b/app/db/plugindata_oper.py @@ -24,6 +24,24 @@ class PluginDataOper(DbOper): else: PluginData(plugin_id=plugin_id, key=key, value=value).create(self._db) + async def async_save(self, plugin_id: str, key: str, value: Any) -> None: + """ + 异步保存插件数据 + + :param plugin_id: 插件ID + :param key: 数据键 + :param value: 数据值 + """ + plugin = await PluginData.async_get_plugin_data_by_key( + self._db, plugin_id, key + ) + if plugin: + await plugin.async_update(self._db, {"value": value}) + else: + await PluginData( + plugin_id=plugin_id, key=key, value=value + ).async_create(self._db) + def get_data(self, plugin_id: str, key: Optional[str] = None) -> Any: """ 获取插件数据 diff --git a/app/plugins/__init__.py b/app/plugins/__init__.py index b4804d6d1..56761914f 100644 --- a/app/plugins/__init__.py +++ b/app/plugins/__init__.py @@ -277,6 +277,20 @@ class _PluginBase(metaclass=ABCMeta): plugin_id = self.__class__.__name__ self.plugindata.save(plugin_id, key, value) + async def async_save_data( + self, key: str, value: Any, plugin_id: Optional[str] = None + ) -> None: + """ + 异步保存插件数据 + + :param key: 数据键 + :param value: 数据值 + :param plugin_id: 插件ID + """ + if not plugin_id: + plugin_id = self.__class__.__name__ + await self.plugindata.async_save(plugin_id, key, value) + def get_data(self, key: Optional[str] = None, plugin_id: Optional[str] = None) -> Any: """ 获取插件数据 @@ -287,6 +301,20 @@ class _PluginBase(metaclass=ABCMeta): plugin_id = self.__class__.__name__ return self.plugindata.get_data(plugin_id, key) + async def async_get_data( + self, key: Optional[str] = None, plugin_id: Optional[str] = None + ) -> Any: + """ + 异步获取插件数据 + + :param key: 数据键 + :param plugin_id: 插件ID + :return: 指定键的数据值或插件的全部数据 + """ + if not plugin_id: + plugin_id = self.__class__.__name__ + return await self.plugindata.async_get_data(plugin_id, key) + def del_data(self, key: str, plugin_id: Optional[str] = None) -> Any: """ 删除插件数据