わいえむねっと

Contents
Categories
Calendar
2010/06
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Monthly Archives
~2000/01
Recent Entries
RSS1.0
Templates
Information
Processed: 0.054 sec
Chashed: -
2010/06/10 Thu
Tracの環境を

  • Fedora Core 6
  • Trac 0.10.4
  • TracGanttCalendarPlugin 0.0.1

から

  • FreeBSD 8.0
  • Trac 0.11.5
  • TracGanttCalendarPlugin 0.3

にしてみたらカレンダーが機能しなくなったので、DEBUGログを有効にしてコンソールをぼけと眺めてみる。

00:28:55 Trac[ticketcalendar] DEBUG: SELECT id, type, summary, owner, description, status, a.value, c.value from ticket t JOIN ticket_custom a ON a.ticket = t.id AND a.name = 'due_assign' JOIN ticket_custom c ON c.ticket = t.id AND c.name = 'due_close' WHERE ((a.value >= '05/30/10' AND a.value <= '07/03/10' ) OR (c.value >= '05/30/10' AND c.value <= '07/03/10'))

日付フォーマットが %m/%d/%y になっている?
コードを眺めると、

ticketcalendar.py
sql = ("SELECT id, type, summary, owner, description, status, a.value, c.value from ticket t "
            "JOIN ticket_custom a ON a.ticket = t.id AND a.name = 'due_assign' "
            "JOIN ticket_custom c ON c.ticket = t.id AND c.name = 'due_close' "
            "WHERE ((a.value >= '%s' AND a.value <= '%s' ) "
            "OR (c.value >= '%s' AND c.value <= '%s')) %s %s" %
            (format_date(parse_date(first.isoformat())),
                format_date(parse_date(last.isoformat())),
                format_date(parse_date(first.isoformat())),
                format_date(parse_date(last.isoformat())),
                my_ticket_sql,
                selected_milestone_sql))

datefmt.py
def format_date(t=None, format='%x', tzinfo=None):
    """Convenience method for formatting the date part of a `datetime` object.
    See `format_datetime` for more details.
    """
    if format == 'iso8601':
        format = 'iso8601date'
    return format_datetime(t, format, tzinfo=tzinfo)

%x が %m/%d/%y に展開されている様子。

とりあえず、export LC_TIME=ja_JP.UTF-8 としてみたものの変化なし。
/usr/share/locale/ja_JP.UTF-8/LC_TIME には %Y/%m/%d とあるんですけどね。ここじゃないのか。
最小限のコードで試してみても同様。

from datetime import date
from trac.util.datefmt import parse_date, format_date

d = date.today().isoformat()
print d
print parse_date(d)
print format_date(parse_date(d))
print format_date(parse_date(d), '%x')
print format_date(parse_date(d), '%Y/%m/%d')
# 2010-06-10
# 2010-06-10 00:00:00+09:00
# 06/10/10
# 06/10/10
# 2010/06/10

面倒になってきたので、フォーマット指定を追加してお茶を濁す。

--- ticketcalendar.py~
+++ ticketcalendar.py
@@ -69,10 +69,10 @@
                     "JOIN ticket_custom c ON c.ticket = t.id AND c.name = 'due_close' "
                     "WHERE ((a.value >= '%s' AND a.value <= '%s' ) "
                     "OR (c.value >= '%s' AND c.value <= '%s')) %s %s" %
-                    (format_date(parse_date(first.isoformat())),
-                        format_date(parse_date(last.isoformat())),
-                        format_date(parse_date(first.isoformat())),
-                        format_date(parse_date(last.isoformat())),
+                    (format_date(parse_date(first.isoformat(), '%Y/%m/%d')),
+                        format_date(parse_date(last.isoformat(), '%Y/%m/%d')),
+                        format_date(parse_date(first.isoformat(), '%Y/%m/%d')),
+                        format_date(parse_date(last.isoformat(), '%Y/%m/%d')),
                         my_ticket_sql,
                         selected_milestone_sql))
ここしばらく右手の調子が悪くてすぐぶちまけそうになる。
ぶちまけそうになるというか、かつ丼はぶちまけた。泣いた。