是否可以通过插件向可用报告添加故障单报告,以便在安装插件后它会自动可用?或者是否必须使用预期的列和过滤器手动保存自定义查询?
如果可以通过python代码执行此操作,那么要实现的Trac接口是什么?
答案 0 :(得分:1)
您可以通过IEnvironmentSetupParticipant的实施插入报告。 env.py中的示例用法。在env.py
中,报告将插入environment_created
。您需要在upgrade_environment
中插入报告。可以在report.py中找到插入报告的示例代码。 needs_upgrade
确定是否在环境启动时调用upgrade_environment
,因此您需要提供确定报告是否已存在的逻辑,如果存在则返回False
并True
如果他们不是。如果返回True
,则会调用upgrade_environment
(对于您的案例environment_created
可以是pass
,或者可以直接调用upgrade_environment
,后者是#8172中讨论的次要优化。有关report
表格的信息,请参阅Database Schema。
在Trac 1.2(尚未发布)中,我们尝试通过向DatabaseManager class添加方法来更轻松地使用数据库。 DatabaseManager for Trac 1.1.6包括方法set_database_version
和get_database_version
。在检查数据库表是否需要升级时,这对于减少IEnvironmentSetupParticipant.needs_upgrade
中所需的代码量非常有用(更简单的是只调用DatabaseManager.needs_upgrade)。您还可以使用insert_into_tables
方法插入报告。
也就是说,我不确定您是否需要使用system
在set_database_version
表格中为您的插件添加条目。您可以只查询report
表并检查您的报告是否存在,使用该检查从IEnvironmentSetupParticipant.needs_upgrade
返回一个布尔值,这将确定是否调用IEnvironmentSetupParticipant.upgrade_environment
。如果您正在为Trac 1.0.x开发,则可以从Trac 1.1.6中的DatabaseManager类复制代码。使用CodeReviewerPlugin可以看到另一种方法,为此我创建了一个compat.py模块,它添加了我需要的方法。 compat.py
方法的优点是可以从DatabaseManager
类复制方法,而不会污染代码库的主要模块。将来当你的插件放弃对Trac的支持时1.2您可以删除compat.py
模块并修改插件代码中的导入,但不必更改任何主插件逻辑。