Whirlwind¶
A wrapper around the tornado web server.
Changlog¶
- 0.12.0 - 14 April 2021
- Add a new
make_applicationhook to the Server for changing the WSGI app - Made it easier to alter what gets logged
- Add a new
- 0.11.0 - 26 March 2021
- Added
server_end_futureto the Server object - Added
announce_startandmake_http_serverhooks to Server - The http server and routes we make is now put onto the server object in
serve - The default error catcher will return a “RequestCancelled” error if the
request raises
asyncio.CancelledError
- Added
- 0.10.1 - 8 January 2021
- Removed the wait_for_futures helper. It’s not a great implementation.
- The server now uses
await self.wait_for_end()to wait till we should shut down the server. By default this doesawait self.final_futurelike it already was doing.
- 0.10.0 - 25 October 2020
- Removed whirlwind.test_helpers
- It was random and didn’t work well in an async context
- Used asynctest which has warnings past python3.7 and isn’t necessary anymore
- Removed whirlwind.test_helpers
- 0.9.0 - 10 May 2020
- The SimpleWebSocketBase and WSHandler handlers now take in a
final_futurewhich is used to stop the websocket stream when it is cancelled. - Websocket streams that take in child messages will now use the request future on the websocket to know when to stop.
- The SimpleWebSocketBase and WSHandler handlers now take in a
- 0.8.0 - 12 March 2020
- The status of a response when there is an exception will now look at:
- If the msg is a dictionary, it’ll get “status” from that dictionary if it has that
- If the exception has a “status” property, the status will be that value
- Otherwise the status will be 500
- The status of a response when there is an exception will now look at:
- 0.7.2 - 6 March 2020
- Fix a small mistake that meant http handlers weren’t logging even if
log_exceptions=Falsewasn’t specified.
- Fix a small mistake that meant http handlers weren’t logging even if
- 0.7.1 - 6 March 2020
- Made it possible to accept files into a commander command. You can do this
by sending a
multipart/form-datato the endpoint. The body of the command will be extracted from a__body__file you provide. - HTTP and WebSocket handlers can now be told not to log exceptions by giving
them a class level
log_exceptions = Falseattribute.
- Made it possible to accept files into a commander command. You can do this
by sending a
- 0.7 - 3 February 2020
- Made transform_progress responsible for name spacing the progress messages
- Store commands can now be interactive. If you define the execute method as
taking in
messages, then you can process extra messages sent to that command. You then define what messages it accepts by using thestore.commanddecorator with theparentoption as the interactive command. - Reusing a command with a different path is now an error
- 0.6 - 18 September 2019
- Migrated to delfick_project
- 0.5.3 - Dec 26 2018
- WSHandler now has a connection_future that is cancelled if we lose the connection
- 0.5.2 - Oct 25 2018
- Added a message_done hook to SimpleWebSocketBase
- Fixed the test helpers so that you aren’t left with no set asyncio loop
- 0.5.1 - Oct 24 2018
- Made the
__server_time__message for SimpleWebSocketBase optional. - Made sure to actually use the reprer set on request handlers
- ProgressMessageMaker doesn’t nest dictionaries it receives
- Added a transform_progress hook to SimpleWebSocketBase
- Made the
- 0.5 - Oct 22 2018
- Initial Release
Installation¶
This package is released to pypi under the name whirlwind-web. When you add
this package to your setup.py it is recommended you either specify [peer] as
well or pin input_algorithms, option_merge and tornado to particular
versions. See https://github.com/delfick/whirlwind/blob/main/setup.py#L24-L28
for the recommended versions.
For example:
from setuptools import setup, find_packages
setup(
name = "test"
, version = "0.1"
, include_package_data = True
, install_requires =
[ "whirlwind-web[peer]"
, "whirlwind-web==0.5.2"
]
)
Running the tests¶
To run the tests, create and activate a virtualenv somewhere and then:
$ pip install -e ".[peer,tests]"
$ pip install -e .
followed by ./test.sh
Alternatively:
$ pip install tox
$ tox
Usage¶
See https://whirlwind.readthedocs.io/en/latest/ for usage documentation.