Skip to content

Commit c75482c

Browse files
Narek MkhitaryanNarek Mkhitaryan
authored andcommitted
client init mixpanel traking
1 parent 98948dd commit c75482c

File tree

4 files changed

+85
-25
lines changed

4 files changed

+85
-25
lines changed

saclient.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from superannotate import SAClient
2+
from mixpanel import Mixpanel
3+
4+
# mx = Mixpanel("e741d4863e7e05b1a45833d01865ef0d")
5+
# data = {
6+
# "SDK": True,
7+
# "Team": "test",
8+
# "Team Owner": "test",
9+
# "Version": "test",
10+
# "Python version": "platform.python_version()",
11+
# "Python interpreter type": "platform.python_implementation()",
12+
# }
13+
# mx.track('narekm@superannotate.com', 'test__init__', data)
14+
15+
sa = SAClient()

src/superannotate/lib/app/interface/base_interface.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import functools
22
import json
33
import os
4+
import platform
45
import sys
56
import typing
67
from inspect import signature
@@ -124,10 +125,10 @@ def _retrieve_configs_from_env() -> typing.Union[ConfigEntity, None]:
124125
class Tracker:
125126
def get_mp_instance(self) -> Mixpanel:
126127
client = self.get_client()
127-
mp_token = "ca95ed96f80e8ec3be791e2d3097cf51"
128-
if client:
129-
if client.host != constants.BACKEND_URL:
130-
mp_token = "e741d4863e7e05b1a45833d01865ef0d"
128+
if client.controller._config.API_URL == constants.BACKEND_URL: # noqa
129+
mp_token = "ca95ed96f80e8ec3be791e2d3097cf51"
130+
else:
131+
mp_token = "e741d4863e7e05b1a45833d01865ef0d"
131132
return Mixpanel(mp_token)
132133

133134
@staticmethod
@@ -137,6 +138,8 @@ def get_default_payload(team_name, user_id):
137138
"Team": team_name,
138139
"Team Owner": user_id,
139140
"Version": __version__,
141+
"Python version": platform.python_version(),
142+
"Python interpreter type": platform.python_implementation(),
140143
}
141144

142145
def __init__(self, function):
@@ -170,6 +173,8 @@ def default_parser(function_name: str, kwargs: dict) -> tuple:
170173
for key, value in kwargs.items():
171174
if key == "self":
172175
continue
176+
elif key in ("token", "config_path"):
177+
properties[key] = str(bool(value))
173178
elif value is None:
174179
properties[key] = value
175180
elif key == "project":
@@ -241,5 +246,6 @@ def __new__(mcs, name, bases, attrs):
241246
attr_value, FunctionType
242247
) and not attr_value.__name__.startswith("_"):
243248
attrs[attr_name] = Tracker(validate_arguments(attr_value))
249+
attrs["__init__"] = Tracker(validate_arguments(attrs["__init__"]))
244250
tmp = super().__new__(mcs, name, bases, attrs)
245251
return tmp

tests/integration/items/test_search_items.py

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -78,20 +78,3 @@ def test_search_items_recursive(self):
7878

7979
items = sa.search_items(self.PROJECT_NAME, recursive=True)
8080
assert len(items) == 8
81-
82-
def test_search_items_by_annotator_email(self):
83-
test_email = "shab.prog@gmail.com"
84-
sa.add_contributors_to_project(
85-
self.PROJECT_NAME, ["shab.prog@gmail.com"], "Annotator"
86-
)
87-
sa.upload_images_from_folder_to_project(
88-
self.PROJECT_NAME, self.folder_path, annotation_status="InProgress"
89-
)
90-
sa.assign_items(
91-
self.PROJECT_NAME, [self.IMAGE1_NAME, self.IMAGE2_NAME], test_email
92-
)
93-
94-
items = sa.search_items(
95-
self.PROJECT_NAME, annotator_email=test_email, recursive=True
96-
)
97-
assert len(items) == 2

tests/integration/mixpanel/test_mixpanel_decorator.py

Lines changed: 60 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import copy
2+
import platform
3+
import tempfile
24
import threading
5+
from configparser import ConfigParser
36
from unittest import TestCase
47
from unittest.mock import patch
58

