Trac插件在票证创建时使用票证id设置字段值

2024-06-28 19:43:29 发布

您现在位置:Python中文网/ 问答频道 /正文

前提:我的票证有一个自定义字段recipe,它应该包含一个指向以票证id命名的wiki页面的链接。 例如,Ticket#1应该将recipe设置为[wiki:TicketRecipe_1],Ticket#1234应该有[wiki:TicketRecipe_1234]等等。你知道吗

由于我希望在ticket creation/modify时自动填充该链接,因此我基于ITicketManipulator入口点构建了一个非常简单的插件。你知道吗

from trac.core import Component, implements
from trac.ticket.api import ITicketManipulator


class WikiLinkPopulator(Component):
    implements(ITicketManipulator)

    def prepare_ticket(self, req, ticket, fields, actions):
        pass

    def validate_ticket(self, req, ticket):

        wikilink = "[wiki:TicketRecipe_%s]" % (ticket.id)
        if ticket['recipe_link'] != wikilink:
            ticket['recipe_link'] = wikilink

        return []

当我修改一个现有的票证时,这是有效的,但是当我创建一个新的票证时,结果是[wiki:TicketRecipe_None]。 可能是因为在呼叫入口点时,车票id/号码仍然未知?你知道吗

是否有办法在票证创建时也设置值?你知道吗


Tags: fromimportid链接wikirecipeticket票证
1条回答
网友
1楼 · 发布于 2024-06-28 19:43:29

您可以实现ITicketChangeListener。以下插件应与Trac 1.0+配合使用:

from trac.core import Component, implements
from trac.ticket.api import ITicketChangeListener

class WikiLinkPopulator(Component):
    implements(ITicketChangeListener)

    def ticket_created(self, ticket):
        wikilink = "[wiki:TicketRecipe_%s]" % (ticket.id)
        self.env.db_transaction("""
            UPDATE ticket_custom SET value=%s WHERE name=%s AND ticket=%s
            """, (wikilink, 'recipe_link', ticket.id))

    def ticket_changed(self, ticket, comment, author, old_values):
        pass

    def ticket_deleted(self, ticket):
        pass

    def ticket_comment_modified(self, ticket, cdate, author, comment, old_comment):
        pass

    def ticket_change_deleted(self, ticket, cdate, changes):
        pass

    def prepare_ticket(self, req, ticket, fields, actions):
        pass

相关问题 更多 >