@@ -36,7 +36,8 @@ class Pusher(object):
36
36
:param backend: an http adapter class (AsyncIOBackend, RequestsBackend, SynchronousBackend, TornadoBackend)
37
37
:param backend_options: additional backend
38
38
"""
39
- def __init__ (self , app_id , key , secret , ssl = True , host = None , port = None , timeout = 5 , cluster = None , backend = RequestsBackend , ** backend_options ):
39
+ def __init__ (self , app_id , key , secret , ssl = True , host = None , port = None , timeout = 5 , cluster = None ,
40
+ json_encoder = None , json_decoder = None , backend = RequestsBackend , ** backend_options ):
40
41
self ._app_id = ensure_text (app_id , "app_id" )
41
42
if not app_id_re .match (self ._app_id ):
42
43
raise ValueError ("Invalid app id" )
@@ -62,6 +63,8 @@ def __init__(self, app_id, key, secret, ssl=True, host=None, port=None, timeout=
62
63
if not isinstance (timeout , six .integer_types ):
63
64
raise TypeError ("timeout should be an integer" )
64
65
self ._timeout = timeout
66
+ self ._json_encoder = json_encoder
67
+ self ._json_decoder = json_decoder
65
68
66
69
self .http = backend (self , ** backend_options )
67
70
@@ -139,7 +142,7 @@ def trigger(self, channels, event_name, data, socket_id=None):
139
142
if isinstance (data , six .string_types ):
140
143
data = ensure_text (data , "data" )
141
144
else :
142
- data = json .dumps (data )
145
+ data = json .dumps (data , cls = self . _json_encoder )
143
146
144
147
if len (data ) > 10240 :
145
148
raise ValueError ("Too much data" )
@@ -208,7 +211,7 @@ def authenticate(self, channel, socket_id, custom_data=None):
208
211
socket_id = ensure_text (socket_id , "socket_id" )
209
212
210
213
if custom_data :
211
- custom_data = json .dumps (custom_data )
214
+ custom_data = json .dumps (custom_data , cls = self . _json_encoder )
212
215
213
216
string_to_sign = "%s:%s" % (socket_id , channel )
214
217
@@ -244,15 +247,14 @@ def validate_webhook(self, key, signature, body):
244
247
return None
245
248
246
249
try :
247
- body_data = json .loads (body )
250
+ body_data = json .loads (body , cls = self . _json_decoder )
248
251
except ValueError :
249
252
return None
250
253
251
254
time_ms = body_data .get ('time_ms' )
252
255
if not time_ms :
253
256
return None
254
257
255
- print (abs (time .time ()* 1000 - time_ms ))
256
258
if abs (time .time ()* 1000 - time_ms ) > 300000 :
257
259
return None
258
260
0 commit comments