Skip to content

Commit 05fde2a

Browse files
authored
Merge pull request #18 from PostHog/better-errors
Add project_api_key, improve errors
2 parents 2be04f3 + 7ee3002 commit 05fde2a

File tree

2 files changed

+23
-30
lines changed

2 files changed

+23
-30
lines changed

posthog/client.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,15 @@ class Client(object):
3232
def __init__(self, api_key=None, host=None, debug=False,
3333
max_queue_size=10000, send=True, on_error=None, flush_at=100,
3434
flush_interval=0.5, gzip=False, max_retries=3,
35-
sync_mode=False, timeout=15, thread=1, poll_interval=30, personal_api_key=None):
36-
require('api_key', api_key, string_types)
35+
sync_mode=False, timeout=15, thread=1, poll_interval=30, personal_api_key=None, project_api_key=None):
3736

3837
self.queue = queue.Queue(max_queue_size)
3938

4039
# api_key: This should be the Team API Key (token), public
41-
self.api_key = api_key
40+
self.api_key = api_key or project_api_key
41+
42+
require('api_key', self.api_key, string_types)
43+
4244
self.on_error = on_error
4345
self.debug = debug
4446
self.send = send
@@ -238,6 +240,11 @@ def _load_feature_flags(self):
238240
'To use feature flags, please set a personal_api_key ' \
239241
'More information: https://posthog.com/docs/api/overview'
240242
)
243+
else:
244+
raise APIError(
245+
status=e.status,
246+
message=e.message
247+
)
241248
except Exception as e:
242249
self.log.warning('[FEATURE FLAGS] Fetching feature flags failed with following error. We will retry in %s seconds.' % self.poll_interval)
243250
self.log.warning(e)

posthog/request.py

Lines changed: 13 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -46,57 +46,43 @@ def post(api_key, host=None, path=None, gzip=False, timeout=15, **kwargs):
4646
return res
4747

4848

49-
def decide(api_key, host=None, gzip=False, timeout=15, **kwargs):
50-
"""Post the `kwargs to the decide API endpoint"""
49+
def _process_response(res, success_message, return_json=True):
5150
log = logging.getLogger('posthog')
52-
res = post(api_key, host, '/decide/', gzip, timeout, **kwargs)
51+
if not res:
52+
raise APIError('N/A', 'Error when fetching PostHog API, please make sure you are using your public project token/key and not a private API key.')
5353
if res.status_code == 200:
54-
log.debug('Feature flags decided successfully')
55-
return res.json()
54+
log.debug(success_message)
55+
return res.json() if return_json else res
5656
try:
5757
payload = res.json()
5858
log.debug('received response: %s', payload)
5959
raise APIError(res.status_code, payload['detail'])
6060
except ValueError:
6161
raise APIError(res.status_code, res.text)
6262

63+
def decide(api_key, host=None, gzip=False, timeout=15, **kwargs):
64+
"""Post the `kwargs to the decide API endpoint"""
65+
res = post(api_key, host, '/decide/', gzip, timeout, **kwargs)
66+
return _process_response(res, success_message='Feature flags decided successfully')
67+
6368

6469
def batch_post(api_key, host=None, gzip=False, timeout=15, **kwargs):
6570
"""Post the `kwargs` to the batch API endpoint for events"""
66-
log = logging.getLogger('posthog')
6771
res = post(api_key, host, '/batch/', gzip, timeout, **kwargs)
68-
69-
if res.status_code == 200:
70-
log.debug('data uploaded successfully')
71-
return res
72-
try:
73-
payload = res.json()
74-
log.debug('received response: %s', payload)
75-
raise APIError(res.status_code, payload['detail'])
76-
except ValueError:
77-
raise APIError(res.status_code, res.text)
72+
return _process_response(res, success_message='data uploaded successfully', return_json=False)
7873

7974

8075
def get(api_key, url, host=None, timeout=None):
81-
log = logging.getLogger('posthog')
8276
url = remove_trailing_slash(host or DEFAULT_HOST) + url
83-
response = requests.get(
77+
res = requests.get(
8478
url,
8579
headers={
8680
'Authorization': 'Bearer %s' % api_key,
8781
'User-Agent': USER_AGENT
8882
},
8983
timeout=timeout
9084
)
91-
if response.status_code == 200:
92-
return response.json()
93-
try:
94-
payload = response.json()
95-
log.debug('received response: %s', payload)
96-
raise APIError(response.status_code, payload['detail'])
97-
except ValueError:
98-
raise APIError(response.status_code, response.text)
99-
85+
return _process_response(res, success_message=f'GET {url} completed successfully')
10086

10187
class APIError(Exception):
10288

0 commit comments

Comments
 (0)