我正在尝试创建一个插件,当一个新文件被添加到某个文件夹时,从文件导入任务。在
解析文件后,我可以创建一个新的票据,如下所示:
tkt = Ticket(env)
tkt['reporter'] = 'me'
tkt['summary'] = 'my new ticket'
tkt['description'] = 'some bogus description'
tkt['status'] = 'new'
tkt.insert()
其中env是环境变量:
^{pr2}$问题是你必须硬编码到插件代码中
所以问题是:有没有一种方法可以找到通向当前环境的路径?在
经过一番思考,我决定我不能以我想要的方式编写trac插件(我需要它无休止地运行) 所以我决定运行一个外部脚本,它将在操作系统启动后不停地监视某个文件夹,并在出现带有票证信息的新文件时添加新的票证。在
所以最新的问题是:在这种情况下,我如何获得环境?在
下面是我的代码示例:
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
正如the comments中的RjOllos所正确指出的,TRAC模块的常见做法是将
Component
类的子类化。这将使您能够轻松访问当前环境:你可以找到更多的例子here。在
至于你问题的第二部分。没有中央存储库,其中列出了每个TRAC环境。TRAC中的环境只是包含一些特定文件的目录,所以硬盘上的任何目录都可以是TRAC环境。您可以尝试识别这样的目录,例如检查它们是否包含子目录confwithtrac.ini公司例如,文件,或db子目录跟踪数据库文件。您可以阅读有关环境文件夹结构here。在
在您的情况下,最好的解决方案是用户提供环境路径作为外部进程运行的强制参数。这正是运行TRAC时的情况-您还提供了一个目录的路径,其中包含要运行的环境。在
相关问题 更多 >
编程相关推荐