如何在Trac中获取环境路径

时间:2013-11-25 10:06:16

标签: python trac

我正在尝试创建一个插件,以便在将新文件添加到某个文件夹时从文件中导入任务。

解析文件后,我可以创建一个新的票证:

tkt = Ticket(env)
tkt['reporter'] = 'me'
tkt['summary'] = 'my new ticket'
tkt['description'] = 'some bogus description'
tkt['status'] = 'new'
tkt.insert()

其中env是一个环境变量:

env = Environment('/path/to/trac/env')

事情就是你必须硬编码插入代码的路径

所以问题是:有没有办法获得当前环境的路径?

经过一番思考后,我决定不能按照我想要的方式编写trac插件(我需要它无休止地运行) 因此,我决定运行一个外部脚本,该脚本将在OS启动后运行不间断监视某个文件夹,并在出现带有票证信息的新文件时添加新票据。

所以更新的问题是:在这种情况下如何获得环境?

以下是我的代码示例:

import sys, os, time
from trac.core import *
from trac.env import *
from trac.ticket.model import Ticket
from trac.ticket.notification import TicketNotifyEmail

env = Environment("C:\\Trac\\TracDB\Planing")

db = env.get_db_cnx()
cursor = db.cursor()

path_to_watch = "C:\\trac_in_work\\upload\\"
before = dict([(f, None) for f in os.listdir(path_to_watch)])
while 1:
    time.sleep(10)
    after = dict([(f, None) for f in os.listdir(path_to_watch)])
    added = [f for f in after if not f in before]
    if added:
        for new_file in added:
            file = open(path_to_watch+new_file)

            tickets = []
            i = 0

            for line in file:
                tickets.append(line.split(','))

            for each in tickets:

                cursor.execute("SELECT ticket FROM ticket_custom WHERE name='ic_id' and value="+each[1])
                exist = cursor.fetchall()
                if not exist:

                    ticket = Ticket(env)
                    ticket['summary'] = each[0]
                    ticket['owner'] = "ako"
                    ticket['status'] = "new"
                    ticket['ic_id'] = each[1]
                    ticket.insert()
                    notification.send(ticket)

                    time.sleep(1)

    before = after

1 个答案:

答案 0 :(得分:1)

正如RjOllosthe comments正确指出的那样,TRAC模块的常见做法是将Component类子类化。这将使您可以轻松访问当前环境:

from trac.core import *

class MyModule(Component):
    def createTicket(self):
        return Ticket(self.env)

您可以找到更多示例here

关于你问题的第二部分。没有中央存储库,其中列出了每个TRAC环境。 TRAC中的环境只是包含一些特定文件的目录,因此硬盘驱动器上的任何目录都可以是TRAC环境。您可以尝试识别此类目录,例如检查它们是否包含带有 trac.ini 文件的子目录 conf ,或者 db 子目录 trac.db 文件。您可以阅读有关环境文件夹结构here

的信息

在您的情况下,最佳解决方案是让用户提供环境路径作为外部进程运行的必需参数。运行TRAC时就是这种情况 - 您还提供了一个指向要运行环境的目录的路径。