Merge branch 'fix_use_django_tz' of https://github.com/lexqt/mongoengine into 0.8
Conflicts: mongoengine/django/sessions.py Closes #151
This commit is contained in:
commit
b9c9d127a2
@ -23,6 +23,7 @@ Changes in 0.8.X
|
|||||||
- Dynamic fields are now validated on save (#153) (#154)
|
- Dynamic fields are now validated on save (#153) (#154)
|
||||||
- Added support for multiple slices and made slicing chainable. (#170) (#190) (#191)
|
- Added support for multiple slices and made slicing chainable. (#170) (#190) (#191)
|
||||||
- Fixed GridFSProxy __getattr__ behaviour (#196)
|
- Fixed GridFSProxy __getattr__ behaviour (#196)
|
||||||
|
- Fix Django timezone support (#151)
|
||||||
|
|
||||||
Changes in 0.7.9
|
Changes in 0.7.9
|
||||||
================
|
================
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
import datetime
|
|
||||||
|
|
||||||
from mongoengine import *
|
from mongoengine import *
|
||||||
|
|
||||||
from django.utils.encoding import smart_str
|
from django.utils.encoding import smart_str
|
||||||
@ -33,6 +31,7 @@ except ImportError:
|
|||||||
hash = get_hexdigest(algo, salt, raw_password)
|
hash = get_hexdigest(algo, salt, raw_password)
|
||||||
return '%s$%s$%s' % (algo, salt, hash)
|
return '%s$%s$%s' % (algo, salt, hash)
|
||||||
|
|
||||||
|
from .utils import datetime_now
|
||||||
|
|
||||||
REDIRECT_FIELD_NAME = 'next'
|
REDIRECT_FIELD_NAME = 'next'
|
||||||
|
|
||||||
@ -62,9 +61,9 @@ class User(Document):
|
|||||||
is_superuser = BooleanField(default=False,
|
is_superuser = BooleanField(default=False,
|
||||||
verbose_name=_('superuser status'),
|
verbose_name=_('superuser status'),
|
||||||
help_text=_("Designates that this user has all permissions without explicitly assigning them."))
|
help_text=_("Designates that this user has all permissions without explicitly assigning them."))
|
||||||
last_login = DateTimeField(default=datetime.datetime.now,
|
last_login = DateTimeField(default=datetime_now,
|
||||||
verbose_name=_('last login'))
|
verbose_name=_('last login'))
|
||||||
date_joined = DateTimeField(default=datetime.datetime.now,
|
date_joined = DateTimeField(default=datetime_now,
|
||||||
verbose_name=_('date joined'))
|
verbose_name=_('date joined'))
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
@ -130,7 +129,7 @@ class User(Document):
|
|||||||
"""Create (and save) a new user with the given username, password and
|
"""Create (and save) a new user with the given username, password and
|
||||||
email address.
|
email address.
|
||||||
"""
|
"""
|
||||||
now = datetime.datetime.now()
|
now = datetime_now()
|
||||||
|
|
||||||
# Normalize the address by lowercasing the domain part of the email
|
# Normalize the address by lowercasing the domain part of the email
|
||||||
# address.
|
# address.
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
from datetime import datetime
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.sessions.backends.base import SessionBase, CreateError
|
from django.contrib.sessions.backends.base import SessionBase, CreateError
|
||||||
from django.core.exceptions import SuspiciousOperation
|
from django.core.exceptions import SuspiciousOperation
|
||||||
@ -10,6 +8,8 @@ from mongoengine import fields
|
|||||||
from mongoengine.queryset import OperationError
|
from mongoengine.queryset import OperationError
|
||||||
from mongoengine.connection import DEFAULT_CONNECTION_NAME
|
from mongoengine.connection import DEFAULT_CONNECTION_NAME
|
||||||
|
|
||||||
|
from .utils import datetime_now
|
||||||
|
|
||||||
|
|
||||||
MONGOENGINE_SESSION_DB_ALIAS = getattr(
|
MONGOENGINE_SESSION_DB_ALIAS = getattr(
|
||||||
settings, 'MONGOENGINE_SESSION_DB_ALIAS',
|
settings, 'MONGOENGINE_SESSION_DB_ALIAS',
|
||||||
@ -43,7 +43,7 @@ class SessionStore(SessionBase):
|
|||||||
def load(self):
|
def load(self):
|
||||||
try:
|
try:
|
||||||
s = MongoSession.objects(session_key=self.session_key,
|
s = MongoSession.objects(session_key=self.session_key,
|
||||||
expire_date__gt=datetime.now())[0]
|
expire_date__gt=datetime_now)[0]
|
||||||
if MONGOENGINE_SESSION_DATA_ENCODE:
|
if MONGOENGINE_SESSION_DATA_ENCODE:
|
||||||
return self.decode(force_unicode(s.session_data))
|
return self.decode(force_unicode(s.session_data))
|
||||||
else:
|
else:
|
||||||
|
6
mongoengine/django/utils.py
Normal file
6
mongoengine/django/utils.py
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
try:
|
||||||
|
# django >= 1.4
|
||||||
|
from django.utils.timezone import now as datetime_now
|
||||||
|
except ImportError:
|
||||||
|
from datetime import datetime
|
||||||
|
datetime_now = datetime.now
|
@ -12,7 +12,7 @@ try:
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.paginator import Paginator
|
from django.core.paginator import Paginator
|
||||||
|
|
||||||
settings.configure()
|
settings.configure(USE_TZ=True)
|
||||||
|
|
||||||
from django.contrib.sessions.tests import SessionTestsMixin
|
from django.contrib.sessions.tests import SessionTestsMixin
|
||||||
from mongoengine.django.sessions import SessionStore, MongoSession
|
from mongoengine.django.sessions import SessionStore, MongoSession
|
||||||
@ -24,6 +24,37 @@ except Exception, err:
|
|||||||
raise err
|
raise err
|
||||||
|
|
||||||
|
|
||||||
|
from datetime import tzinfo, timedelta
|
||||||
|
ZERO = timedelta(0)
|
||||||
|
|
||||||
|
class FixedOffset(tzinfo):
|
||||||
|
"""Fixed offset in minutes east from UTC."""
|
||||||
|
|
||||||
|
def __init__(self, offset, name):
|
||||||
|
self.__offset = timedelta(minutes = offset)
|
||||||
|
self.__name = name
|
||||||
|
|
||||||
|
def utcoffset(self, dt):
|
||||||
|
return self.__offset
|
||||||
|
|
||||||
|
def tzname(self, dt):
|
||||||
|
return self.__name
|
||||||
|
|
||||||
|
def dst(self, dt):
|
||||||
|
return ZERO
|
||||||
|
|
||||||
|
|
||||||
|
def activate_timezone(tz):
|
||||||
|
"""Activate Django timezone support if it is available.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
from django.utils import timezone
|
||||||
|
timezone.deactivate()
|
||||||
|
timezone.activate(tz)
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class QuerySetTest(unittest.TestCase):
|
class QuerySetTest(unittest.TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
@ -120,3 +151,15 @@ class MongoDBSessionTest(SessionTestsMixin, unittest.TestCase):
|
|||||||
session['test'] = True
|
session['test'] = True
|
||||||
session.save()
|
session.save()
|
||||||
self.assertTrue('test' in session)
|
self.assertTrue('test' in session)
|
||||||
|
|
||||||
|
def test_session_expiration_tz(self):
|
||||||
|
activate_timezone(FixedOffset(60, 'UTC+1'))
|
||||||
|
# create and save new session
|
||||||
|
session = SessionStore()
|
||||||
|
session.set_expiry(600) # expire in 600 seconds
|
||||||
|
session['test_expire'] = True
|
||||||
|
session.save()
|
||||||
|
# reload session with key
|
||||||
|
key = session.session_key
|
||||||
|
session = SessionStore(key)
|
||||||
|
self.assertTrue('test_expire' in session, 'Session has expired before it is expected')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user