mixpanel / mixpanel-python

Official Mixpanel Python library.
https://mixpanel.com/help/reference/python
Other
104 stars 85 forks source link

`import_data` does not work with Service Accounts due to missing `project_id` #110

Open beheh opened 2 years ago

beheh commented 2 years ago

While testing out service accounts, I kept getting Unauthorized, invalid project secret. See docs for more information: https://developer.mixpanel.com/reference/authentication#project-secret raised from the SDK

I ended up tracing this to the SDK never sending the project_id GET paramter to the import. This paramter is marked as required in the documentation.

Trying the following curl command:

curl --request POST \
  --url 'https://api.mixpanel.com/import?strict=1' \
  --header 'Accept: application/json' \
  --header 'Authorization: Basic <omitted>' \
  --header 'Content-Type: application/json' \
  --data '[{"event":"test"}]'

vs.

curl --request POST \
  --url 'https://api.mixpanel.com/import?strict=1&project_id=<omitted>' \
  --header 'Accept: application/json' \
  --header 'Authorization: Basic <omitted>' \
  --header 'Content-Type: application/json' \
  --data '[{"event":"test"}]'

...with credentials and with/without a project_id confirms the problem.

beheh commented 2 years ago

In fact: service accounts seem unsupported entirely by this SDK. For example, it does not appear possible to supply a api_secret=<service_account>:<secret> to this SDK, due to the project_id omission and the fact that an additional colon is appended to that string as part of the HTTP Basic auth assembly.

jaredmixpanel commented 2 years ago

@beheh that is correct, this SDK does not currently support Service Accounts. You can use Service Accounts to import data with our Python utilities library, though: https://github.com/mixpanel/mixpanel-utils