sphinx-autobuild
sphinx-autobuild copied to clipboard
Fix hot reloading for Python 3.9
Fixes #178
1. Move asyncio.Event creation to lifespan
This PR moves the creation of the asyncio.Event from RebuildServer.__init__ to RebuildServer.lifespan. This ensures asyncio.Event is created within the event loop context, resolving the relevant error.
[!NOTE] The error does not occur in Python>=3.10 because the implementation was changed by python/cpython#86558.
2. Add rebuild test
Since there was no rebuild test, I added one.
- Added a rebuild test.
- Added a test to check
refreshmessages from/websocket-reloadafter modifying theindex.rstfile.
- Added a test to check
- Changed the target test function to an asynchronous function.
- Starlette's
TestClientuses threads, whileRebuildServeruses multiprocessing. In my view, this affected the rebuild test execution and cause it to fail. (0662fc9) - Changed Starlette's
TestClienttohttp.AsyncClient. (ref) - Added test dependencies
asgi-lifespanandhttpx-wsrequired for testing lifespan and WebSocket.
- Starlette's
@AA-Turner @hugovk requesting a review.
I'm not a maintainer here, but Python 3.9 is only receiving security updates and is EOL in October:
https://devguide.python.org/versions/
And Sphinx itself supports 3.11+:
https://www.sphinx-doc.org/en/master/internals/release-process.html#python-version-support-policy
Can you upgrade to a newer Python?
Thank you for your comment.
sphinx-autobuild itself requires Python >= 3.9, and many library projects have this requirement. Therefore, it still has value for at least half a year. I am not particularly attached to Python 3.9, but I believe the changes in the implementation are reasonable. Additionally, I have added tests for hot reload, which may also be valuable for this project.
I would appreciate it if a maintainer could review the changes.
Thank you for your comment.
sphinx-autobuilditself requires Python >= 3.9, and many library projects have this requirement. Therefore, it still has value for at least half a year. I am not particularly attached to Python 3.9, but I believe the changes in the implementation are reasonable.
Because Sphinx is an application for generating docs, and not a library dependency, projects can build docs with a single (recent) Python version, even if they support the full 3.9-3.13 range.
I've opened https://github.com/sphinx-doc/sphinx-autobuild/pull/189 as an alternative to match the same versions as Sphinx itself, in case the maintainers wish to keep parity.
Additionally, I have added tests for hot reload, which may also be valuable for this project.
Yes, these sound useful.