Skip to content

Commit

Permalink
Merge pull request pallets#4 from daniele-nicolodi/master
Browse files Browse the repository at this point in the history
Fix issue pallets#3 and add proper unit test.
  • Loading branch information
mitsuhiko committed Aug 18, 2011
2 parents 59067a9 + ea10d2d commit 3a153b0
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 17 deletions.
8 changes: 6 additions & 2 deletions itsdangerous.py
Original file line number Diff line number Diff line change
Expand Up @@ -271,8 +271,12 @@ def loads(self, s, max_age=None, return_timestamp=False):
which is a subclass of :exc:`BadSignature`. All arguments are
forwarded to the signer's :meth:`~TimestampSigner.unsign` method.
"""
base64d = self.make_signer().unsign(s, max_age, return_timestamp)
return self.load_payload(base64d)
if return_timestamp:
base64d, timestamp = self.make_signer().unsign(s, max_age, return_timestamp)
return self.load_payload(base64d), timestamp
else:
base64d = self.make_signer().unsign(s, max_age, return_timestamp)
return self.load_payload(base64d)


class URLSafeSerializerMixin(object):
Expand Down
43 changes: 28 additions & 15 deletions tests.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import time
import pickle
import unittest
from datetime import datetime
import itsdangerous as idmod


Expand Down Expand Up @@ -50,25 +51,37 @@ def test_accepts_unicode(self):
class TimedSerializerTestCase(SerializerTestCase):
serializer_class = idmod.TimedSerializer

def setUp(self):
self._time = time.time
time.time = lambda: idmod.EPOCH

def tearDown(self):
time.time = self._time

def test_decode_with_timeout(self):
secret_key = 'predictable-key'
value = u'hello'
_time = time.time
time.time = lambda: idmod.EPOCH
try:
s = self.make_serializer(secret_key)
ts = s.dumps(value)
self.assertNotEqual(ts, idmod.Serializer(secret_key).dumps(value))

self.assertEqual(s.loads(ts), value)
time.time = lambda: idmod.EPOCH + 10
self.assertEqual(s.loads(ts, max_age=11), value)
self.assertEqual(s.loads(ts, max_age=10), value)
self.assertRaises(
idmod.SignatureExpired, s.loads, ts, max_age=9)
finally:
time.time = _time

s = self.make_serializer(secret_key)
ts = s.dumps(value)
self.assertNotEqual(ts, idmod.Serializer(secret_key).dumps(value))

self.assertEqual(s.loads(ts), value)
time.time = lambda: idmod.EPOCH + 10
self.assertEqual(s.loads(ts, max_age=11), value)
self.assertEqual(s.loads(ts, max_age=10), value)
self.assertRaises(
idmod.SignatureExpired, s.loads, ts, max_age=9)

def test_decode_return_timestamp(self):
secret_key = 'predictable-key'
value = u'hello'

s = self.make_serializer(secret_key)
ts = s.dumps(value)
loaded, timestamp = s.loads(ts, return_timestamp=True)
self.assertEqual(loaded, value)
self.assertEqual(timestamp, datetime.utcfromtimestamp(time.time()))


class URLSafeSerializerMixin(object):
Expand Down

0 comments on commit 3a153b0

Please sign in to comment.