Skip to content

Commit 3c4b704

Browse files
committed
Updating search
1 parent c9bcb2f commit 3c4b704

4 files changed

Lines changed: 119 additions & 391 deletions

File tree

‎splitcli/experiment/batch_client.py‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ def track(self, key, traffic_type, event_type, value, properties):
4444
while not success:
4545
success = self.split_client.track(key, traffic_type, event_type, value, properties)
4646
if not success:
47+
print(key, traffic_type, event_type, value, properties)
4748
time.sleep(.1)
4849

4950
def destroy(self):

‎splitcli/experiment/experiment.py‎

Lines changed: 35 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -2,71 +2,52 @@
22

33
from splitcli.experiment.batch_client import BatchClient
44
from splitcli.experiment.event_result import EventResult
5+
from splitcli.experiment.generator import events
56

67
class Experiment(object):
7-
def __init__(self, sample, feature, comp_treatment="on", key_pattern="user_{position}", traffic_type="user"):
8+
def __init__(self, sdk_token, feature, comp_treatment="on", key_pattern="user_{position}", traffic_type="user"):
89
super(Experiment, self).__init__()
10+
self.sdk_token = sdk_token
11+
self.split_client = BatchClient(sdk_token)
912
self.feature = feature
1013
self.comp_treatment = comp_treatment
11-
self.sample = sample
1214
self.key_pattern = key_pattern
1315
self.event_results = []
1416
self.traffic_type = traffic_type
1517

16-
def register(self, eventType, properties={}, property_value=None):
17-
event_result = EventResult(eventType, properties, self.sample, property_value=property_value)
18-
self.event_results.append(event_result)
19-
return event_result
20-
21-
def key(self, position):
22-
return self.key_pattern.format(position=position)
23-
24-
def run(self, sdk_token):
25-
batch_client = BatchClient(sdk_token)
26-
base_sample = 0
27-
comp_sample = 0
28-
for position in range(self.sample):
18+
def run(self, sample_size):
19+
(base_keys, comp_keys) = self.get_samples(sample_size)
20+
for event_result in self.event_results:
21+
(base_events, comp_events) = events(event_result, len(base_keys), len(comp_keys))
22+
self.send_events(event_result, base_events, base_keys)
23+
self.send_events(event_result, comp_events, comp_keys)
24+
self.split_client.destroy()
25+
26+
def get_samples(self, sample_size):
27+
base_keys = []
28+
comp_keys = []
29+
for position in range(sample_size):
2930
key = self.key(position)
30-
treatment = batch_client.get_treatment(key, self.feature)
31+
treatment = self.split_client.get_treatment(key, self.feature)
3132
if treatment == self.comp_treatment:
32-
comp_sample += 1
33+
comp_keys.append(key)
3334
else:
34-
base_sample += 1
35+
base_keys.append(key)
36+
return (base_keys, comp_keys)
37+
38+
def send_events(self, event_result, events, keys):
39+
for (key, (count, value)) in zip(keys,events):
40+
properties = event_result.properties
41+
if event_result.property_value is not None:
42+
properties[event_result.property_value] = value
43+
for _ in range(count):
44+
time.sleep(.001)
45+
self.split_client.track(key, self.traffic_type, event_result.event_type, value, properties)
3546

36-
for event_result in self.event_results:
37-
base_events = event_result.base_events(base_sample)
38-
comp_events = event_result.comp_events(comp_sample)
39-
40-
base_pos = 0
41-
comp_pos = 0
42-
43-
for position in range(self.sample):
44-
key = self.key(position)
45-
treatment = batch_client.get_treatment(key, self.feature)
46-
if treatment == self.comp_treatment:
47-
if comp_pos >= len(comp_events):
48-
print(str(len(comp_events)) + " | " + str(comp_sample) + " | " + str(comp_pos))
49-
(count, value) = comp_events[comp_pos]
50-
51-
properties = event_result.properties
52-
if event_result.property_value is not None:
53-
properties[event_result.property_value] = value
54-
self.track(batch_client, key, self.traffic_type, event_result.event_type, properties, count, value)
55-
comp_pos += 1
56-
else:
57-
if base_pos >= len(base_events):
58-
print(str(len(base_events)) + " | " + str(base_sample) + " | " + str(base_pos))
59-
(count, value) = base_events[base_pos]
47+
def key(self, position):
48+
return self.key_pattern.format(position=position)
6049

61-
properties = event_result.properties
62-
if event_result.property_value is not None:
63-
properties[event_result.property_value] = value
64-
self.track(batch_client, key, self.traffic_type, event_result.event_type, properties, count, value)
65-
base_pos += 1
66-
67-
batch_client.destroy()
68-
69-
def track(self, split_client, key, traffic_type, event_type, properties, event_count, event_value):
70-
for _ in range(event_count):
71-
time.sleep(.001)
72-
split_client.track(key, traffic_type, event_type, event_value, properties)
50+
def register(self, eventType, properties={}, property_value=None):
51+
event_result = EventResult(eventType, properties, property_value=property_value)
52+
self.event_results.append(event_result)
53+
return event_result

0 commit comments

Comments
 (0)