Как мне отлаживать плагины Trac?

Я собираюсь начать большую работу по расширению Trac, чтобы он соответствовал требованиям нашего бизнеса. До сих пор я использовал pythonWin, а теперь и Netbeans 6.5 в качестве среды разработки - ни одна из них, похоже, не предоставляет никакого способа отладки плагина, над которым я работаю.

Я новичок в Python, поэтому, вероятно, не настроил среду разработки, как ее можно настроить для отладки.

Я упускаю что-то очевидное? Кажется немного архаичным прибегать к печати отладочных сообщений в журнале Trac, как я сейчас отлаживаю.


person Chris B    schedule 08.06.2009    source источник


Ответы (5)


Вы можете создать wsgi-скрипт-оболочку и запустить его в отладчике. Например:

import os
import trac.web.main

os.environ['TRAC_ENV'] = '/path/to/your/trac/env'

application = trac.web.main.dispatch_request

from flup.server.fcgi import WSGIServer
server = WSGIServer(application, bindAddress=("127.0.0.1", 9000), )
server.run()

Вы запустите этот скрипт в отладчике и сможете использовать lighttpd в качестве внешнего интерфейса для веб-приложения с такой тривиальной конфигурацией:

server.document-root = "/path/to/your/trac/env"
server.port = 1234
server.modules = ( "mod_fastcgi" )
server.pid-file = "/path/to/your/trac/env/httpd.pid"
server.errorlog = "/path/to/your/trac/env/error.log"
fastcgi.server = ( "/" =>
  (( "host" => "127.0.0.1",
     "port" => 9000,
     "docroot" => "/",
     "check-local" => "disable",
  ))
)

Просто запустите оболочку fcgi wsgi в отладчике, установите точки останова в своем плагине и откройте веб-страницу.

person abbot    schedule 08.06.2009

Обычно мы сначала проводим модульное тестирование.

Затем мы пишем сообщения журнала для диагностики проблем.

Как правило, мы не сильно зависим от отладки, потому что это часто бывает трудно сделать в ситуациях, когда скрипты Python встроены в более крупный продукт.

person S.Lott    schedule 08.06.2009

Я обнаружил, что Winpdb — достойный отладчик Python.

Но, как указывает С.Лотт, отладчики могут оказаться не очень полезными для вас, когда ваш проект встроен в более крупный проект.

person tgray    schedule 08.06.2009

Trac содержит хорошие примеры кода Python, использование его в качестве руководства поможет избежать ошибок. Просто обязательно тестируйте свой код, и делайте это часто, поскольку вы новичок в Python... Вы обнаружите, что вам не нужен отладчик.

Для модульного тестирования воспользуйтесь PyUnit.

person Jason Coon    schedule 08.06.2009

Я счел наиболее полезным добавить эти причудливые окна сообщений Trac во время выполнения в качестве справки по отладке или трассировке, вот так:

from trac.web.chrome import add_notice
...
def any_function_somewhere(self, req, ...anyother args...):
    ...
    var = ...some value...
    add_notice(req, "my variable value I am tracing %s" % var)

Иногда это удобнее, чем потом читать журнал. Хотя это работает только в том случае, если функция, которую вы запускаете, имеет этот req arg.

person falkb    schedule 10.06.2013