Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix for stack growth on reconnect (#854)
* rel example * tweaked rel example for linter * added rel note to examples.rst * slightly more compact example * added example header * matched wording * _socket.recv(): _recv() except socket.error - changed or to and; added except TimeoutError - raise WebSocketTimeoutException * _app - custom dispatcher check_callback() integration (and fixed pyevent compatibility): WrappedDispatcher (for use with generic event dispatchers such as pyevent and rel); create_dispatcher() accepts dispatcher kwarg (default None), and if it is specified, returns a WrappedDispatcher; use create_dispatcher() (passing specified dispatcher if any) every time (regardless of dispatcher specification) * Add clarifying comment, rerun CI tests * Add space to make linter happy * working reconnect * rmed logs * added _logging.warning() disconnected/reconnected notifications to handleDisconnect() * moved connect notification and dispatcher.read() (if doread kwarg [default False] is True) to setSock() (prevents those lines from running on ConnectionRefusedError) * run_forever(): reconnect kwarg now specifies sleep() time (defualt 5) * handleDisconnect(): fixed log msg * run_forever() refactor: stabilized stack frame count (at least in rel mode); added stack frame count to disconnect (warning) log; grossly oversimplified ;) * dispatcher simplification via DispatcherBase and DispatcherBase/WrappedDispatcher.timeout() * _logging: info(); enableTrace() supports level kwarg (default "DEBUG") * handleDisconnect() uses info() log * Fix linting errors * moved timeout() from Dispatcher to DispatcherBase (thus also applying to SSLDispatcher) * reconnect()s for DispatcherBase (uses while loop) and WrappedDispatcher (uses timeout()); setSock() reconnecting (default False) kwarg - if reconnecting, skip handleDisconnect(); handleDisconnect() calls dispatcher.reconnect() * custom_dispatcher switch in handleDisconnect() * WrappedDispatcher constructor registers keyboard interrupt signal * DispatcherBase.reconnect(): wrapped while loop in KeyboardInterrupt try/except * fixed lint errors * _app: RECONNECT (default 5) and setReconnect() setter; WebSocketApp.run_forever() reconnect kwarg defaults to RECONNECT * tests.test_app: ws.setReconnect(0) (may fix test stall issue) * oops, added setReconnect import to websocket __init__ * blank line for linter * linter line * added rel to setup extras_require{test}[] * adjusted testRunForeverDispatcher() to use rel (including dispatch()) * setup: moved rel dep from extras_require{test}[] to tests_require[] * meh trying install_requires[] (tests_require[] depped??) * set RECONNECT (run_forever() reconnect kwarg default) to 0 (can be altered with setReconnect()) to preserve old (non-reconnecting) default behavior for existing integrations * rmed rel from install_requires[] (only added for tests, and was not working...) * test_app: rmed ws.setReconnect(0) (0 is new default) * run_forever() reconnect->RECONNECT fallback in func instead of kwarg default * test_app: disabled rel import (unsure how to set up test dependency) and testRunForeverDispatcher() (also not working previously afaik) * linter fixes * linter comment spaces * run_forever() returns False to pass testRunForeverTeardownCleanExit test * run_forever() returns False unless error (handleDisconnect() changes to True before calling on_error callback) * rval->self.has_errored Co-authored-by: engn33r <engn33r@users.noreply.github.com>
- Loading branch information