mirror of
https://github.com/pkkid/python-plexapi
synced 2024-11-21 19:23:05 +00:00
feat(alert): add option to use custom socket (#1219)
This commit is contained in:
parent
b783a56edc
commit
103bc6f8ef
3 changed files with 19 additions and 9 deletions
|
@ -32,6 +32,12 @@ Installation & Documentation
|
||||||
|
|
||||||
pip install plexapi
|
pip install plexapi
|
||||||
|
|
||||||
|
*Install extra features:*
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
pip install plexapi[alert] # Install with dependencies required for plexapi.alert
|
||||||
|
|
||||||
Documentation_ can be found at Read the Docs.
|
Documentation_ can be found at Read the Docs.
|
||||||
|
|
||||||
.. _Documentation: http://python-plexapi.readthedocs.io/en/latest/
|
.. _Documentation: http://python-plexapi.readthedocs.io/en/latest/
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import json
|
import json
|
||||||
|
import socket
|
||||||
|
from typing import Callable
|
||||||
import threading
|
import threading
|
||||||
|
|
||||||
from plexapi import log
|
from plexapi import log
|
||||||
|
@ -32,15 +34,17 @@ class AlertListener(threading.Thread):
|
||||||
callbackError (func): Callback function to call on errors. The callback function
|
callbackError (func): Callback function to call on errors. The callback function
|
||||||
will be sent a single argument 'error' which will contain the Error object.
|
will be sent a single argument 'error' which will contain the Error object.
|
||||||
:samp:`def my_callback(error): ...`
|
:samp:`def my_callback(error): ...`
|
||||||
|
ws_socket (socket): Socket to use for the connection. If not specified, a new socket will be created.
|
||||||
"""
|
"""
|
||||||
key = '/:/websockets/notifications'
|
key = '/:/websockets/notifications'
|
||||||
|
|
||||||
def __init__(self, server, callback=None, callbackError=None):
|
def __init__(self, server, callback: Callable = None, callbackError: Callable = None, ws_socket: socket = None):
|
||||||
super(AlertListener, self).__init__()
|
super(AlertListener, self).__init__()
|
||||||
self.daemon = True
|
self.daemon = True
|
||||||
self._server = server
|
self._server = server
|
||||||
self._callback = callback
|
self._callback = callback
|
||||||
self._callbackError = callbackError
|
self._callbackError = callbackError
|
||||||
|
self._socket = ws_socket
|
||||||
self._ws = None
|
self._ws = None
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
|
@ -52,8 +56,9 @@ class AlertListener(threading.Thread):
|
||||||
# create the websocket connection
|
# create the websocket connection
|
||||||
url = self._server.url(self.key, includeToken=True).replace('http', 'ws')
|
url = self._server.url(self.key, includeToken=True).replace('http', 'ws')
|
||||||
log.info('Starting AlertListener: %s', url)
|
log.info('Starting AlertListener: %s', url)
|
||||||
self._ws = websocket.WebSocketApp(url, on_message=self._onMessage,
|
|
||||||
on_error=self._onError)
|
self._ws = websocket.WebSocketApp(url, on_message=self._onMessage, on_error=self._onError, socket=self._socket)
|
||||||
|
|
||||||
self._ws.run_forever()
|
self._ws.run_forever()
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
|
@ -66,10 +71,8 @@ class AlertListener(threading.Thread):
|
||||||
|
|
||||||
def _onMessage(self, *args):
|
def _onMessage(self, *args):
|
||||||
""" Called when websocket message is received.
|
""" Called when websocket message is received.
|
||||||
In earlier releases, websocket-client returned a tuple of two parameters: a websocket.app.WebSocketApp
|
|
||||||
object and the message as a STR. Current releases appear to only return the message.
|
|
||||||
We are assuming the last argument in the tuple is the message.
|
We are assuming the last argument in the tuple is the message.
|
||||||
This is to support compatibility with current and previous releases of websocket-client.
|
|
||||||
"""
|
"""
|
||||||
message = args[-1]
|
message = args[-1]
|
||||||
try:
|
try:
|
||||||
|
@ -82,10 +85,8 @@ class AlertListener(threading.Thread):
|
||||||
|
|
||||||
def _onError(self, *args): # pragma: no cover
|
def _onError(self, *args): # pragma: no cover
|
||||||
""" Called when websocket error is received.
|
""" Called when websocket error is received.
|
||||||
In earlier releases, websocket-client returned a tuple of two parameters: a websocket.app.WebSocketApp
|
|
||||||
object and the error. Current releases appear to only return the error.
|
|
||||||
We are assuming the last argument in the tuple is the message.
|
We are assuming the last argument in the tuple is the message.
|
||||||
This is to support compatibility with current and previous releases of websocket-client.
|
|
||||||
"""
|
"""
|
||||||
err = args[-1]
|
err = args[-1]
|
||||||
try:
|
try:
|
||||||
|
|
3
setup.py
3
setup.py
|
@ -31,6 +31,9 @@ setup(
|
||||||
url='https://github.com/pkkid/python-plexapi',
|
url='https://github.com/pkkid/python-plexapi',
|
||||||
packages=['plexapi'],
|
packages=['plexapi'],
|
||||||
install_requires=requirements,
|
install_requires=requirements,
|
||||||
|
extras_require={
|
||||||
|
'alert': ["websocket-client>=1.3.3"],
|
||||||
|
},
|
||||||
python_requires='>=3.8',
|
python_requires='>=3.8',
|
||||||
long_description=readme,
|
long_description=readme,
|
||||||
keywords=['plex', 'api'],
|
keywords=['plex', 'api'],
|
||||||
|
|
Loading…
Reference in a new issue