def __init__(self, emitters, subject=None, namespace=None, app_id=None, encode_base64=DEFAULT_ENCODE_BASE64): """ :param emitters: Emitters to which events will be sent :type emitters: list[>0](emitter) | emitter :param subject: Subject to be tracked :type subject: subject | None :param namespace: Identifier for the Tracker instance :type namespace: string_or_none :param app_id: Application ID :type app_id: string_or_none :param encode_base64: Whether JSONs in the payload should be base-64 encoded :type encode_base64: bool """ if subject is None: subject = _subject.Subject() if type(emitters) is list: self.emitters = emitters else: self.emitters = [emitters] self.subject = subject self.encode_base64 = encode_base64 self.standard_nv_pairs = { "tv": VERSION, "tna": namespace, "aid": app_id } self.timer = None
def test_integration_standard_nv_pairs(self): s = subject.Subject() s.set_platform("mob") s.set_user_id("user12345") s.set_screen_resolution(100, 200) s.set_color_depth(24) s.set_timezone("Europe London") s.set_lang("en") t = tracker.Tracker(emitters.Emitter("localhost"), s, "cf", app_id="angry-birds-android") with HTTMock(pass_response_content): t.track_page_view("localhost", "local host") expected_fields = { "tna": "cf", "res": "100x200", "lang": "en", "aid": "angry-birds-android", "cd": "24", "tz": "Europe+London", "p": "mob", "tv": "py-" + _version.__version__ } for key in expected_fields: self.assertEquals(from_querystring(key, querystrings[-1]), expected_fields[key])
def test_subject_1(self): s = _subject.Subject().set_platform("srv").set_user_id("1234").set_lang("EN") exp = { "p": "srv", "uid": "1234", "lang": "EN" } self.assertDictEqual(s.standard_nv_pairs, exp) with pytest.raises(KeyError): s.standard_nv_pairs["res"] with pytest.raises(KeyError): s.standard_nv_pairs["vp"] with pytest.raises(KeyError): s.standard_nv_pairs["cd"] with pytest.raises(KeyError): s.standard_nv_pairs["tz"] with pytest.raises(KeyError): s.standard_nv_pairs["ip"] with pytest.raises(KeyError): s.standard_nv_pairs["ua"] with pytest.raises(KeyError): s.standard_nv_pairs["duid"] with pytest.raises(KeyError): s.standard_nv_pairs["tnuid"]
def test_subject_0(self): s = _subject.Subject() self.assertDictEqual(s.standard_nv_pairs, {"p": _subject.DEFAULT_PLATFORM}) s.set_platform("srv") s.set_user_id("1234") s.set_screen_resolution(1920, 1080) s.set_viewport(1080, 1080) s.set_color_depth(1080) s.set_timezone("PST") s.set_lang("EN") s.set_domain_user_id("domain-user-id") s.set_ip_address("127.0.0.1") s.set_useragent("useragent-string") s.set_network_user_id("network-user-id") exp = { "p": "srv", "uid": "1234", "res": "1920x1080", "vp": "1080x1080", "cd": 1080, "tz": "PST", "lang": "EN", "ip": "127.0.0.1", "ua": "useragent-string", "duid": "domain-user-id", "tnuid": "network-user-id" } self.assertDictEqual(s.standard_nv_pairs, exp)
def test_integration_event_subject(self): s = subject.Subject() s.set_domain_user_id("4616bfb38f872d16") s.set_ip_address("255.255.255.255") t = tracker.Tracker([emitters.Emitter("localhost")], s, "cf", app_id="angry-birds-android") evSubject = subject.Subject().set_domain_user_id( "1111aaa11a111a11").set_lang("EN") with HTTMock(pass_response_content): t.track_page_view("localhost", "local host", event_subject=evSubject) expected_fields = {"duid": "1111aaa11a111a11", "lang": "EN"} for key in expected_fields: self.assertEqual(from_querystring(key, querystrings[-1]), expected_fields[key])
def test_integration_identification_methods(self): s = subject.Subject() s.set_domain_user_id("4616bfb38f872d16") s.set_ip_address("255.255.255.255") s.set_useragent( "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)") s.set_network_user_id("fbc6c76c-bce5-43ce-8d5a-31c5") t = tracker.Tracker([emitters.Emitter("localhost")], s, "cf", app_id="angry-birds-android") with HTTMock(pass_response_content): t.track_page_view("localhost", "local host") expected_fields = { "duid": "4616bfb38f872d16", "ip": "255.255.255.255", "ua": "Mozilla%2F5.0+%28compatible%3B+MSIE+9.0%3B+Windows+NT+6.0%3B+Trident%2F5.0%29", "tnuid": "fbc6c76c-bce5-43ce-8d5a-31c5" } for key in expected_fields: self.assertEquals(from_querystring(key, querystrings[-1]), expected_fields[key])
import json import base64 from snowplow_tracker import tracker, _version, emitters, subject from httmock import all_requests, HTTMock try: from urllib.parse import unquote_plus # Python 3 except ImportError: from urllib import unquote_plus # Python 2 querystrings = [""] default_emitter = emitters.Emitter("localhost", protocol="http", port=80) default_subject = subject.Subject() def from_querystring(field, url): pattern = re.compile("^[^#]*[?&]" + field + "=([^&#]*)") match = pattern.match(url) if match: return match.groups()[0] @all_requests def pass_response_content(url, request): querystrings.append(request.url) return {"url": request.url, "status_code": 200}