1+ """Base event classes are defined in this module."""
2+
3+
4+ def get_event (key , event_time , user_info ,
5+ data_list = None , data_list_len = 0 ):
6+ """Event factory function."""
7+ if data_list_len > 1 :
8+ return DictEvent (
9+ key , event_time , user_info ,
10+ data_list , data_list_len
11+ )
12+ elif data_list_len > 0 :
13+ return ValueEvent (key , event_time , user_info , data_list [0 ])
14+ return Event (key , event_time , user_info )
15+
16+
117class Event (object ):
2- def __init__ (self ,
3- key , event_time , user_info ,
4- data_list = None , data_list_len = 0 ):
5- if data_list_len :
6- self .data_list = data_list
7- self .data_list_len = data_list_len
18+ """
19+ Base event class.
820
21+ Have only basic event info.
22+ """
23+
24+ __slots__ = ('key' , 'event_time' , 'user_info' )
25+
26+ def __init__ (self , key , event_time , user_info ):
27+ """Copy ctypes structures into a pure Python ones."""
928 self .event_time = event_time .make_object ()
1029 self .user_info = user_info .make_object ()
1130 self .key = key
@@ -25,39 +44,51 @@ def __dumpdict__(self):
2544 }
2645
2746
47+ class ValueEvent (Event ):
48+ """Add a single value to a base event."""
49+
50+ __slots__ = ('key' , 'event_time' , 'user_info' , 'value' )
51+
52+ def __init__ (self , key , event_time , user_info , value ):
53+ """Add self.value property to a base event info."""
54+ # No super constructor is used for performance reasons.
55+ self .event_time = event_time .make_object ()
56+ self .user_info = user_info .make_object ()
57+ self .key = key
58+ self .value = value
59+
60+ def __dumpdict__ (self ):
61+ d = super (ValueEvent , self ).__dumpdict__ ()
62+ d ['value' ] = self .value
63+ return d
64+
65+
2866class DictEvent (Event ):
2967 """
30- This is a simplified form of any Alohalytics pairs event
31- when all event params (except datetime and user/device identification)
32- are accumulated into a dict.
33- You can try to convert Event instance to it with a @method from_event .
68+ This is a simplified form of any Alohalytics pairs event.
69+
70+ All event params (except datetime and user/device identification)
71+ are accumulated into a dict .
3472 """
35- __slots__ = ('data' , 'event_time' , 'key' , 'user_info' )
73+
74+ __slots__ = ('data' ,)
3675
3776 def __init__ (self ,
3877 key , event_time , user_info ,
3978 data_list , data_list_len ):
40- super (DictEvent , self ).__init__ (
41- key , event_time , user_info
42- )
43-
44- if data_list_len % 2 != 0 :
45- raise ValueError (
46- "Event can't be casted to a dict without additional knowledge"
47- )
48-
49- self .data = {
50- data_list [i ]: data_list [i + 1 ]
51- for i in range (0 , data_list_len , + 2 )
52- }
79+ """Add event pairs to a dict self.data."""
80+ # No super constructor is used for performance reasons.
81+ self .event_time = event_time .make_object ()
82+ self .user_info = user_info .make_object ()
83+ self .key = key
5384
54- @ classmethod
55- def from_event ( cls , event ):
56- return DictEvent (
57- event . key ,
58- event . event_time , event . user_info ,
59- event . data_list , event . data_list_len
60- )
85+ try :
86+ self . data = {
87+ data_list [ i ]: data_list [ i + 1 ]
88+ for i in range ( 0 , data_list_len , + 2 )
89+ }
90+ except IndexError :
91+ raise ValueError ( 'Incorrect data_list' )
6192
6293 def __basic_dumpdict__ (self ):
6394 return super (DictEvent , self ).__dumpdict__ ()
0 commit comments