下载由Trac-Wiki宏动态创建的文件的链接

时间:2011-06-08 08:25:49

标签: python trac genshi

我被赋予了为Trac编写插件的任务。 它应该为问题跟踪系统中提交的票证数量和估算提供燃尽数据。 用户将其请求作为wikimacro写入,并提供了一个链接/按钮,用于将burndown作为csv文件下载,也计划输出图表,但优先级较低。

我有一个处理数据的工作解决方案,但我留下了以下问题。

我的问题

如何在Wikipage上为用户请求动态创建的文件提供下载链接/按钮?

我已经看到了一些尝试在trac源本身和其他插件中发送文件,但是因为我是网络编程的新手并没有真正帮助。

UPDATE1 我一直试图像菲利克斯建议的那样解决问题,这为我开辟了一个新问题。 这个(愚蠢的)例子应该证明我的问题。 我的宏生成以下URL并将其添加为wikipage的链接。

//http://servername.com/projectname/wiki/page_name?teddy=bear    

但即使条件返回true,RequestHandler也不会做出反应。 编辑:此段代码现在显示该示例的工作版本。

新网址:

#example url
#http://127.0.0.1:8000/prove/files/new

class CustomRequestHandlerModule(Component):
    implements(IRequestHandler)

    def match_request(self,req):
        #old, not working
        #return "teddy=bear"== str(req.path_info).split('?')[1]
        #new
        accept="/files/new"== str(req.path_info)
        return accept

    def process_request(self,req):
        csvfile = self.create_csv()
        req.send_response(200)
        req.send_header('Content-Type', 'text/csv')
        req.send_header('Content-length', len(csvfile))
        req.send_header('Content-Disposition','filename=lala.csv')
        req.end_headers()
        req.write(csvfile)
        raise RequestDone     

UPDATE2 插入loggingstatements显示match_request永远不会被调用。

我做错了什么? (是的,create_csv()已经存在)

更新3 Thx,帮助=)

2 个答案:

答案 0 :(得分:2)

基本上,您需要编写自己的IRequestHandler来处理特定的URL并返回动态创建的数据。之后,您应该返回一个为您的请求处理程序配置的URL。

答案 1 :(得分:2)

如果未调用match_request,则process_request永远不会有机会执行。假设您的插件没有任何问题阻止Trac正确加载它,可能发生的是另一个处理程序在调用match_request版本之前匹配URL。尝试将日志级别增加到“调试”,看看它是否提供了足够的信息来告诉谁正在处理该请求。

另一种选择是为自动生成的文件创建自定义“命名空间”。尝试使用“文件”之类的内容替换生成的网址中的“wiki”。这可以防止任何内置处理程序在调用插件的match_request方法之前处理请求。