From 0a2fb54f783d1a894b280e02c7da64c66cca084d Mon Sep 17 00:00:00 2001 From: bmng-dev Date: Fri, 8 Aug 2014 04:38:23 +0000 Subject: [PATCH] Fix l10n.formatTimestamp so it accepts strings --- src/l10n.py | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/src/l10n.py b/src/l10n.py index cab012bd..d097f2f9 100644 --- a/src/l10n.py +++ b/src/l10n.py @@ -11,6 +11,7 @@ logger = logging.getLogger('file_only') DEFAULT_ENCODING = 'ISO8859-1' DEFAULT_LANGUAGE = 'en_US' +DEFAULT_TIME_FORMAT = '%Y-%m-%d %H:%M:%S' encoding = DEFAULT_ENCODING language = DEFAULT_LANGUAGE @@ -23,13 +24,38 @@ except: logger.exception('Could not determine language or encoding') -time_format = shared.config.get('bitmessagesettings', 'timeformat') +if shared.config.has_option('bitmessagesettings', 'timeformat'): + time_format = shared.config.get('bitmessagesettings', 'timeformat') + #Test the format string + try: + time.strftime(time_format) + except: + time_format = DEFAULT_TIME_FORMAT +else: + time_format = DEFAULT_TIME_FORMAT + def formatTimestamp(timestamp = None, as_unicode = True): - if timestamp and isinstance(timestamp, (float, int)): - timestring = time.strftime(time_format, time.localtime(timestamp)) - else: + #For some reason some timestamps are strings so we need to sanitize. + if timestamp is not None and not isinstance(timestamp, int): + try: + timestamp = int(timestamp) + except: + timestamp = None + + #timestamp can't be less than 0. + if timestamp is not None and timestamp < 0: + timestamp = None + + if timestamp is None: timestring = time.strftime(time_format) + else: + #In case timestamp is too far in the future + try: + timestring = time.strftime(time_format, time.localtime(timestamp)) + except ValueError: + timestring = time.strftime(time_format) + if as_unicode: return unicode(timestring, encoding) return timestring