マクロは書いたことがあるけどプラグインをちゃんと作るにはeggにしないといけない。そのへんのこと。
- http://trac.edgewall.org/wiki/TracDev/PluginDevelopment
- http://trac-hacks.org/wiki/EggCookingTutorial/BasicEggCooking
- API http://trac.edgewall.org/browser/trunk/trac/web/api.py
手順
名前
- eggの名前は「FooBarPlugin」
- パッケージ名は「tracfoobar」
- というのがTrac-Hacksの流儀みたいだ
DBを使うプラグイン
テーブル作成などの初期化は、IEnvironmentSetupParticipantを利用する。これがあるとtrac-admin upgradeが必要になるのね。
TagsPluginのこのへん参照。 http://trac-hacks.org/browser/tagsplugin/trunk/tractags/api.py#L377
自分でインターフェースを作る
自分でインターフェースを作って自分で拡張することができる。コンポーネント間の結合を疎にできる、とか、いろんな機能のを作っておいてまとめる、みたいなことができる。
1.インターフェースとなるクラスを作る。
class IFooBar(Interface): def method1(self): pass def method2(self, arg): pass
2.実装クラスを作る。
class FooBar(Component): implements(IFooBar): def method1(self): # 実装 def method2(self, arg): # 実装
3.この実装をコンポーネントマネージャ経由で呼び出す方法。
components = ExtensionPoint(IFooBar).extensions(comp) for c in components: c.method1()
おまけ: tracdで認証する
http://bitten.edgewall.org/wiki/TracStandalone
$ tracd -p 8080 --auth project1,/path/to/users.htdigest,mycompany.com /path/to/project1
RewriteRuleを使ってApacheからTracに連携していると、Apache側の認証情報がTrac側に渡らない(当たり前?)。なので、tracdで認証できるようにする。気づかずにmod_rewriteとか調べてちょっとはまった。