Ploneのissue tracker
Ploneは、イントラネットで使用する、プロダクトも豊富に存在する。
ドキュメント管理であれば、標準のアイテム(コンテンツタイプ)を使用するだけでも、十分に便利である。それに、Wiki(プロダクト名:ZWIKI)も簡単に導入できる。
それらを、効率よく「検索」できる仕組みも標準で入っており便利である。
イントラネットでプロジェクト管理などを行うためには、issue trackerが欲しくなる。
issue trackerの世界では、Pythonで書かれた、Tracというアプリケーションがよく使われている、Ploneなどのプラットフォームに依存せずに使用でき、Python界だけでなく使われている。ちなみに、Plone.orgのissue trackerはTracを使用しています。
Ploneのissue trackerプロダクトとして、Poiというプロダクトがあります。Tracの用になでもできます的な物ではなく、機能を絞り込んでいて使いやすい用に仕上がっています。
しかし、そのPoiで日本語の問題がありました。
ある文字列のイシューを作ろうとすると、エラーで作れないことがあります。同じような問題に、フランス語圏などの人も問題として抱えている感じがありました。
そこで、昨日、エラーの根本を探ることをしてみました。
問題は、メール送信する手前で、Descriptionを自動生成している部分があり、そこで'str'型のまま指定文字数まで切り出していました。そうすると日本語の途中で切り出されることがあり、エラーが発生するケースが存在したようです。結果としては、"str"から'unicode'に変換し文字を切り出すようにコード変更しました。(下記参照)
他にもエラーとなってメールを送信している部分があるようなので、それについては、また時間のあるときに追ってみたいと思います。
Pio/content/PoiIssue.py 412行目から
def Description(self):
"""If a description is set manually, return that. Else returns the first
200 characters (defined in config.py) of the 'details' field.
"""
explicit = self.getField('description').get(self)
if explicit:
return explicit
else:
##ここから既存コード
##details = self.getRawDetails()
##if len(details) > DESCRIPTION_LENGTH:
## return self.getDetails()[:DESCRIPTION_LENGTH] + "..."
##else:
## return details
#下記に変更
details = self.getDetails()
if type(details) is not unicode:
details = unicode(details)
if len(details) > DESCRIPTION_LENGTH:
return details[:DESCRIPTION_LENGTH] + "..."
else:
return details
#ここまで