diff --git a/mixpanel/__init__.py b/mixpanel/__init__.py index d93a1cb..93a74cf 100644 --- a/mixpanel/__init__.py +++ b/mixpanel/__init__.py @@ -62,9 +62,15 @@ class Mixpanel(object): The *serializer* parameter. """ - def __init__(self, token, consumer=None, serializer=DatetimeSerializer): + def __init__(self, token, consumer=None, serializer=DatetimeSerializer, sync_consumer=None): self._token = token self._consumer = consumer or Consumer() + + if hasattr(self._consumer, "flush"): + self._sync_consumer = sync_consumer or Consumer() + else: + self._sync_consumer = self._consumer + self._serializer = serializer def _now(self): @@ -185,8 +191,7 @@ def alias(self, alias_id, original, meta=None): if meta: event.update(meta) - sync_consumer = Consumer() - sync_consumer.send('events', json_dumps(event, cls=self._serializer)) + self._sync_consumer.send('events', json_dumps(event, cls=self._serializer)) def merge(self, api_key, distinct_id1, distinct_id2, meta=None, api_secret=None): """ diff --git a/test_mixpanel.py b/test_mixpanel.py old mode 100644 new mode 100755 index 0275eba..7d3ba36 --- a/test_mixpanel.py +++ b/test_mixpanel.py @@ -309,26 +309,16 @@ def test_people_meta(self): class TestMixpanelIdentity(TestMixpanelBase): - def test_alias(self): - # More complicated since alias() forces a synchronous call. - - with responses.RequestsMock() as rsps: - rsps.add( - responses.POST, - 'https://api.mixpanel.com/track', - json={"status": 1, "error": None}, - status=200, - ) - - self.mp.alias('ALIAS', 'ORIGINAL ID') - - assert self.consumer.log == [] - call = rsps.calls[0] - assert call.request.method == "POST" - assert call.request.url == "https://api.mixpanel.com/track" - posted_data = dict(urllib.parse.parse_qsl(six.ensure_str(call.request.body))) - assert json.loads(posted_data["data"]) == {"event":"$create_alias","properties":{"alias":"ALIAS","token":"12345","distinct_id":"ORIGINAL ID"}} + self.mp.alias('ALIAS', 'ORIGINAL ID') + + assert self.mp._consumer == self.mp._sync_consumer + assert self.consumer.log == [ + ('events', { + 'event': '$create_alias', + 'properties': {'distinct_id': 'ORIGINAL ID', 'alias': 'ALIAS', 'token': '12345'} + }) + ] def test_merge(self): self.mp.merge('my_good_api_key', 'd1', 'd2')