Open ramnes opened 2 years ago
Hello @ramnes - no, I haven't spent any time thinking about that. It sounds useful as an alternative backend, and if you end up with ideas about how this might look, I'd be happy to work with you on it. As it stands, the test suite for this project is heavily tied to requests
which I understand would not be used under an async variant of this library/class. I do have plans to open the design up a bit in the next major version to allow more flexibility - perhaps an async mode could influence that a bit.
Yep, I've seen that you switched to requests recently. That's a missed opportunity because supporting async definitely means using another library. Ideally you want to use a single library for both the sync and async HTTP requests, like encode/httpx.
The codebase here is quite small and I've written multiple sync/async HTTP clients already (most notably notion-sdk-py); I could probably tackle this myself someday if you're interested in such a PR. Are you?
@ramnes Let's come back to this once we've nixed Py2 support. Next major vers., which is cooking slowly.
What's the roadmap exactly? I could bring Python 3 idiomatic features as well if you wish. Is there anything in particular that you want to achieve before?
Hello. I will support this issue. i want to see async support for this library. I have been using it for many years and in connection with the transfer of projects to the asynchronous stack it would be very appreciated
I've forked the repo and re-implemented it with aiohttp
https://github.com/Kylmakalle/mixpanel-python-asyncio. Available for Python 3.7+.
I've rewritten the tests to asyncio
as well, so It should be safe enough to install.
Install
pip install https://github.com/Kylmakalle/mixpanel-python-asyncio/archive/1.0.0.zip
Code
from mixpanel_asyncio import Mixpanel
mp = Mixpanel(YOUR_TOKEN)
# tracks an event with certain properties
await mp.track(DISTINCT_ID, 'button clicked', {'color' : 'blue', 'size': 'large'})
# sends an update to a user profile
await mp.people_set(DISTINCT_ID, {'$first_name' : 'Ilya', 'favorite pizza': 'margherita'})
I believe this is an important improvement. Since requests
is sync, it blocks the event loop while waiting for a response.
This can impact frameworks such as FastAPI (or other asyncio based http frameworks). Blocking the event loop would make it so that the worker might not be able to process a request.
Hey there, thanks for the neat library.
Do you have any plan to support native async features of Python?
e.g.: