|
15 | 15 | from abc import abstractmethod |
16 | 16 | from abc import abstractproperty |
17 | 17 |
|
18 | | -from . import exceptions |
19 | | -from . import project_config |
20 | 18 | from . import version |
21 | | -from .helpers import enums |
22 | 19 | from .helpers import event_tag_utils |
23 | 20 |
|
24 | 21 |
|
@@ -99,163 +96,7 @@ def _add_common_params(self, user_id, attributes): |
99 | 96 | self._add_time() |
100 | 97 |
|
101 | 98 |
|
102 | | -class EventBuilderV1(BaseEventBuilder): |
103 | | - """ Class which encapsulates methods to build events for tracking |
104 | | - impressions and conversions using the old endpoint. """ |
105 | | - |
106 | | - # Attribute mapping format |
107 | | - ATTRIBUTE_PARAM_FORMAT = '{segment_prefix}{segment_id}' |
108 | | - # Experiment mapping format |
109 | | - EXPERIMENT_PARAM_FORMAT = '{experiment_prefix}{experiment_id}' |
110 | | - # Event API format |
111 | | - OFFLINE_API_PATH = 'https://{project_id}.log.optimizely.com/event' |
112 | | - |
113 | | - |
114 | | - class EventParams(object): |
115 | | - ACCOUNT_ID = 'd' |
116 | | - PROJECT_ID = 'a' |
117 | | - EXPERIMENT_PREFIX = 'x' |
118 | | - GOAL_ID = 'g' |
119 | | - GOAL_NAME = 'n' |
120 | | - END_USER_ID = 'u' |
121 | | - EVENT_VALUE = 'v' |
122 | | - SEGMENT_PREFIX = 's' |
123 | | - SOURCE = 'src' |
124 | | - TIME = 'time' |
125 | | - |
126 | | - def _add_attributes(self, attributes): |
127 | | - """ Add attribute(s) information to the event. |
128 | | -
|
129 | | - Args: |
130 | | - attributes: Dict representing user attributes and values which need to be recorded. |
131 | | - """ |
132 | | - |
133 | | - if not attributes: |
134 | | - return |
135 | | - |
136 | | - for attribute_key in attributes.keys(): |
137 | | - attribute_value = attributes.get(attribute_key) |
138 | | - # Omit falsy attribute values |
139 | | - if attribute_value: |
140 | | - attribute = self.config.get_attribute(attribute_key) |
141 | | - if attribute: |
142 | | - self.params[self.ATTRIBUTE_PARAM_FORMAT.format( |
143 | | - segment_prefix=self.EventParams.SEGMENT_PREFIX, segment_id=attribute.segmentId)] = attribute_value |
144 | | - |
145 | | - def _add_source(self): |
146 | | - """ Add source information to the event. """ |
147 | | - |
148 | | - self.params[self.EventParams.SOURCE] = 'python-sdk-{version}'.format(version=version.__version__) |
149 | | - |
150 | | - def _add_time(self): |
151 | | - """ Add time information to the event. """ |
152 | | - |
153 | | - self.params[self.EventParams.TIME] = int(time.time()) |
154 | | - |
155 | | - def _add_impression_goal(self, experiment): |
156 | | - """ Add impression goal information to the event. |
157 | | -
|
158 | | - Args: |
159 | | - experiment: Object representing experiment being activated. |
160 | | - """ |
161 | | - |
162 | | - # For tracking impressions, goal ID is set equal to experiment ID of experiment being activated |
163 | | - self.params[self.EventParams.GOAL_ID] = experiment.id |
164 | | - self.params[self.EventParams.GOAL_NAME] = 'visitor-event' |
165 | | - |
166 | | - def _add_experiment(self, experiment, variation_id): |
167 | | - """ Add experiment to variation mapping to the impression event. |
168 | | -
|
169 | | - Args: |
170 | | - experiment: Object representing experiment being activated. |
171 | | - variation_id: ID for variation which would be presented to user. |
172 | | - """ |
173 | | - |
174 | | - self.params[self.EXPERIMENT_PARAM_FORMAT.format(experiment_prefix=self.EventParams.EXPERIMENT_PREFIX, |
175 | | - experiment_id=experiment.id)] = variation_id |
176 | | - |
177 | | - def _add_experiment_variation_params(self, user_id, valid_experiments): |
178 | | - """ Maps experiment and corresponding variation as parameters to be used in the event tracking call. |
179 | | -
|
180 | | - Args: |
181 | | - user_id: ID for user. |
182 | | - valid_experiments: List of tuples representing valid experiments for the event. |
183 | | - """ |
184 | | - |
185 | | - for experiment in valid_experiments: |
186 | | - variation = self.bucketer.bucket(experiment, user_id) |
187 | | - if variation: |
188 | | - self.params[self.EXPERIMENT_PARAM_FORMAT.format(experiment_prefix=self.EventParams.EXPERIMENT_PREFIX, |
189 | | - experiment_id=experiment.id)] = variation.id |
190 | | - |
191 | | - def _add_conversion_goal(self, event_key, event_value): |
192 | | - """ Add conversion goal information to the event. |
193 | | -
|
194 | | - Args: |
195 | | - event_key: Event key representing the event which needs to be recorded. |
196 | | - event_value: Value associated with the event. Can be used to represent revenue in cents. |
197 | | - """ |
198 | | - |
199 | | - event = self.config.get_event(event_key) |
200 | | - |
201 | | - if not event: |
202 | | - return |
203 | | - |
204 | | - event_ids = event.id |
205 | | - |
206 | | - if event_value: |
207 | | - event_ids = '{goal_id},{revenue_goal_id}'.format(goal_id=event.id, |
208 | | - revenue_goal_id=self.config.get_revenue_goal().id) |
209 | | - self.params[self.EventParams.EVENT_VALUE] = event_value |
210 | | - |
211 | | - self.params[self.EventParams.GOAL_ID] = event_ids |
212 | | - self.params[self.EventParams.GOAL_NAME] = event_key |
213 | | - |
214 | | - def create_impression_event(self, experiment, variation_id, user_id, attributes): |
215 | | - """ Create impression Event to be sent to the logging endpoint. |
216 | | -
|
217 | | - Args: |
218 | | - experiment: Object representing experiment for which impression needs to be recorded. |
219 | | - variation_id: ID for variation which would be presented to user. |
220 | | - user_id: ID for user. |
221 | | - attributes: Dict representing user attributes and values which need to be recorded. |
222 | | -
|
223 | | - Returns: |
224 | | - Event object encapsulating the impression event. |
225 | | - """ |
226 | | - |
227 | | - self.params = {} |
228 | | - self._add_common_params(user_id, attributes) |
229 | | - self._add_impression_goal(experiment) |
230 | | - self._add_experiment(experiment, variation_id) |
231 | | - return Event(self.OFFLINE_API_PATH.format(project_id=self.params[self.EventParams.PROJECT_ID]), |
232 | | - self.params) |
233 | | - |
234 | | - def create_conversion_event(self, event_key, user_id, attributes, event_tags, valid_experiments): |
235 | | - """ Create conversion Event to be sent to the logging endpoint. |
236 | | -
|
237 | | - Args: |
238 | | - event_key: Event key representing the event which needs to be recorded. |
239 | | - user_id: ID for user. |
240 | | - attributes: Dict representing user attributes and values. |
241 | | - event_tags: Dict representing metadata associated with the event. |
242 | | - valid_experiments: List of tuples representing valid experiments for the event. |
243 | | -
|
244 | | - Returns: |
245 | | - Event object encapsulating the conversion event. |
246 | | - """ |
247 | | - |
248 | | - event_value = event_tag_utils.get_revenue_value(event_tags) |
249 | | - |
250 | | - self.params = {} |
251 | | - self._add_common_params(user_id, attributes) |
252 | | - self._add_conversion_goal(event_key, event_value) |
253 | | - self._add_experiment_variation_params(user_id, valid_experiments) |
254 | | - return Event(self.OFFLINE_API_PATH.format(project_id=self.params[self.EventParams.PROJECT_ID]), |
255 | | - self.params) |
256 | | - |
257 | | - |
258 | | -class EventBuilderV2(BaseEventBuilder): |
| 99 | +class EventBuilder(BaseEventBuilder): |
259 | 100 | """ Class which encapsulates methods to build events for tracking |
260 | 101 | impressions and conversions using the new endpoints. """ |
261 | 102 |
|
@@ -437,26 +278,3 @@ def create_conversion_event(self, event_key, user_id, attributes, event_tags, va |
437 | 278 | self.params, |
438 | 279 | http_verb=self.HTTP_VERB, |
439 | 280 | headers=self.HTTP_HEADERS) |
440 | | - |
441 | | - |
442 | | -def get_event_builder(config, bucketer): |
443 | | - """ Helper method to get appropriate EventBuilder class based on the version of the datafile. |
444 | | -
|
445 | | - Args: |
446 | | - config: Object representing the project's configuration. |
447 | | - bucketer: Object representing the bucketer. |
448 | | -
|
449 | | - Returns: |
450 | | - Event builder based on the version of the datafile. |
451 | | -
|
452 | | - Raises: |
453 | | - Exception if provided datafile has unsupported version. |
454 | | - """ |
455 | | - |
456 | | - config_version = config.get_version() |
457 | | - if config_version == project_config.V1_CONFIG_VERSION: |
458 | | - return EventBuilderV1(config, bucketer) |
459 | | - if config_version == project_config.V2_CONFIG_VERSION: |
460 | | - return EventBuilderV2(config, bucketer) |
461 | | - |
462 | | - raise exceptions.InvalidInputException(enums.Errors.UNSUPPORTED_DATAFILE_VERSION) |
0 commit comments