octowebsocket-client


Nameoctowebsocket-client JSON
Version 1.8.3 PyPI version JSON
download
home_pagehttps://github.com/OctoEverywhere/octowebsocket-client.git
SummaryWebSocket client for Python with low level API options for OctoEverywhere.com and Homeway.io
upload_time2024-09-11 04:26:15
maintainerquinndamerell
docs_urlNone
authorliris
requires_python>=3.7
licenseApache-2.0
keywords octoeverywhere homeway
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage
            [![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"
}
        
Elapsed time: 1.67914s