【发布时间】:2015-12-23 05:28:53
【问题描述】:
是否可以通过插件将工单报告添加到可用报告中,以便在安装插件后自动可用?还是必须手动保存带有预期列和过滤器的自定义查询?
如果可以通过python代码实现,那么要实现的Trac接口是什么?
【问题讨论】:
是否可以通过插件将工单报告添加到可用报告中,以便在安装插件后自动可用?还是必须手动保存带有预期列和过滤器的自定义查询?
如果可以通过python代码实现,那么要实现的Trac接口是什么?
【问题讨论】:
您可以通过IEnvironmentSetupParticipant 的实现插入报告。 env.py 中的示例用法。在env.py 中,报告插入environment_created。您需要在upgrade_environment 中插入报告。插入报告的示例代码可以在report.py 中找到。 needs_upgrade 确定在 Environment 启动时是否调用 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 方法可以用来插入报告。
也就是说,我不确定您是否需要使用set_database_version 在system 表中为您的插件添加一个条目。您可能只查询report 表并检查您的报告是否存在,使用该检查从IEnvironmentSetupParticipant.needs_upgrade 返回一个布尔值,这将确定IEnvironmentSetupParticipant.upgrade_environment 是否被调用。如果您正在为 Trac 1.0.x 进行开发,您可以从 Trac 1.1.6 中的 DatabaseManager 类中复制代码。使用CodeReviewerPlugin 可以看到另一种方法,为此我制作了一个compat.py 模块,添加了我需要的方法。 compat.py 方法的优点是可以从 DatabaseManager 类复制方法,而不会污染代码库的主要模块。将来,当您的插件不再支持 Trac compat.py 模块并修改插件代码中的导入,而不必更改任何主要插件逻辑。
【讨论】: