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])
示例#3
0
    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"]
示例#4
0
    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)
示例#5
0
    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])
示例#6
0
    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}