Мне дали задание написать плагин для Trac. Он должен предоставлять данные о выгорании для количества билетов и оценок, внесенных в систему отслеживания проблем. Пользователь записывает свой запрос как wikimacro, и ему предоставляется ссылка / кнопка для загрузки Burndown в виде csv-файла, также планируется вывод в виде диаграммы, но имеет более низкий приоритет.
У меня есть рабочее решение для обработки данных, но у меня осталась следующая проблема.
Мой вопрос
Как я могу предоставить ссылку для скачивания / кнопку на Wikipage для файла, который динамически создается по запросу пользователя?
Я видел несколько попыток отправить файлы в самом источнике trac и других плагинах, но, поскольку я новичок в веб-программировании, это не очень помогает.
Update1 Я пытался решить проблему способом, предложенным Феликсом, и это открыло для меня новую проблему. Этот (глупый) пример должен продемонстрировать мою проблему. Мой макрос генерирует следующий URL-адрес и добавляет его в качестве ссылки на вики-страницу.
//http://servername.com/projectname/wiki/page_name?teddy=bear
Но RequestHandler не реагирует, даже если условие возвращает true. Изменить: этот фрагмент кода теперь показывает рабочую версию для примера.
Новый URL:
#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 Спасибо, за помощь =)