summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormathieui <mathieui@mathieui.net>2014-03-31 22:56:29 +0200
committermathieui <mathieui@mathieui.net>2014-04-01 00:03:29 +0200
commit02d9fd9ad4816f357c614a230b34d7e3fcdcdcf9 (patch)
treee01b0d03cf9527a8615cf8a9ecc3194366178419
parenta0c7155140f50b2b1c22e7c1347be1024d4e3af8 (diff)
downloadpoezio-02d9fd9ad4816f357c614a230b34d7e3fcdcdcf9.tar.gz
poezio-02d9fd9ad4816f357c614a230b34d7e3fcdcdcf9.tar.bz2
poezio-02d9fd9ad4816f357c614a230b34d7e3fcdcdcf9.tar.xz
poezio-02d9fd9ad4816f357c614a230b34d7e3fcdcdcf9.zip
Fix #2462 (wrong timezone in the logs)
Now everything in the logs is in UTC time, and is converted when read (also, actually return the logs after loading them instead of not doing anything)
-rw-r--r--src/common.py47
-rw-r--r--src/logger.py14
-rw-r--r--src/tabs/basetabs.py1
3 files changed, 57 insertions, 5 deletions
diff --git a/src/common.py b/src/common.py
index 8fbf34fb..5467c985 100644
--- a/src/common.py
+++ b/src/common.py
@@ -218,6 +218,53 @@ def datetime_tuple(timestamp):
ret += tz
return ret
+def get_utc_time(local_time=None):
+ """
+ Get the current time in UTC
+
+ :param datetime local_time: The current local time
+ :return: The current UTC time
+ >>> delta = timedelta(seconds=-3600)
+ >>> d = datetime.now()
+ >>> time.timezone = -3600; time.altzone = -3600
+ >>> get_utc_time(local_time=d) == d + delta
+ True
+ """
+ if local_time is None:
+ local_time = datetime.now()
+ isdst = time.localtime().tm_isdst
+ else:
+ isdst = time.localtime(int(local_time.timestamp())).tm_isdst
+
+ if time.daylight and isdst:
+ tz = timedelta(seconds=time.altzone)
+ else:
+ tz = timedelta(seconds=time.timezone)
+
+ utc_time = local_time + tz
+
+ return utc_time
+
+def get_local_time(utc_time):
+ """
+ Get the local time from an UTC time
+
+ >>> delta = timedelta(seconds=-3600)
+ >>> d = datetime.now()
+ >>> time.timezone = -3600; time.altzone = -3600
+ >>> get_local_time(d) == d - delta
+ True
+ """
+ isdst = time.localtime(int(utc_time.timestamp())).tm_isdst
+ if time.daylight and isdst:
+ tz = timedelta(seconds=time.altzone)
+ else:
+ tz = timedelta(seconds=time.timezone)
+
+ local_time = utc_time - tz
+
+ return local_time
+
def find_delayed_tag(message):
"""
Check if a message is delayed or not.
diff --git a/src/logger.py b/src/logger.py
index c05cc4a6..2c878606 100644
--- a/src/logger.py
+++ b/src/logger.py
@@ -5,11 +5,13 @@
# Poezio is free software: you can redistribute it and/or modify
# it under the terms of the zlib license. See the COPYING file.
-from os import environ, makedirs
import mmap
import os
import re
+from os import environ, makedirs
from datetime import datetime
+
+import common
from config import config
from xhtml import clean_text
from theming import dump_tuple, get_theme
@@ -155,7 +157,9 @@ class Logger(object):
log.debug('format? %s', tup)
continue
time = [int(i) for index, i in enumerate(tup) if index < 6]
- message = {'lines': [], 'history': True, 'time': datetime(*time)}
+ message = {'lines': [],
+ 'history': True,
+ 'time': common.get_local_time(datetime(*time))}
size = int(tup[6])
if len(tup) == 8: #info line
message['lines'].append(color+tup[7])
@@ -195,9 +199,9 @@ class Logger(object):
try:
msg = clean_text(msg)
if date is None:
- str_time = datetime.now().strftime('%Y%m%dT%H:%M:%SZ')
+ str_time = common.get_utc_time().strftime('%Y%m%dT%H:%M:%SZ')
else:
- str_time = date.strftime('%Y%m%dT%H:%M:%SZ')
+ str_time = common.get_utc_time(date).strftime('%Y%m%dT%H:%M:%SZ')
if typ == 1:
prefix = 'MR'
else:
@@ -244,7 +248,7 @@ class Logger(object):
exc_info=True)
return False
try:
- str_time = datetime.now().strftime('%Y%m%dT%H:%M:%SZ')
+ str_time = common.get_utc_time().strftime('%Y%m%dT%H:%M:%SZ')
message = clean_text(message)
lines = message.split('\n')
first_line = lines.pop(0)
diff --git a/src/tabs/basetabs.py b/src/tabs/basetabs.py
index 00f924b0..7b300b18 100644
--- a/src/tabs/basetabs.py
+++ b/src/tabs/basetabs.py
@@ -455,6 +455,7 @@ class ChatTab(Tab):
def load_logs(self, log_nb):
logs = logger.get_logs(safeJID(self.get_name()).bare, log_nb)
+ return logs
def log_message(self, txt, nickname, time=None, typ=1):
"""