- It is now possible to call EventualResult.wait() (or functions wrapped in wait_for) at import time if another thread holds the import lock. Thanks to Ken Struys for the patch.
- crochet.wait_for implements the timeout/cancellation pattern documented in previous versions of Crochet. crochet.wait_for_reactor and EventualResult.wait(timeout=None) are now deprecated, since lacking timeouts they could potentially block forever.
- Functions wrapped with wait_for and run_in_reactor can now be accessed via the wrapped_function attribute, to ease unit testing of the underlying Twisted code.
- It is no longer possible to call EventualResult.wait() (or functions wrapped with wait_for) at import time, since this can lead to deadlocks or prevent other threads from importing. Thanks to Tom Prince for the bug report.
- warnings are no longer erroneously turned into Twisted log messages.
- The reactor is now only imported when crochet.setup() or crochet.no_setup() are called, allowing daemonization if only crochet is imported (http://tm.tl/7105). Thanks to Daniel Nephin for the bug report.
- Improved motivation, added contact info and news to the documentation.
- Better example of using Crochet from a normal Twisted application.
- EventualResult.wait() can now be used safely from multiple threads, thanks to Gavin Panella for reporting the bug.
- Fixed reentrancy deadlock in the logging code caused by http://bugs.python.org/issue14976, thanks to Rod Morehead for reporting the bug.
- Crochet now installs on Python 3.3 again, thanks to Ben Cordero.
- Crochet should now work on Windows, thanks to Konstantinos Koukopoulos.
- Crochet tests can now run without adding its absolute path to PYTHONPATH or installing it first.
- EventualResult.original_failure is now documented.
- Added section on use cases and alternatives. Thanks to Tobias Oberstein for the suggestion.
- Twisted does not have to be pre-installed to run setup.py, thanks to Paul Weaver for bug report and Chris Scutcher for patch.
- Importing Crochet does not have side-effects (installing reactor event) any more.
- Blocking calls are interrupted earlier in the shutdown process, to reduce scope for deadlocks. Thanks to rmorehead for bug report.
- Expanded and much improved documentation, including a new section with design suggestions.
- New decorator @wait_for_reactor added, a simpler alternative to @run_in_reactor.
- Refactored @run_in_reactor, making it a bit more responsive.
- Blocking operations which would otherwise never finish due to reactor having stopped (EventualResult.wait() or @wait_for_reactor decorated call) will be interrupted with a ReactorStopped exception. Thanks to rmorehead for the bug report.
- @run_in_reactor decorated functions (or rather, their generated wrapper) are interrupted by Ctrl-C.
- On POSIX platforms, a workaround is installed to ensure processes started by reactor.spawnProcess have their exit noticed. See Twisted ticket 6378 for more details about the underlying issue.
- EventualResult.wait() now raises error if called in the reactor thread, thanks to David Buchmann.
- Unittests are now included in the release tarball.
- Allow Ctrl-C to interrupt EventualResult.wait(timeout=None).
- Improved documentation.
- Renamed DeferredResult to EventualResult, to reduce confusion with Twisted’s Deferred class. The old name still works, but is deprecated.
- Deprecated @in_reactor, replaced with @run_in_reactor which doesn’t change the arguments to the wrapped function. The deprecated API still works, however.
- Unhandled exceptions in EventualResult objects are logged.
- Added more examples.
- setup.py sdist should work now.
- Initial release.