我正在寻找一种让人们通过电子邮件打开 Trac 票证的方法。
到目前为止,我发现的唯一解决方案是email2trac
| https://oss.trac.surfsara.nl/email2trac/wiki这个解决方案的问题是我不想安装和设置邮件服务器。我想要一个侵入性较小的解决方案。
我正在考虑一个 cron 脚本,它从 POP3 帐户下载消息并通过解析内容来打开/更新票证。
这可能吗 ?
我正在寻找一种让人们通过电子邮件打开 Trac 票证的方法。
到目前为止,我发现的唯一解决方案是email2trac
| https://oss.trac.surfsara.nl/email2trac/wiki这个解决方案的问题是我不想安装和设置邮件服务器。我想要一个侵入性较小的解决方案。
我正在考虑一个 cron 脚本,它从 POP3 帐户下载消息并通过解析内容来打开/更新票证。
这可能吗 ?
我正在考虑一个 cron 脚本,它从 POP3 帐户下载消息并通过解析内容来打开/更新票证。这可能吗 ?
我认为有可能是的。当然,一旦您从 POP3 帐户获得数据,您就可以对其进行迭代,并使用 Trac API 根据需要创建/更新票证。
对于数据检索步骤,您可以创建一个新插件,其中一个Component
实现IAdminCommandProvider
接口。您如何实际检索和解析数据是由您决定的实现细节,但您可能可以使用email / poplib模块并遵循 email2trac 中的一些解析结构。
对于一些未经测试的样板,让你开始......
from trac.admin import IAdminCommandProvider
from trac.core import Component, implements
from trac.ticket import Ticket
def EmailToTicket(Component):
implements(IAdminCommandProvider)
def get_admin_commands(self):
yield ('emailtoticket retrieve',
'Retrieve emails from a mail server.'
None, self._do_retrieve_email)
def _do_retrieve_email(self):
# TODO - log into the mail server, then parse data.
# It would be nice to have a tuple of dictionaries,
# with keys like id, summary, description etc
# iterate over the data and create/update tickets
for email in emails:
if 'id' in email: # assuming email is a dictionary
self._update_ticket(email)
else:
self._create_ticket(email)
def _update_ticket(self, data):
ticket = Ticket(self.env, data[id])
for field, value in data.iteritems():
ticket[field] = value
ticket.save_changes(author, comment, when)
def _create_ticket(self, data):
ticket = Ticket(self.env)
for field, value in data.iteritems():
ticket[field] = value
ticket.insert()
然后,您可以让 Cron 选项卡通过TracAdmin执行此命令(频率取决于您 - 下面的示例每分钟运行一次)
* * * * * trac-admin /path/to/projenv emailtoticket retrieve
要了解有关插件开发的更多信息,您应该阅读这个 Trac wiki 页面。