From 3ebc55da82f66298ff36724a166ba19b0ddc6316 Mon Sep 17 00:00:00 2001 From: Griatch Date: Fri, 27 Mar 2015 07:04:19 +0100 Subject: [PATCH] Changed datetime setter to use utils.timezone instead of naive datetime stamps, as per #728. --- evennia/comms/models.py | 4 ++-- evennia/players/manager.py | 5 +++-- evennia/players/players.py | 4 ++-- evennia/server/serversession.py | 6 +++--- evennia/settings_default.py | 2 ++ evennia/utils/logger.py | 9 ++++++--- evennia/utils/utils.py | 4 ++-- 7 files changed, 20 insertions(+), 14 deletions(-) diff --git a/evennia/comms/models.py b/evennia/comms/models.py index dd00378077..8a5a18472f 100644 --- a/evennia/comms/models.py +++ b/evennia/comms/models.py @@ -19,8 +19,8 @@ ChannelConnect object (this object is necessary to easily be able to delete connections on the fly). """ -from datetime import datetime from django.conf import settings +from django.utils import timezone from django.db import models from evennia.typeclasses.models import TypedObject from evennia.utils.idmapper.models import SharedMemoryModel @@ -309,7 +309,7 @@ class TempMsg(object): self.message = message self.lock_storage = lockstring self.hide_from = hide_from and make_iter(hide_from) or [] - self.date_sent = datetime.now() + self.date_sent = timezone.now() @lazy_property def locks(self): diff --git a/evennia/players/manager.py b/evennia/players/manager.py index 5cc72a1d07..9f56175b4b 100644 --- a/evennia/players/manager.py +++ b/evennia/players/manager.py @@ -3,6 +3,7 @@ The managers for the custom Player object and permissions. """ import datetime +from django.utils import timezone from django.contrib.auth.models import UserManager #from functools import update_wrapper from evennia.typeclasses.managers import (returns_typeclass_list, returns_typeclass, @@ -59,7 +60,7 @@ class PlayerDBManager(TypedObjectManager, UserManager): Returns a QuerySet containing the player User accounts that have been connected within the last days. """ - end_date = datetime.datetime.now() + end_date = timezone.now() tdelta = datetime.timedelta(days) start_date = end_date - tdelta return self.filter(date_joined__range=(start_date, end_date)) @@ -72,7 +73,7 @@ class PlayerDBManager(TypedObjectManager, UserManager): days - number of days backwards to check """ - end_date = datetime.datetime.now() + end_date = timezone.now() tdelta = datetime.timedelta(days) start_date = end_date - tdelta return self.filter(last_login__range=( diff --git a/evennia/players/players.py b/evennia/players/players.py index e32d6c97aa..1a5c681241 100644 --- a/evennia/players/players.py +++ b/evennia/players/players.py @@ -11,8 +11,8 @@ instead for most things). """ -import datetime from django.conf import settings +from django.utils import timezone from evennia.typeclasses.models import TypeclassBase from evennia.players.manager import PlayerManager from evennia.players.models import PlayerDB @@ -558,7 +558,7 @@ class DefaultPlayer(PlayerDB): _CONNECT_CHANNEL = ChannelDB.objects.filter(db_key=settings.DEFAULT_CHANNELS[1]["key"])[0] except Exception: logger.log_trace() - now = datetime.datetime.now() + now = timezone.now() now = "%02i-%02i-%02i(%02i:%02i)" % (now.year, now.month, now.day, now.hour, now.minute) if _CONNECT_CHANNEL: diff --git a/evennia/server/serversession.py b/evennia/server/serversession.py index 1393e29ee1..cdef25bf05 100644 --- a/evennia/server/serversession.py +++ b/evennia/server/serversession.py @@ -9,7 +9,7 @@ are stored on the Portal side) import re from time import time -from datetime import datetime +from django.utils import timezone from django.conf import settings from evennia.comms.models import ChannelDB from evennia.utils import logger @@ -106,7 +106,7 @@ class ServerSession(Session): self.cmdset_storage = settings.CMDSET_SESSION # Update account's last login time. - self.player.last_login = datetime.now() + self.player.last_login = timezone.now() self.player.save() # add the session-level cmdset @@ -122,7 +122,7 @@ class ServerSession(Session): if self.puppet: player.unpuppet_object(sessid) uaccount = player - uaccount.last_login = datetime.now() + uaccount.last_login = timezone.now() uaccount.save() # calling player hook player.at_disconnect() diff --git a/evennia/settings_default.py b/evennia/settings_default.py index db5b4a56b0..78c6264105 100644 --- a/evennia/settings_default.py +++ b/evennia/settings_default.py @@ -119,6 +119,8 @@ CYCLE_LOGFILES = True # Local time zone for this installation. All choices can be found here: # http://www.postgresql.org/docs/8.0/interactive/datetime-keywords.html#DATETIME-TIMEZONE-SET-TABLE TIME_ZONE = 'UTC' +# Activate time zone in datetimes +USE_TZ = True # Authentication backends. This is the code used to authenticate a user. AUTHENTICATION_BACKENDS = ( 'evennia.web.utils.backends.CaseInsensitiveModelBackend',) diff --git a/evennia/utils/logger.py b/evennia/utils/logger.py index bfad6b42b5..6d43cecc5a 100644 --- a/evennia/utils/logger.py +++ b/evennia/utils/logger.py @@ -14,12 +14,13 @@ log_typemsg(). This is for historical, back-compatible reasons. """ import os -from datetime import datetime from traceback import format_exc from twisted.python import log from twisted.internet.threads import deferToThread + _LOGDIR = None +_TIMEZONE = None def log_trace(errmsg=None): """ @@ -114,15 +115,17 @@ def log_file(msg, filename="game.log"): 'game.log'. All logs will appear in the logs directory and log entries will start on new lines following datetime info. """ - global LOG_FILE_HANDLES, _LOGDIR + global LOG_FILE_HANDLES, _LOGDIR, _TIMEZONE if not _LOGDIR: from django.conf import settings _LOGDIR = settings.LOG_DIR + if not _TIMEZONE: + from django.utils import timezone as _TIMEZONE def callback(filehandle, msg): "Writing to file and flushing result" - msg = "\n%s [-] %s" % (datetime.now(), msg.strip()) + msg = "\n%s [-] %s" % (_TIMEZONE.now(), msg.strip()) filehandle.write(msg) # since we don't close the handle, we need to flush # manually or log file won't be written to until the diff --git a/evennia/utils/utils.py b/evennia/utils/utils.py index caee0d94f2..6ff184c8df 100644 --- a/evennia/utils/utils.py +++ b/evennia/utils/utils.py @@ -13,7 +13,6 @@ import types import math import re import textwrap -import datetime import random import traceback from importlib import import_module @@ -21,6 +20,7 @@ from inspect import ismodule, trace from collections import defaultdict from twisted.internet import threads, defer, reactor from django.conf import settings +from django.utils import timezone try: import cPickle as pickle @@ -279,7 +279,7 @@ def datetime_format(dtobj): year, month, day = dtobj.year, dtobj.month, dtobj.day hour, minute, second = dtobj.hour, dtobj.minute, dtobj.second - now = datetime.datetime.now() + now = timezone.now() if year < now.year: # another year