Skip to content

Commit dc5abec

Browse files
authored
Merge pull request #578 from superannotateai/1826_mixpanel
1826 mixpanel
2 parents 98948dd + e5b06c9 commit dc5abec

File tree

3 files changed

+72
-25
lines changed

3 files changed

+72
-25
lines changed

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

Lines changed: 12 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,10 @@ 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 == "token":
177+
properties["sa_token"] = str(bool(value))
178+
elif key == "config_path":
179+
properties[key] = str(bool(value))
173180
elif value is None:
174181
properties[key] = value
175182
elif key == "project":
@@ -241,5 +248,6 @@ def __new__(mcs, name, bases, attrs):
241248
attr_value, FunctionType
242249
) and not attr_value.__name__.startswith("_"):
243250
attrs[attr_name] = Tracker(validate_arguments(attr_value))
251+
attrs["__init__"] = Tracker(validate_arguments(attrs["__init__"]))
244252
tmp = super().__new__(mcs, name, bases, attrs)
245253
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({"sa_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+
"sa_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+
"sa_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)