[![docs](https://readthedocs.org/projects/websocket-client/badge/?style=flat)](https://websocket-client.readthedocs.io/)
[![Build Status](https://github.com/websocket-client/websocket-client/actions/workflows/build.yml/badge.svg)](https://github.com/websocket-client/websocket-client/actions/workflows/build.yml)
[![codecov](https://codecov.io/gh/websocket-client/websocket-client/branch/master/graph/badge.svg?token=pcXhUQwiL3)](https://codecov.io/gh/websocket-client/websocket-client)
[![PyPI Downloads](https://pepy.tech/badge/websocket-client)](https://pepy.tech/project/websocket-client)
[![PyPI version](https://img.shields.io/pypi/v/websocket_client)](https://pypi.org/project/websocket_client/)
[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
# OctoWebsocket-Client
This is a fork of `websocket-client` with a few very minor changes made for [OctoEverywhere.com](https://octoeverywhere.com) and [Homeway.io.](https://homeway.io)
The goal is to keep the changes as small as possible, and to stay up to date as much as possible.
Changes made:
- Added a flag on send to disable frame masking, which gives us a 30% CPU reduction on Pi4
- Kept support for PY 3.7, because we need it for the Sonic Pad
- Make a small change in send_frame to avoid a slice that's not needed.
- Enabled PYlint and disabled a few warnings that aren't important to fix
- We had to rename the root folder `octowebsocket` to avoid conflicts.
To Update:
- Git pull to a release version commit
- Rebase our octo branch on top of it.
- Search for the current version string and update all instances.
- Commit the changes, allow the GitHub Actions to run and turn green.
- Run:
- `python -m build`
- `twine check dist/*`
- `twine upload dist/*`
Source Repo: https://github.com/websocket-client/websocket-client
# websocket-client
websocket-client is a WebSocket client for Python. It provides access
to low level APIs for WebSockets. websocket-client implements version
[hybi-13](https://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-13)
of the WebSocket protocol. This client does not currently support the
permessage-deflate extension from
[RFC 7692](https://tools.ietf.org/html/rfc7692).
## Documentation
This project's documentation can be found at
[https://websocket-client.readthedocs.io/](https://websocket-client.readthedocs.io/)
## Contributing
Please see the [contribution guidelines](https://github.com/websocket-client/websocket-client/blob/master/CONTRIBUTING.md)
## Installation
You can use `pip install websocket-client` to install, or `pip install -e .`
to install from a local copy of the code. This module is tested on Python 3.8+.
There are several optional dependencies that can be installed to enable
specific websocket-client features.
- To install `python-socks` for proxy usage and `wsaccel` for a minor performance boost, use:
`pip install websocket-client[optional]`
- To install `websockets` to run unit tests using the local echo server, use:
`pip install websocket-client[test]`
- To install `Sphinx` and `sphinx_rtd_theme` to build project documentation, use:
`pip install websocket-client[docs]`
While not a strict dependency, [rel](https://github.com/bubbleboy14/registeredeventlistener)
is useful when using `run_forever` with automatic reconnect. Install rel with `pip install rel`.
Footnote: Some shells, such as zsh, require you to escape the `[` and `]` characters with a `\`.
## Usage Tips
Check out the documentation's FAQ for additional guidelines:
[https://websocket-client.readthedocs.io/en/latest/faq.html](https://websocket-client.readthedocs.io/en/latest/faq.html)
Known issues with this library include lack of WebSocket Compression
support (RFC 7692) and [minimal threading documentation/support](https://websocket-client.readthedocs.io/en/latest/threading.html).
## Performance
The `send` and `validate_utf8` methods can sometimes be bottleneck.
You can disable UTF8 validation in this library (and receive a
performance enhancement) with the `skip_utf8_validation` parameter.
If you want to get better performance, install wsaccel. While
websocket-client does not depend on wsaccel, it will be used if
available. wsaccel doubles the speed of UTF8 validation and
offers a very minor 10% performance boost when masking the
payload data as part of the `send` process. Numpy used to
be a suggested performance enhancement alternative, but
[issue #687](https://github.com/websocket-client/websocket-client/issues/687)
found it didn't help.
## Examples
Many more examples are found in the
[examples documentation](https://websocket-client.readthedocs.io/en/latest/examples.html).
### Long-lived Connection
Most real-world WebSockets situations involve longer-lived connections.
The WebSocketApp `run_forever` loop will automatically try to reconnect
to an open WebSocket connection when a network
connection is lost if it is provided with:
- a `dispatcher` argument (async dispatcher like rel or pyevent)
- a non-zero `reconnect` argument (delay between disconnection and attempted reconnection)
`run_forever` provides a variety of event-based connection controls
using callbacks like `on_message` and `on_error`.
`run_forever` **does not automatically reconnect** if the server
closes the WebSocket gracefully (returning
[a standard websocket close code](https://www.rfc-editor.org/rfc/rfc6455.html#section-7.4.1)).
[This is the logic](https://github.com/websocket-client/websocket-client/pull/838#issuecomment-1228454826) behind the decision.
Customizing behavior when the server closes
the WebSocket should be handled in the `on_close` callback.
This example uses [rel](https://github.com/bubbleboy14/registeredeventlistener)
for the dispatcher to provide automatic reconnection.
```python
import websocket
import _thread
import time
import rel
def on_message(ws, message):
print(message)
def on_error(ws, error):
print(error)
def on_close(ws, close_status_code, close_msg):
print("### closed ###")
def on_open(ws):
print("Opened connection")
if __name__ == "__main__":
websocket.enableTrace(True)
ws = websocket.WebSocketApp("wss://api.gemini.com/v1/marketdata/BTCUSD",
on_open=on_open,
on_message=on_message,
on_error=on_error,
on_close=on_close)
ws.run_forever(dispatcher=rel, reconnect=5) # Set dispatcher to automatic reconnection, 5 second reconnect delay if connection closed unexpectedly
rel.signal(2, rel.abort) # Keyboard Interrupt
rel.dispatch()
```
### Short-lived Connection
This is if you want to communicate a short message and disconnect
immediately when done. For example, if you want to confirm that a WebSocket
server is running and responds properly to a specific request.
```python
from websocket import create_connection
ws = create_connection("ws://echo.websocket.events/")
print(ws.recv())
print("Sending 'Hello, World'...")
ws.send("Hello, World")
print("Sent")
print("Receiving...")
result = ws.recv()
print("Received '%s'" % result)
ws.close()
```
Raw data
{
"_id": null,
"home_page": "https://github.com/OctoEverywhere/octowebsocket-client.git",
"name": "octowebsocket-client",
"maintainer": "quinndamerell",
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": "support@octoeverywhere.com",
"keywords": "octoeverywhere homeway",
"author": "liris",
"author_email": "liris.pp@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/f4/84/f19a9b0d60780ee68722ab3584dc3b6f3e4cb90695ad517bda854f1ba1d2/octowebsocket_client-1.8.3.tar.gz",
"platform": null,
"description": "[![docs](https://readthedocs.org/projects/websocket-client/badge/?style=flat)](https://websocket-client.readthedocs.io/)\r\n[![Build Status](https://github.com/websocket-client/websocket-client/actions/workflows/build.yml/badge.svg)](https://github.com/websocket-client/websocket-client/actions/workflows/build.yml)\r\n[![codecov](https://codecov.io/gh/websocket-client/websocket-client/branch/master/graph/badge.svg?token=pcXhUQwiL3)](https://codecov.io/gh/websocket-client/websocket-client)\r\n[![PyPI Downloads](https://pepy.tech/badge/websocket-client)](https://pepy.tech/project/websocket-client)\r\n[![PyPI version](https://img.shields.io/pypi/v/websocket_client)](https://pypi.org/project/websocket_client/)\r\n[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\r\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\r\n\r\n\r\n# OctoWebsocket-Client\r\n\r\nThis is a fork of `websocket-client` with a few very minor changes made for [OctoEverywhere.com](https://octoeverywhere.com) and [Homeway.io.](https://homeway.io)\r\n\r\nThe goal is to keep the changes as small as possible, and to stay up to date as much as possible.\r\n\r\nChanges made:\r\n - Added a flag on send to disable frame masking, which gives us a 30% CPU reduction on Pi4\r\n - Kept support for PY 3.7, because we need it for the Sonic Pad\r\n - Make a small change in send_frame to avoid a slice that's not needed.\r\n - Enabled PYlint and disabled a few warnings that aren't important to fix\r\n - We had to rename the root folder `octowebsocket` to avoid conflicts.\r\n\r\n\r\nTo Update:\r\n - Git pull to a release version commit\r\n - Rebase our octo branch on top of it.\r\n - Search for the current version string and update all instances.\r\n - Commit the changes, allow the GitHub Actions to run and turn green.\r\n - Run:\r\n - `python -m build`\r\n - `twine check dist/*`\r\n - `twine upload dist/*`\r\n\r\nSource Repo: https://github.com/websocket-client/websocket-client\r\n\r\n# websocket-client\r\n\r\nwebsocket-client is a WebSocket client for Python. It provides access\r\nto low level APIs for WebSockets. websocket-client implements version\r\n[hybi-13](https://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-13)\r\nof the WebSocket protocol. This client does not currently support the\r\npermessage-deflate extension from\r\n[RFC 7692](https://tools.ietf.org/html/rfc7692).\r\n\r\n## Documentation\r\n\r\nThis project's documentation can be found at\r\n[https://websocket-client.readthedocs.io/](https://websocket-client.readthedocs.io/)\r\n\r\n## Contributing\r\n\r\nPlease see the [contribution guidelines](https://github.com/websocket-client/websocket-client/blob/master/CONTRIBUTING.md)\r\n\r\n## Installation\r\n\r\nYou can use `pip install websocket-client` to install, or `pip install -e .`\r\nto install from a local copy of the code. This module is tested on Python 3.8+.\r\n\r\nThere are several optional dependencies that can be installed to enable\r\nspecific websocket-client features.\r\n- To install `python-socks` for proxy usage and `wsaccel` for a minor performance boost, use:\r\n `pip install websocket-client[optional]`\r\n- To install `websockets` to run unit tests using the local echo server, use:\r\n `pip install websocket-client[test]`\r\n- To install `Sphinx` and `sphinx_rtd_theme` to build project documentation, use:\r\n `pip install websocket-client[docs]`\r\n\r\nWhile not a strict dependency, [rel](https://github.com/bubbleboy14/registeredeventlistener)\r\nis useful when using `run_forever` with automatic reconnect. Install rel with `pip install rel`.\r\n\r\nFootnote: Some shells, such as zsh, require you to escape the `[` and `]` characters with a `\\`.\r\n\r\n## Usage Tips\r\n\r\nCheck out the documentation's FAQ for additional guidelines:\r\n[https://websocket-client.readthedocs.io/en/latest/faq.html](https://websocket-client.readthedocs.io/en/latest/faq.html)\r\n\r\nKnown issues with this library include lack of WebSocket Compression\r\nsupport (RFC 7692) and [minimal threading documentation/support](https://websocket-client.readthedocs.io/en/latest/threading.html).\r\n\r\n## Performance\r\n\r\nThe `send` and `validate_utf8` methods can sometimes be bottleneck.\r\nYou can disable UTF8 validation in this library (and receive a\r\nperformance enhancement) with the `skip_utf8_validation` parameter.\r\nIf you want to get better performance, install wsaccel. While\r\nwebsocket-client does not depend on wsaccel, it will be used if\r\navailable. wsaccel doubles the speed of UTF8 validation and\r\noffers a very minor 10% performance boost when masking the\r\npayload data as part of the `send` process. Numpy used to\r\nbe a suggested performance enhancement alternative, but\r\n[issue #687](https://github.com/websocket-client/websocket-client/issues/687)\r\nfound it didn't help.\r\n\r\n## Examples\r\n\r\nMany more examples are found in the\r\n[examples documentation](https://websocket-client.readthedocs.io/en/latest/examples.html).\r\n\r\n### Long-lived Connection\r\n\r\nMost real-world WebSockets situations involve longer-lived connections.\r\nThe WebSocketApp `run_forever` loop will automatically try to reconnect\r\nto an open WebSocket connection when a network\r\nconnection is lost if it is provided with:\r\n\r\n- a `dispatcher` argument (async dispatcher like rel or pyevent)\r\n- a non-zero `reconnect` argument (delay between disconnection and attempted reconnection)\r\n\r\n`run_forever` provides a variety of event-based connection controls\r\nusing callbacks like `on_message` and `on_error`.\r\n`run_forever` **does not automatically reconnect** if the server\r\ncloses the WebSocket gracefully (returning\r\n[a standard websocket close code](https://www.rfc-editor.org/rfc/rfc6455.html#section-7.4.1)).\r\n[This is the logic](https://github.com/websocket-client/websocket-client/pull/838#issuecomment-1228454826) behind the decision.\r\nCustomizing behavior when the server closes\r\nthe WebSocket should be handled in the `on_close` callback.\r\nThis example uses [rel](https://github.com/bubbleboy14/registeredeventlistener)\r\nfor the dispatcher to provide automatic reconnection.\r\n\r\n```python\r\nimport websocket\r\nimport _thread\r\nimport time\r\nimport rel\r\n\r\ndef on_message(ws, message):\r\n print(message)\r\n\r\ndef on_error(ws, error):\r\n print(error)\r\n\r\ndef on_close(ws, close_status_code, close_msg):\r\n print(\"### closed ###\")\r\n\r\ndef on_open(ws):\r\n print(\"Opened connection\")\r\n\r\nif __name__ == \"__main__\":\r\n websocket.enableTrace(True)\r\n ws = websocket.WebSocketApp(\"wss://api.gemini.com/v1/marketdata/BTCUSD\",\r\n on_open=on_open,\r\n on_message=on_message,\r\n on_error=on_error,\r\n on_close=on_close)\r\n\r\n ws.run_forever(dispatcher=rel, reconnect=5) # Set dispatcher to automatic reconnection, 5 second reconnect delay if connection closed unexpectedly\r\n rel.signal(2, rel.abort) # Keyboard Interrupt\r\n rel.dispatch()\r\n```\r\n\r\n### Short-lived Connection\r\n\r\nThis is if you want to communicate a short message and disconnect\r\nimmediately when done. For example, if you want to confirm that a WebSocket\r\nserver is running and responds properly to a specific request.\r\n\r\n```python\r\nfrom websocket import create_connection\r\n\r\nws = create_connection(\"ws://echo.websocket.events/\")\r\nprint(ws.recv())\r\nprint(\"Sending 'Hello, World'...\")\r\nws.send(\"Hello, World\")\r\nprint(\"Sent\")\r\nprint(\"Receiving...\")\r\nresult = ws.recv()\r\nprint(\"Received '%s'\" % result)\r\nws.close()\r\n```\r\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "WebSocket client for Python with low level API options for OctoEverywhere.com and Homeway.io",
"version": "1.8.3",
"project_urls": {
"Documentation": "https://websocket-client.readthedocs.io/",
"Download": "https://github.com/OctoEverywhere/octowebsocket-client/releases",
"Homepage": "https://github.com/OctoEverywhere/octowebsocket-client.git",
"Source": "https://github.com/OctoEverywhere/octowebsocket-client"
},
"split_keywords": [
"octoeverywhere",
"homeway"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "8dde2939cd9f5a868907377818730a2f59c447334b1cf7dfb7cc1e94b428f99c",
"md5": "530f66368fb46dc0bea5497611c91771",
"sha256": "890fd21c3081435b8e231c540856445194b7a3999b1ae65624bf2c9fe0f4611d"
},
"downloads": -1,
"filename": "octowebsocket_client-1.8.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "530f66368fb46dc0bea5497611c91771",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 60681,
"upload_time": "2024-09-11T04:26:13",
"upload_time_iso_8601": "2024-09-11T04:26:13.854128Z",
"url": "https://files.pythonhosted.org/packages/8d/de/2939cd9f5a868907377818730a2f59c447334b1cf7dfb7cc1e94b428f99c/octowebsocket_client-1.8.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f484f19a9b0d60780ee68722ab3584dc3b6f3e4cb90695ad517bda854f1ba1d2",
"md5": "0e7a0725140d48c242480e016ad0ccd1",
"sha256": "de85b6e4c835b66fcdec3f6a8c723bfba1378d1e9b216a988eacaf0f2a8fd230"
},
"downloads": -1,
"filename": "octowebsocket_client-1.8.3.tar.gz",
"has_sig": false,
"md5_digest": "0e7a0725140d48c242480e016ad0ccd1",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 56967,
"upload_time": "2024-09-11T04:26:15",
"upload_time_iso_8601": "2024-09-11T04:26:15.332909Z",
"url": "https://files.pythonhosted.org/packages/f4/84/f19a9b0d60780ee68722ab3584dc3b6f3e4cb90695ad517bda854f1ba1d2/octowebsocket_client-1.8.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-09-11 04:26:15",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "OctoEverywhere",
"github_project": "octowebsocket-client",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"lcname": "octowebsocket-client"
}