Ticket #32357

新しい Date picker への対応

Open Date: 2013-10-29 19:05 Last Update: 2013-10-30 17:49

Reporter:
Owner:
(None)
Status:
Open
Component:
MileStone:
(None)
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
None
File:
None

Details

Trac 1.1.1 から,チケットのカスタムフィールドで Date picker が使えるようになりました。

http://trac.edgewall.org/wiki/1.1/TracTicketsCustomFields

GanttCalendar で,due_assigndue_close の入力にこの機能が使えると非常に便利なのですが, 日付情報が YYYY/MM/DD ではなくエポック秒で保存されるため,現状のままでは使えません。

この日付情報形式にも対応できるよう,GanttCalendar の機能拡張を希望します。

Ticket History (3/3 Histories)

2013-10-29 19:05 Updated by: yohey_ishizu
  • New Ticket "新しい Date picker への対応" created
2013-10-29 19:11 Updated by: yohey_ishizu
Comment

とりあえずガントチャートだけ応急処置してみました. カレンダーのほうは 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:

2013-10-30 17:49 Updated by: jun66j5
Comment

パッチありがとうございます。

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 を持っているのもその理由の一つでもあります。

Attachment File List

No attachments

Edit

Please login to add comment to this ticket » Login