新しい Date picker への対応
とりあえずガントチャートだけ応急処置してみました. カレンダーのほうは SQL 文をいじらなければならず難しいので.......
#!diff --- a/ganttcalendar/ticketvalidator.py +++ b/ganttcalendar/ticketvalidator.py @@ -36,9 +36,12 @@ class TicketValidator(Component): due = ticket.values.get(field) if due: try: - t = time.strptime(due, format) - dueDate[field] = date( t[0],t[1],t[2]) - ticket.values[field] = format_date( dueDate[field], format) + if isinstance(due, str): + t = time.strptime(due, format) + dueDate[field] = date( t[0],t[1],t[2]) + ticket.values[field] = format_date( dueDate[field], format) + else: + dueDate[field] = due except( TracError, ValueError, TypeError): dueDate[field] = None label = self.config['ticket-custom'].get(field+'.label', default='')
#!diff --- a/ganttcalendar/ticketgantt.py +++ b/ganttcalendar/ticketgantt.py @@ -526,12 +526,18 @@ class TicketGanttChartPlugin(Component): t = time.strptime(due_assign, dateFormat) due_assign_date = date(t[0],t[1],t[2]) except ( TracError, ValueError, TypeError): - continue + try: + due_assign_date = date.fromtimestamp(int(due_assign[:-6])) + except ( TracError, ValueError, TypeError): + continue try: t = time.strptime(due_close, dateFormat) due_close_date = date(t[0],t[1],t[2]) except ( TracError, ValueError, TypeError): - continue + try: + due_close_date = date.fromtimestamp(int(due_close[:-6])) + except ( TracError, ValueError, TypeError): + continue if complete != None and len(complete)>1 and complete[len(complete)-1]=='%': complete = complete[0:len(complete)-1] try:
パッチありがとうございます。
https://github.com/jun66j5/tracganttcalendarplugin/tree/trac-1.1 に git-svn clone したリポジトリを用意していたので、ここにパッチを適用して少し補正しました。
{{{trac.ticket.query.Query}} クラスを使えば、custom field に time を指定しているフィールドに対して datetime インスタンスを返してくるので、Qeury クラスを使うように ticketcalendar.py, ticketgantt.py を書き換えてしまうのがよいと思います。また、明らかに SQL injection を持っているのもその理由の一つでもあります。
Trac 1.1.1 から,チケットのカスタムフィールドで Date picker が使えるようになりました。
http://trac.edgewall.org/wiki/1.1/TracTicketsCustomFields
GanttCalendar で,due_assign と due_close の入力にこの機能が使えると非常に便利なのですが, 日付情報が YYYY/MM/DD ではなくエポック秒で保存されるため,現状のままでは使えません。
この日付情報形式にも対応できるよう,GanttCalendar の機能拡張を希望します。