|
| 1 | +from track.utils import require, stringify |
| 2 | +from track.request import post |
| 3 | +from track.const import ApiPaths |
| 4 | +import logging |
| 5 | +import numbers |
| 6 | +ID_TYPES = (numbers.Number, str) |
| 7 | + |
| 8 | + |
| 9 | +class Client(object): |
| 10 | + logger = logging.getLogger('interakt') |
| 11 | + |
| 12 | + def __init__(self, write_key=None, host=None, debug=False, sync_mode=True, timeout=10): |
| 13 | + """Create a new interakt client""" |
| 14 | + require('write_key', write_key, str) |
| 15 | + self.write_key = write_key |
| 16 | + self.debug = debug |
| 17 | + self.host = host |
| 18 | + self.sync_mode = sync_mode |
| 19 | + self.timeout = timeout |
| 20 | + if debug: |
| 21 | + self.logger.setLevel(logging.DEBUG) |
| 22 | + |
| 23 | + def identify(self, user_id=None, country_code='+91', phone_number=None, traits={}): |
| 24 | + """Tie a user to their actions and record traits about them.""" |
| 25 | + if not user_id and not phone_number: |
| 26 | + raise AssertionError("Either user_id or phone_number is required") |
| 27 | + if user_id: |
| 28 | + require('user_id', user_id, ID_TYPES) |
| 29 | + if phone_number: |
| 30 | + require('phone_number', phone_number, str) |
| 31 | + require('traits', traits, dict) |
| 32 | + msg = { |
| 33 | + 'userId': stringify(val=user_id), |
| 34 | + 'countryCode': country_code, |
| 35 | + 'phoneNumber': phone_number, |
| 36 | + 'traits': traits |
| 37 | + } |
| 38 | + return self.__send_request(path=ApiPaths.Identify.value, msg=msg) |
| 39 | + |
| 40 | + def event(self, user_id=None, event=None, traits={}): |
| 41 | + """To record user events""" |
| 42 | + traits = traits or {} |
| 43 | + require('user_id', user_id, ID_TYPES) |
| 44 | + require('traits', traits, dict) |
| 45 | + require('event', event, str) |
| 46 | + msg = { |
| 47 | + 'userId': stringify(val=user_id), |
| 48 | + 'event': event, |
| 49 | + 'traits': traits |
| 50 | + } |
| 51 | + return self.__send_request(path=ApiPaths.Event.value, msg=msg) |
| 52 | + |
| 53 | + def __send_request(self, path, msg): |
| 54 | + return post(self.write_key, host=self.host, path=path, body=msg, timeout=self.timeout) |
0 commit comments