我正在尝试创建一个插件,以便在将新文件添加到某个文件夹时从文件中导入任务。
解析文件后,我可以创建一个新的票证:
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
答案 0 :(得分:1)
正如RjOllos中the 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时就是这种情况 - 您还提供了一个指向要运行环境的目录的路径。