Skip to content

Commit 07cfb64

Browse files
volker48davidism
authored andcommitted
Allows kwargs to be passed to serializer's dumps
1 parent 3b531f1 commit 07cfb64

File tree

2 files changed

+20
-8
lines changed

2 files changed

+20
-8
lines changed

itsdangerous.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ class _CompactJSON(object):
4545
def loads(self, payload):
4646
return json.loads(payload)
4747

48-
def dumps(self, obj):
49-
return json.dumps(obj, ensure_ascii=False, separators=(',', ':'))
48+
def dumps(self, obj, **kwargs):
49+
return json.dumps(obj, ensure_ascii=False, separators=(',', ':'), **kwargs)
5050

5151

5252
compact_json = _CompactJSON()
@@ -504,7 +504,7 @@ class Serializer(object):
504504
default_signer = Signer
505505

506506
def __init__(self, secret_key, salt=b'itsdangerous', serializer=None,
507-
signer=None, signer_kwargs=None):
507+
signer=None, signer_kwargs=None, serializer_kwargs=None):
508508
self.secret_key = want_bytes(secret_key)
509509
self.salt = want_bytes(salt)
510510
if serializer is None:
@@ -515,6 +515,7 @@ def __init__(self, secret_key, salt=b'itsdangerous', serializer=None,
515515
signer = self.default_signer
516516
self.signer = signer
517517
self.signer_kwargs = signer_kwargs or {}
518+
self.serializer_kwargs = serializer_kwargs or {}
518519

519520
def load_payload(self, payload, serializer=None):
520521
"""Loads the encoded object. This function raises :class:`BadPayload`
@@ -541,7 +542,7 @@ def dump_payload(self, obj):
541542
bytestring. If the internal serializer is text based the value
542543
will automatically be encoded to utf-8.
543544
"""
544-
return want_bytes(self.serializer.dumps(obj))
545+
return want_bytes(self.serializer.dumps(obj, **self.serializer_kwargs))
545546

546547
def make_signer(self, salt=None):
547548
"""A method that creates a new instance of the signer to be used.
@@ -664,9 +665,9 @@ class JSONWebSignatureSerializer(Serializer):
664665
default_serializer = compact_json
665666

666667
def __init__(self, secret_key, salt=None, serializer=None,
667-
signer=None, signer_kwargs=None, algorithm_name=None):
668+
signer=None, signer_kwargs=None, serializer_kwargs=None, algorithm_name=None):
668669
Serializer.__init__(self, secret_key, salt, serializer,
669-
signer, signer_kwargs)
670+
signer, signer_kwargs, serializer_kwargs)
670671
if algorithm_name is None:
671672
algorithm_name = self.default_algorithm
672673
self.algorithm_name = algorithm_name
@@ -702,8 +703,8 @@ def load_payload(self, payload, return_header=False):
702703
return payload
703704

704705
def dump_payload(self, header, obj):
705-
base64d_header = base64_encode(self.serializer.dumps(header))
706-
base64d_payload = base64_encode(self.serializer.dumps(obj))
706+
base64d_header = base64_encode(self.serializer.dumps(header, **self.serializer_kwargs))
707+
base64d_payload = base64_encode(self.serializer.dumps(obj, **self.serializer_kwargs))
707708
return base64d_header + b'.' + base64d_payload
708709

709710
def make_algorithm(self, algorithm_name):

tests.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,16 @@ def test_signer_kwargs(self):
120120
ts = s.dumps(value)
121121
self.assertEqual(s.loads(ts), u'hello')
122122

123+
def test_serializer_kwargs(self):
124+
secret_key = 'predictable-key'
125+
126+
s = self.make_serializer(secret_key, serializer_kwargs={'sort_keys': True})
127+
128+
ts1 = s.dumps({'c': 3, 'a': 1, 'b': 2})
129+
ts2 = s.dumps(dict(a=1, b=2, c=3))
130+
131+
self.assertEqual(ts1, ts2)
132+
123133

124134
class TimedSerializerTestCase(SerializerTestCase):
125135
serializer_class = idmod.TimedSerializer
@@ -282,6 +292,7 @@ def test_invalid_base64_does_not_fail_load_payload(self):
282292
class PickleSerializerMixin(object):
283293

284294
def make_serializer(self, *args, **kwargs):
295+
kwargs.pop('serializer_kwargs', '')
285296
kwargs.setdefault('serializer', pickle)
286297
return super(PickleSerializerMixin, self).make_serializer(*args, **kwargs)
287298

0 commit comments

Comments
 (0)