@@ -33,6 +33,7 @@ def __init__(self, options=SecureNativeOptions(), http_client=None):
3333 self .attempt = 0
3434 self .coefficients = [1 , 1 , 2 , 3 , 5 , 8 , 13 ]
3535 self .scheduler = None
36+ self .thread = None
3637
3738 if self .options .auto_send and not self .options .disable :
3839 interval_seconds = max (options .interval // 1000 , 1 )
@@ -45,7 +46,7 @@ def send_async(self, event, resource_path):
4546
4647 item = QueueItem (
4748 resource_path ,
48- json .dumps (event . as_dict ( )),
49+ json .dumps (EventManager . serialize ( event )),
4950 False
5051 )
5152
@@ -65,17 +66,17 @@ def send_sync(self, event, resource_path, retry):
6566 Logger .warning ("SDK is disabled. no operation will be performed" )
6667 return
6768
68- Logger .debug ("Attempting to send event {}" .format (event . as_dict () ))
69+ Logger .debug ("Attempting to send event {}" .format (event ))
6970 res = self .http_client .post (
7071 resource_path ,
71- json .dumps (event . as_dict ( ))
72+ json .dumps (EventManager . serialize ( event ))
7273 )
73- if res .status != 200 :
74- Logger .info ("SecureNative failed to call endpoint {} with event {}. adding back to queue" )
75-
74+ if res .status_code != 200 :
75+ Logger .info ("SecureNative failed to call endpoint {} with event {}. adding back to queue" . format (
76+ resource_path , event ))
7677 item = QueueItem (
7778 resource_path ,
78- json .dumps (event . as_dict ( )),
79+ json .dumps (EventManager . serialize ( event )),
7980 retry
8081 )
8182 self .queue .insert (0 , item )
@@ -90,10 +91,10 @@ def _send_events(self):
9091 for item in self .queue :
9192 try :
9293 res = self .http_client .post (item .url , item .body )
93- if res .status is 401 :
94+ if res .status_code is 401 :
9495 item .retry = False
95- elif res .status != 200 :
96- raise SecureNativeHttpException (res .status )
96+ elif res .status_code != 200 :
97+ raise SecureNativeHttpException (res .status_code )
9798
9899 Logger .debug ("Event successfully sent; {}" .format (item .body ))
99100 self .queue .remove (item )
@@ -116,9 +117,10 @@ def start_event_persist(self):
116117 if self .options .auto_send or self .send_enabled :
117118 self .send_enabled = True
118119 try :
120+
119121 self .scheduler = sched .scheduler (time .time , time .sleep )
120122 self .scheduler .enter (self .options .interval , 1 , self ._send_events )
121- self .scheduler .run ()
123+ self .thread = threading . Thread ( target = self . scheduler .run ). start ()
122124 except Exception :
123125 pass
124126 else :
@@ -128,8 +130,34 @@ def stop_event_persist(self):
128130 if self .send_enabled :
129131 Logger .debug ("Attempting to stop automatic event persistence" )
130132 try :
133+ self .thread .stop ()
131134 self .scheduler .cancel (self ._send_events )
132135 except ValueError :
133136 pass
134137
135138 Logger .debug ("Stopped event persistence" )
139+
140+ @staticmethod
141+ def serialize (obj ):
142+ return {
143+ "rid" : obj .rid ,
144+ "eventType" : obj .event_type .value ,
145+ "userId" : obj .user_id ,
146+ "userTraits" : {
147+ "name" : obj .user_traits .name ,
148+ "email" : obj .user_traits .email ,
149+ "createdAt" : obj .user_traits .created_at ,
150+ },
151+ "request" : {
152+ "cid" : obj .request .cid ,
153+ "vid" : obj .request .vid ,
154+ "fp" : obj .request .fp ,
155+ "ip" : obj .request .ip ,
156+ "remoteIp" : obj .request .remote_ip ,
157+ "method" : obj .request .method ,
158+ "url" : obj .request .url ,
159+ "headers" : obj .request .headers
160+ },
161+ "timestamp" : obj .timestamp ,
162+ "properties" : obj .properties ,
163+ }
0 commit comments