@@ -18,6 +21,8 @@ class TestMixpanel(TestCase):
1821
"Team Owner": TEAM_DATA["creator_id"],
1922
"Version": __version__,
2023
"Success": True,
24+
"Python version": platform.python_version(),
25+
"Python interpreter type": platform.python_implementation(),
2126
}
2227
PROJECT_NAME = "TEST_MIX"
2328
PROJECT_DESCRIPTION = "Desc"
@@ -49,6 +54,57 @@ def _safe_delete_project(cls, project_name):
4954
def default_payload(self):
5055
return copy.copy(self.BLANK_PAYLOAD)
5156

57+
@patch("lib.app.interface.base_interface.Tracker._track")
58+
def test_init(self, track_method):
59+
SAClient()
60+
result = list(track_method.call_args)[0]
61+
payload = self.default_payload
62+
payload.update({"token": "False", "config_path": "False"})
63+
assert result[1] == "__init__"
64+
assert payload == result[2]
65+
66+
@patch("lib.app.interface.base_interface.Tracker._track")
67+
@patch("lib.core.usecases.GetTeamUseCase")
68+
def test_init_via_token(self, get_team_use_case, track_method):
69+
SAClient(token="test=3232")
70+
result = list(track_method.call_args)[0]
71+
payload = self.default_payload
72+
payload.update(
73+
{
74+
"token": "True",
75+
"config_path": "False",
76+
"Team": get_team_use_case().execute().data.name,
77+
"Team Owner": get_team_use_case().execute().data.creator_id,
78+
}
79+
)
80+
assert result[1] == "__init__"
81+
assert payload == result[2]
82+
83+
@patch("lib.app.interface.base_interface.Tracker._track")
84+
@patch("lib.core.usecases.GetTeamUseCase")
85+
def test_init_via_config_file(self, get_team_use_case, track_method):
86+
with tempfile.TemporaryDirectory() as config_dir:
87+
config_ini_path = f"{config_dir}/config.ini"
88+
with patch("lib.core.CONFIG_INI_FILE_LOCATION", config_ini_path):
89+
with open(f"{config_dir}/config.ini", "w") as config_ini:
90+
config_parser = ConfigParser()
91+
config_parser.optionxform = str
92+
config_parser["DEFAULT"] = {"SA_TOKEN": "test=3232"}
93+
config_parser.write(config_ini)
94+
SAClient(config_path=f"{config_dir}/config.ini")
95+
result = list(track_method.call_args)[0]
96+
payload = self.default_payload
97+
payload.update(
98+
{
99+
"token": "False",
100+
"config_path": "True",
101+
"Team": get_team_use_case().execute().data.name,
102+
"Team Owner": get_team_use_case().execute().data.creator_id,
103+
}
104+
)
105+
assert result[1] == "__init__"
106+
assert payload == result[2]
107+
52108
@patch("lib.app.interface.base_interface.Tracker._track")
53109
def test_get_team_metadata(self, track_method):
54110
team = self.CLIENT.get_team_metadata()
@@ -57,7 +113,7 @@ def test_get_team_metadata(self, track_method):
57113
payload = self.default_payload
58114
assert result[0] == team_owner
59115
assert result[1] == "get_team_metadata"
60-
assert payload == list(track_method.call_args)[0][2]
116+
assert payload == result[2]
61117

62118
@patch("lib.app.interface.base_interface.Tracker._track")
63119
def test_search_team_contributors(self, track_method):
@@ -72,7 +128,7 @@ def test_search_team_contributors(self, track_method):
72128
payload = self.default_payload
73129
payload.update(kwargs)
74130
assert result[1] == "search_team_contributors"
75-
assert payload == list(track_method.call_args)[0][2]
131+
assert payload == result[2]
76132

77133
@patch("lib.app.interface.base_interface.Tracker._track")
78134
def test_search_projects(self, track_method):
@@ -87,7 +143,7 @@ def test_search_projects(self, track_method):
87143
payload = self.default_payload
88144
payload.update(kwargs)
89145
assert result[1] == "search_projects"
90-
assert payload == list(track_method.call_args)[0][2]
146+
assert payload == result[2]
91147

92148
@patch("lib.app.interface.base_interface.Tracker._track")
93149
def test_create_project(self, track_method):
@@ -110,7 +166,7 @@ def test_create_project(self, track_method):
110166
payload.update(kwargs)
111167
payload["settings"] = list(kwargs["settings"].keys())
112168
assert result[1] == "create_project"
113-
assert payload == list(track_method.call_args)[0][2]
169+
assert payload == result[2]
114170

115171
@pytest.mark.skip("Need to adjust")
116172
@patch("lib.app.interface.base_interface.Tracker._track")

0 commit comments

Comments
 (0)