# HG changeset patch # User Paul Boddie # Date 1421104733 -3600 # Node ID d8a56ee98d47752150c171d1095deedb2c35610c # Parent b68b647bb92e0ba7ee0aa7253aa5b8f8dec7556d Introduced usage of Babel for date/time formatting. diff -r b68b647bb92e -r d8a56ee98d47 README.txt --- a/README.txt Tue Jan 13 00:05:00 2015 +0100 +++ b/README.txt Tue Jan 13 00:18:53 2015 +0100 @@ -169,3 +169,7 @@ Exim: exim4-daemon-heavy Postfix: postfix postfix-ldap + +The management Web interface requires the following packages: + + Babel: python-babel diff -r b68b647bb92e -r d8a56ee98d47 imip_manager.py --- a/imip_manager.py Tue Jan 13 00:05:00 2015 +0100 +++ b/imip_manager.py Tue Jan 13 00:18:53 2015 +0100 @@ -24,7 +24,8 @@ LIBRARY_PATH = "/var/lib/imip-agent" -import cgi, os, sys, locale +import babel.dates +import cgi, os, sys sys.path.append(LIBRARY_PATH) @@ -157,6 +158,7 @@ user = self.env.get_user() self.user = user and get_uri(user) or None self.preferences = None + self.locale = None self.requests = None self.out = self.env.get_output() @@ -197,15 +199,28 @@ # Preference methods. - def set_user_locale(self): - lang = self.get_preferences().get("LANG") - locale.setlocale(locale.LC_TIME, lang or "C") + def get_user_locale(self): + if not self.locale: + self.locale = self.get_preferences().get("LANG", "C") + return self.locale def get_preferences(self): if not self.preferences: self.preferences = Preferences(self.user) return self.preferences + def format_date(self, dt, format): + return self._format_datetime(babel.dates.format_date, dt, format) + + def format_time(self, dt, format): + return self._format_datetime(babel.dates.format_time, dt, format) + + def format_datetime(self, dt, format): + return self._format_datetime(babel.dates.format_datetime, dt, format) + + def _format_datetime(self, fn, dt, format): + return fn(dt, format=format, locale=self.get_user_locale()) + # Data management methods. def remove_request(self, uid): @@ -308,7 +323,7 @@ if name in ["DTSTART", "DTEND"]: value, attr = get_item(details, name) tzid = attr.get("TZID") - value = to_timezone(get_datetime(value), tzid).strftime("%c") + value = self.format_datetime(to_timezone(get_datetime(value), tzid), "full") self.page.dt(name) self.page.dd(value) else: @@ -337,8 +352,8 @@ for t in have_conflict(freebusy, [(dtstart, dtend)], True): start, end, found_uid = t[:3] if uid != found_uid: - start = to_timezone(get_datetime(start), tzid).strftime("%c") - end = to_timezone(get_datetime(end), tzid).strftime("%c") + start = self.format_datetime(to_timezone(get_datetime(start), tzid), "full") + end = self.format_datetime(to_timezone(get_datetime(end), tzid), "full") self.page.p("Event conflicts with another from %s to %s." % (start, end)) def show_requests_on_page(self): @@ -434,7 +449,9 @@ page.tr() page.th(class_="timeslot") - page.add(dt.strftime("%c")) + page.add(self.format_date(dt, "full")) + page.br() + page.add(self.format_time(dt, "long")) page.th.close() for t in active: @@ -461,8 +478,6 @@ "Select the desired action and show the result." - self.set_user_locale() - path_info = self.env.get_path_info().strip("/") if not path_info: