Skip to content

Commit f59912a

Browse files
burivuhvicpopov
authored andcommitted
added new base event type and a factory function to create right instance
1 parent c29d0e8 commit f59912a

File tree

2 files changed

+64
-33
lines changed

2 files changed

+64
-33
lines changed

snippets/pyaloha/event.py

Lines changed: 62 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,30 @@
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+
117
class 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+
2866
class 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__()

snippets/pyaloha/event_factory.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import itertools
22
import traceback
33

4-
from pyaloha.event import Event
4+
from pyaloha.event import get_event
55

66

77
class EventFactory(object):
@@ -16,7 +16,7 @@ def __init__(self, custom_events):
1616

1717
def make_event(self, key, *args, **kwargs):
1818
try:
19-
return self.registered.get(key, Event)(key, *args, **kwargs)
19+
return self.registered.get(key, get_event)(key, *args, **kwargs)
2020
except Exception as exc:
2121
raise Exception(
2222
'Event "%s" creation failed: %s' % (

0 commit comments

Comments
 (0)