BTS.Trac (1.0.51.183) | 2009-07-08 20:03 |
ExcelRedmineAddIn (1.0.1) | 2009-06-15 23:07 |
ExcelTracAddIn (1.2.1) | 2009-06-15 23:09 |
OpenProj (1.4-ja-dev2) | 2009-08-14 09:02 |
ProjectTracAddIn (1.0.0) | 2009-03-14 14:30 |
TaskTrayTrac (2.0β1) | 2009-07-31 00:55 |
TicketImportTemplate (1.0) | 2009-02-03 22:55 |
TracPluginTemplateMaker (0.2) | 2009-10-11 22:59 |
VisualStudioTracAddIn (2.0 β1) | 2009-07-31 00:53 |
プラグインの作り方を紹介します。
+ helloplugin/ + helloworld/ + __init__.py + helloworld.py + setup.py
- import re
- from genshi.builder import tag
- from trac.core import *
- from trac.web import IRequestHandler
- from trac.web.chrome import INavigationContributor
- class HelloWorldPlugin(Component):
- implements(INavigationContributor, IRequestHandler)
- # INavigationContributor methods
- def get_active_navigation_item(self, req):
- return 'helloworld'
- def get_navigation_items(self, req):
- yield ('mainnav', 'helloworld',
- tag.a('Hello World', href=req.href.helloworld()))
- # IRequestHandler methods
- def match_request(self, req):
- return re.match(r'/helloworld(?:_trac)?(?:/.*)?$', req.path_info)
- def process_request(self, req):
- req.send_response(200)
- req.send_header('Content-Type', 'text/plain')
- req.end_headers()
- req.write('Hello world!')
プラグインのビルド、インストールは他のプラグインと同様です。インストールすると、Hello Worldというメニューが追加され、メニューをクリックするとHello Worldが表示されます。
Tracの通常のプラグインは、テンプレートを利用して画面をレンダリングしています。テンプレートを利用するには、次のようにします。
下記のようにsetup.pyを書き換えます。
- import re
- from genshi.builder import tag
- from trac.core import *
- from trac.web import IRequestHandler
- from trac.web.chrome import INavigationContributor, ITemplateProvider
- class HelloWorldPlugin(Component):
- implements(INavigationContributor, IRequestHandler, ITemplateProvider)
- # INavigationContributor methods
- def get_active_navigation_item(self, req):
- return 'helloworld'
- def get_navigation_items(self, req):
- yield ('mainnav', 'helloworld',
- tag.a('Hello World', href=req.href.helloworld()))
- # IRequestHandler methods
- def match_request(self, req):
- return re.match(r'/helloworld(?:_trac)?(?:/.*)?$', req.path_info)
- def process_request(self, req):
- data = {}
- # テンプレート名、データ、コンテンツタイプを返却
- return 'hello.html', data, None
- # ITemplateProvider methods
- # テンプレートのあるディレクトリを指定
- def get_templates_dirs(self):
- from pkg_resources import resource_filename
- return [resource_filename(__name__, 'templates')]