Skip to content

Commit 3311e6b

Browse files
committed
Renamed consumers to emitters (snowplow#90)
1 parent f1e35d8 commit 3311e6b

5 files changed

Lines changed: 40 additions & 40 deletions

File tree

snowplow_tracker/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from snowplow_tracker._version import __version__
22
from snowplow_tracker.subject import Subject
3-
from snowplow_tracker.consumer import logger, Consumer, AsyncConsumer, CeleryConsumer, RedisConsumer
3+
from snowplow_tracker.emitters import logger, Emitter, AsyncEmitter, CeleryEmitter, RedisEmitter
44
from snowplow_tracker.tracker import Tracker
55
from contracts import disable_all as disable_contracts, enable_all as enable_contracts
Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
"""
2-
consumer.py
2+
emitters.py
33
44
Copyright (c) 2013-2014 Snowplow Analytics Ltd. All rights reserved.
55
@@ -55,7 +55,7 @@
5555
app = Celery("Snowplow", broker="redis://guest@localhost//")
5656

5757

58-
class Consumer(object):
58+
class Emitter(object):
5959
"""
6060
Synchronously send Snowplow events to a Snowplow as_collector_uri
6161
Supports both GET and POST requests
@@ -84,7 +84,7 @@ def __init__(self, endpoint, protocol="http", port=None, method="get", buffer_si
8484
If method is "get": An array of dictionaries corresponding to the unsent events' payloads
8585
:type on_failure: function | None
8686
"""
87-
self.endpoint = Consumer.as_collector_uri(endpoint, protocol, port)
87+
self.endpoint = Emitter.as_collector_uri(endpoint, protocol, port)
8888

8989
self.method = method
9090

@@ -200,45 +200,45 @@ def http_get(self, payload):
200200

201201
def sync_flush(self):
202202
"""
203-
Calls the flush method of the base Consumer class.
203+
Calls the flush method of the base Emitter class.
204204
This is guaranteed to be blocking, not asynchronous.
205205
"""
206206
logger.debug("Starting synchronous flush...")
207-
result = Consumer.flush(self)
207+
result = Emitter.flush(self)
208208
for t in self.threads:
209209
t.join(THREAD_TIMEOUT)
210210
logger.debug("Finished synchrous flush")
211211
return result
212212

213213

214-
class AsyncConsumer(Consumer):
214+
class AsyncEmitter(Emitter):
215215
"""
216216
Uses threads to send HTTP requests asynchronously
217217
"""
218218
def flush(self):
219219
"""
220220
Removes all dead threads, then creates a new thread which
221-
excecutes the flush method of the base Consumer class
221+
excecutes the flush method of the base Emitter class
222222
"""
223223
self.threads = [t for t in self.threads if t.isAlive()]
224224
logger.debug("Flushing thread running...")
225-
t = threading.Thread(target=super(AsyncConsumer, self).flush)
225+
t = threading.Thread(target=super(AsyncEmitter, self).flush)
226226
self.threads.append(t)
227227
t.start()
228228

229229

230-
class CeleryConsumer(Consumer):
230+
class CeleryEmitter(Emitter):
231231
"""
232232
Uses a Celery worker to send HTTP requests asynchronously
233233
"""
234234
def flush(self):
235235
"""
236236
Schedules a flush task
237237
"""
238-
super(CeleryConsumer, self).flush.delay()
238+
super(CeleryEmitter, self).flush.delay()
239239

240240

241-
class RedisConsumer(object):
241+
class RedisEmitter(object):
242242
"""
243243
Sends Snowplow events to a Redis database
244244
"""
@@ -266,7 +266,7 @@ def input(self, payload):
266266
logger.debug("Finished sending event to Redis.")
267267

268268
def flush(self):
269-
logger.warn("The RedisConsumer class does not need to be flushed")
269+
logger.warn("The RedisEmitter class does not need to be flushed")
270270

271271
def sync_flush(self):
272272
self.flush()

snowplow_tracker/test/integration/test_integration.py

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import redis
2626
import json
2727
import base64
28-
from snowplow_tracker import tracker, _version, consumer, subject
28+
from snowplow_tracker import tracker, _version, emitters, subject
2929
from httmock import all_requests, HTTMock
3030

3131
try:
@@ -36,7 +36,7 @@
3636

3737
querystrings = [""]
3838

39-
default_consumer = consumer.Consumer("localhost", protocol="http", port=80)
39+
default_emitter = emitters.Emitter("localhost", protocol="http", port=80)
4040

4141
default_subject = subject.Subject()
4242

@@ -65,23 +65,23 @@ def fail_response_content(url, request):
6565
class IntegrationTest(unittest.TestCase):
6666

6767
def test_integration_page_view(self):
68-
t = tracker.Tracker(default_consumer, default_subject)
68+
t = tracker.Tracker(default_emitter, default_subject)
6969
with HTTMock(pass_response_content):
7070
t.track_page_view("http://savethearctic.org", "Save The Arctic", "http://referrer.com")
7171
expected_fields = {"e": "pv", "page": "Save+The+Arctic", "url": "http%3A%2F%2Fsavethearctic.org", "refr": "http%3A%2F%2Freferrer.com"}
7272
for key in expected_fields:
7373
self.assertEquals(from_querystring(key, querystrings[-1]), expected_fields[key])
7474

7575
def test_integration_ecommerce_transaction_item(self):
76-
t = tracker.Tracker(default_consumer, default_subject)
76+
t = tracker.Tracker(default_emitter, default_subject)
7777
with HTTMock(pass_response_content):
7878
t.track_ecommerce_transaction_item("12345", "pbz0025", 7.99, 2, "black-tarot", "tarot", currency="GBP")
7979
expected_fields = {"ti_ca": "tarot", "ti_id": "12345", "ti_qu": "2", "ti_sk": "pbz0025", "e": "ti", "ti_nm": "black-tarot", "ti_pr": "7.99", "ti_cu": "GBP"}
8080
for key in expected_fields:
8181
self.assertEquals(from_querystring(key, querystrings[-1]), expected_fields[key])
8282

8383
def test_integration_ecommerce_transaction(self):
84-
t = tracker.Tracker(default_consumer, default_subject)
84+
t = tracker.Tracker(default_emitter, default_subject)
8585
with HTTMock(pass_response_content):
8686
t.track_ecommerce_transaction("6a8078be", 35, city="London", currency="GBP", items=
8787
[{
@@ -110,23 +110,23 @@ def test_integration_ecommerce_transaction(self):
110110
self.assertEquals(from_querystring("dtm", querystrings[-3]), from_querystring("dtm", querystrings[-2]))
111111

112112
def test_integration_screen_view(self):
113-
t = tracker.Tracker(default_consumer, default_subject)
113+
t = tracker.Tracker(default_emitter, default_subject)
114114
with HTTMock(pass_response_content):
115115
t.track_screen_view("Game HUD 2", "Hello!")
116116
expected_fields = {"e": "ue"}
117117
for key in expected_fields:
118118
self.assertEquals(from_querystring(key, querystrings[-1]), expected_fields[key])
119119

120120
def test_integration_struct_event(self):
121-
t = tracker.Tracker(default_consumer, default_subject)
121+
t = tracker.Tracker(default_emitter, default_subject)
122122
with HTTMock(pass_response_content):
123123
t.track_struct_event("Ecomm", "add-to-basket", "dog-skateboarding-video", "hd", 13.99)
124124
expected_fields = {"se_ca": "Ecomm", "se_pr": "hd", "se_la": "dog-skateboarding-video", "se_va": "13.99", "se_ac": "add-to-basket", "e": "se"}
125125
for key in expected_fields:
126126
self.assertEquals(from_querystring(key, querystrings[-1]), expected_fields[key])
127127

128128
def test_integration_unstruct_event_non_base64(self):
129-
t = tracker.Tracker(default_consumer, default_subject, encode_base64=False)
129+
t = tracker.Tracker(default_emitter, default_subject, encode_base64=False)
130130
with HTTMock(pass_response_content):
131131
t.track_unstruct_event({"schema": "com.acme/viewed_product/json/2-0-2", "data": {"product_id": "ASO01043", "price$flt": 49.95, "walrus$tms": 1000}})
132132
expected_fields = {"e": "ue"}
@@ -140,21 +140,21 @@ def test_integration_unstruct_event_non_base64(self):
140140
})
141141

142142
def test_integration_unstruct_event_base64(self):
143-
t = tracker.Tracker(default_consumer, default_subject, encode_base64=True)
143+
t = tracker.Tracker(default_emitter, default_subject, encode_base64=True)
144144
with HTTMock(pass_response_content):
145145
t.track_unstruct_event({"schema": "com.acme/viewed_product/json/2-0-2", "data": {"product_id": "ASO01043", "price$flt": 49.95, "walrus$tms": 1000}})
146146
expected_fields = {"e": "ue"}
147147
for key in expected_fields:
148148
self.assertEquals(from_querystring(key, querystrings[-1]), expected_fields[key])
149149
envelope_string = from_querystring("ue_px", querystrings[-1])
150-
envelope = json.loads((base64.urlsafe_b64decode(bytearray(envelope_string, 'utf-8'))).decode("utf-8"))
150+
envelope = json.loads((base64.urlsafe_b64decode(bytearray(envelope_string, "utf-8"))).decode("utf-8"))
151151
self.assertEquals(envelope, {
152152
"schema": "com.snowplowanalytics/unstruct_event/json/1-0-0",
153153
"data": {"schema": "com.acme/viewed_product/json/2-0-2", "data": {"product_id": "ASO01043", "price$flt": 49.95, "walrus$tms": 1000}}
154154
})
155155

156156
def test_integration_context_non_base64(self):
157-
t = tracker.Tracker(default_consumer, default_subject, encode_base64=False)
157+
t = tracker.Tracker(default_emitter, default_subject, encode_base64=False)
158158
with HTTMock(pass_response_content):
159159
t.track_page_view("localhost", "local host", None, [{"schema": "com.example/user/json/2-0-3", "data": {"user_type": "tester"}}])
160160
envelope_string = from_querystring("co", querystrings[-1])
@@ -165,11 +165,11 @@ def test_integration_context_non_base64(self):
165165
})
166166

167167
def test_integration_context_base64(self):
168-
t = tracker.Tracker(default_consumer, default_subject, encode_base64=True)
168+
t = tracker.Tracker(default_emitter, default_subject, encode_base64=True)
169169
with HTTMock(pass_response_content):
170170
t.track_page_view("localhost", "local host", None, [{"schema": "com.example/user/json/2-0-3", "data": {"user_type": "tester"}}])
171171
envelope_string = from_querystring("cx", querystrings[-1])
172-
envelope = json.loads((base64.urlsafe_b64decode(bytearray(envelope_string, 'utf-8'))).decode("utf-8"))
172+
envelope = json.loads((base64.urlsafe_b64decode(bytearray(envelope_string, "utf-8"))).decode("utf-8"))
173173
self.assertEquals(envelope, {
174174
"schema": "com.snowplowanalytics/contexts/json/1-0-0",
175175
"data":[{"schema": "com.example/user/json/2-0-3", "data": {"user_type": "tester"}}]
@@ -184,7 +184,7 @@ def test_integration_standard_nv_pairs(self):
184184
s.set_timezone("Europe London")
185185
s.set_lang("en")
186186

187-
t = tracker.Tracker(consumer.Consumer("localhost"), s, "cf", app_id="angry-birds-android")
187+
t = tracker.Tracker(emitters.Emitter("localhost"), s, "cf", app_id="angry-birds-android")
188188
with HTTMock(pass_response_content):
189189
t.track_page_view("localhost", "local host")
190190
expected_fields = {"tna": "cf", "res": "100x200",
@@ -195,15 +195,15 @@ def test_integration_standard_nv_pairs(self):
195195

196196
def test_integration_redis_default(self):
197197
r = redis.StrictRedis()
198-
t = tracker.Tracker(consumer.RedisConsumer(), default_subject)
198+
t = tracker.Tracker(emitters.RedisEmitter(), default_subject)
199199
t.track_page_view("http://www.example.com")
200200
event_string = r.rpop("snowplow")
201201
event_dict = json.loads(event_string.decode("utf-8"))
202202
self.assertEquals(event_dict["e"], "pv")
203203

204204
def test_integration_redis_custom(self):
205205
r = redis.StrictRedis(db=1)
206-
t = tracker.Tracker(consumer.RedisConsumer(rdb=r, key="custom_key"), default_subject)
206+
t = tracker.Tracker(emitters.RedisEmitter(rdb=r, key="custom_key"), default_subject)
207207
t.track_page_view("http://www.example.com")
208208
event_string = r.rpop("custom_key")
209209
event_dict = json.loads(event_string.decode("utf-8"))
@@ -212,9 +212,9 @@ def test_integration_redis_custom(self):
212212
def test_integration_success_callback(self):
213213
callback_success_queue = []
214214
callback_failure_queue = []
215-
callback_consumer = consumer.Consumer("localhost", on_success=lambda x: callback_success_queue.append(x),
215+
callback_emitter = emitters.Emitter("localhost", on_success=lambda x: callback_success_queue.append(x),
216216
on_failure=lambda x, y:callback_failure_queue.append(x))
217-
t = tracker.Tracker(callback_consumer, default_subject)
217+
t = tracker.Tracker(callback_emitter, default_subject)
218218
with HTTMock(pass_response_content):
219219
t.track_page_view("http://www.example.com")
220220
self.assertEquals(callback_success_queue[0], 1)
@@ -223,9 +223,9 @@ def test_integration_success_callback(self):
223223
def test_integration_failure_callback(self):
224224
callback_success_queue = []
225225
callback_failure_queue = []
226-
callback_consumer = consumer.Consumer("localhost", on_success=lambda x: callback_success_queue.append(x),
226+
callback_emitter = emitters.Emitter("localhost", on_success=lambda x: callback_success_queue.append(x),
227227
on_failure=lambda x, y:callback_failure_queue.append(x))
228-
t = tracker.Tracker(callback_consumer, default_subject)
228+
t = tracker.Tracker(callback_emitter, default_subject)
229229
with HTTMock(fail_response_content):
230230
t.track_page_view("http://www.example.com")
231231
self.assertEquals(callback_success_queue, [])

snowplow_tracker/test/unit/test_tracker.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import unittest
2424
from freezegun import freeze_time
2525
from snowplow_tracker.tracker import Tracker
26-
from snowplow_tracker.consumer import Consumer
26+
from snowplow_tracker.emitters import Emitter
2727

2828

2929
class TestTracker(unittest.TestCase):
@@ -32,7 +32,7 @@ def setUp(self):
3232
pass
3333

3434
def test_initialisation(self):
35-
t = Tracker(Consumer("d3rkrsqld9gmqf.cloudfront.net"), namespace="cloudfront", encode_base64= False, app_id="AF003")
35+
t = Tracker(Emitter("d3rkrsqld9gmqf.cloudfront.net"), namespace="cloudfront", encode_base64= False, app_id="AF003")
3636
self.assertEquals(t.standard_nv_pairs["tna"], "cloudfront")
3737
self.assertEquals(t.standard_nv_pairs["aid"], "AF003")
3838
self.assertEquals(t.encode_base64, False)

snowplow_tracker/tracker.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,14 @@ class Tracker:
5151

5252
new_contract("tracker", lambda s: isinstance(s, Tracker))
5353

54-
new_contract("consumer", lambda s: hasattr(s, "input"))
54+
new_contract("emitter", lambda s: hasattr(s, "input"))
5555

5656
@contract
5757
def __init__(self, out_queue, _subject=None,
5858
namespace=None, app_id=None, encode_base64=DEFAULT_ENCODE_BASE64):
5959
"""
60-
:param out_queue: Consumer to which events will be sent
61-
:type out_queue: consumer
60+
:param out_queue: Emitter to which events will be sent
61+
:type out_queue: emitter
6262
:param _subject: Subject to be tracked
6363
:type _subject: subject | None
6464
:param namespace: Identifier for the Tracker instance
@@ -115,7 +115,7 @@ def get_timestamp(tstamp=None):
115115
@contract
116116
def track(self, pb):
117117
"""
118-
Send the payload to a consumer
118+
Send the payload to a emitter
119119
120120
:param pb: Payload builder
121121
:type pb: payload
@@ -350,7 +350,7 @@ def track_unstruct_event(self, event_json, context=None, tstamp=None):
350350
@contract
351351
def flush(self, async=False):
352352
"""
353-
Flush the consumer
353+
Flush the emitter
354354
355355
:param async: Whether the flush is done asynchronously. Default is False
356356
:type async: bool

0 commit comments

Comments
 (0)