Skip to content

Merge upstream changes into master #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/python-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,14 @@ jobs:
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install flake8 pytest
python -m pip install flake8 pytest tox
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Lint with flake8
run: |
# stop the build if there are Python syntax errors or undefined names
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
- name: Test with pytest
- name: Test with tox
run: |
pytest
tox -e py
2 changes: 1 addition & 1 deletion docs/sources/basics.rst
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ necessarily need a connected socket, in fact, you don't even need a socket at al
>>> def data_source():
>>> yield TextMessage(u'hello world')

>>> from mock import MagicMock
>>> from unittest.mock import MagicMock
>>> source = MagicMock(side_effect=data_source)
>>> ws = EchoWebSocket(sock=source)
>>> ws.send(u'hello there')
2 changes: 1 addition & 1 deletion example/basic/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@

cur_dir = os.path.normpath(os.path.abspath(os.path.dirname(__file__)))
index_path = os.path.join(cur_dir, 'index.html')
index_page = file(index_path, 'r').read()
index_page = open(index_path, 'r').read()

class ChatWebSocketHandler(WebSocket):
def received_message(self, m):
Expand Down
4 changes: 3 additions & 1 deletion example/droid_sensor.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
# -*- coding: utf-8 -*-
from __future__ import print_function

__doc__ = """
WebSocket client that pushes Android sensor metrics to the
websocket server it is connected to.
Expand Down Expand Up @@ -64,7 +66,7 @@ def run(self):
continue

c = lambda rad: rad * 360.0 / math.pi
print c(azimuth), c(pitch), c(roll), x, y, z
print(c(azimuth), c(pitch), c(roll), x, y, z)

if self.client.terminated:
break
Expand Down
8 changes: 5 additions & 3 deletions example/droid_sensor_cherrypy_server.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
# -*- coding: utf-8 -*-
from __future__ import print_function

import os.path
import cherrypy

Expand All @@ -8,7 +10,7 @@
class BroadcastWebSocketHandler(WebSocket):
def received_message(self, m):
cherrypy.engine.publish('websocket-broadcast', str(m))

class Root(object):
@cherrypy.expose
def display(self):
Expand Down Expand Up @@ -61,15 +63,15 @@ def index(self):
</body>
</html>
"""

if __name__ == '__main__':
cherrypy.config.update({
'server.socket_host': '0.0.0.0',
'server.socket_port': 9000,
'tools.staticdir.root': os.path.abspath(os.path.join(os.path.dirname(__file__), 'static'))
}
)
print os.path.abspath(os.path.join(__file__, 'static'))
print(os.path.abspath(os.path.join(__file__, 'static')))
WebSocketPlugin(cherrypy.engine).subscribe()
cherrypy.tools.websocket = WebSocketTool()

Expand Down
2 changes: 1 addition & 1 deletion example/mocking_data_source.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ def recv(self, size):
current_bytes = self.remaining_bytes[:size]
self.remaining_bytes = self.remaining_bytes[size:]

if self.remaining_bytes is b'':
if self.remaining_bytes == b'':
self.frame = None
self.remaining_bytes = None

Expand Down
4 changes: 2 additions & 2 deletions example/websensors/templates/.cache/board.html.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ def render_body(context,**pageargs):
# SOURCE LINE 1
__M_writer(u'<!DOCTYPE html>\n<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->\n<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->\n<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->\n<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->\n <head>\n <meta charset="utf-8">\n <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">\n <title>Mobile remote control</title>\n <meta name="description" content="Remote control your webapp with your mobile device">\n <meta name="viewport" content="width=device-width, initial-scale=1">\n <meta name="twitter:card" content="Sylvain Hellegouarch\'s twitter account">\n <meta name="twitter:site" content="@lawouach">\n <meta name="twitter:url" content="http://www.defuze.org">\n\n <link rel="stylesheet" href="/static/vendors/initializr/css/normalize.min.css">\n <link rel="stylesheet" href="/static/vendors/initializr/css/main.css">\n <link rel="stylesheet" href="/static/css/style.css">\n\n <script src="/static/vendors/initializr/js/vendor/modernizr-2.6.2-respond-1.1.0.min.js"></script>\n </head>\n <body>\n <!--[if lt IE 7]>\n <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>\n <![endif]-->\n\n <div class="main-container" id="arena">\n\t <canvas id="tools" width="70" height="600"></canvas>\n\t <canvas id="board" width="150" height="600"></canvas>\n </div>\n\n <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>\n\t<script type="application/javascript" src="/static/vendors/jcanvas/jcanvas.min.js"></script>\n <script type="application/javascript" src="/static/vendors/initializr/js/plugins.js"></script>\n <script type="application/javascript" src="/static/js/drawingboard.js"></script>\n <script type="application/javascript">\n\t $(document).ready(function() {\n\t $.board({board: "')
# SOURCE LINE 38
__M_writer(unicode(boardid))
__M_writer(str(boardid))
__M_writer(u'", participant: "')
__M_writer(unicode(participantid))
__M_writer(str(participantid))
__M_writer(u'"});\n\t });\n </script>\n </body>\n</html>\n')
return ''
finally:
Expand Down
4 changes: 2 additions & 2 deletions example/websensors/templates/.cache/index.html.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ def render_body(context,**pageargs):
# SOURCE LINE 1
__M_writer(u'<!DOCTYPE html>\n<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->\n<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->\n<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->\n<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->\n <head>\n <meta charset="utf-8">\n <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">\n <title>Shared drawing board</title>\n <meta name="description" content="Remote control your webapp with your mobile device">\n <meta name="viewport" content="width=device-width, initial-scale=1">\n <meta name="twitter:card" content="Sylvain Hellegouarch\'s twitter account">\n <meta name="twitter:site" content="@lawouach">\n <meta name="twitter:url" content="http://www.defuze.org">\n\n <link rel="stylesheet" href="/static/vendors/initializr/css/normalize.min.css">\n <link rel="stylesheet" href="/static/vendors/initializr/css/main.css">\n\n <script src="/static/vendors/initializr/js/vendor/modernizr-2.6.2-respond-1.1.0.min.js"></script>\n </head>\n <body>\n <!--[if lt IE 7]>\n <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>\n <![endif]-->\n\n <div class="header-container">\n <header class="wrapper clearfix">\n <h1 class="title">shared drawing board</h1>\n </header>\n </div>\n\n <div class="main-container">\n <div class="main wrapper clearfix">\n\n <article>\n <section>\n\t <p>This demo will demonstrate a fun usage of WebSocket and Canvases.\n\t The idea is that you will share a drawing board with other\n\t users or devices and each time someone will draw something onto\n\t the canvas, all other participants will see the drawing in near real-time\n\t on their side too.\n\t </p>\n\t <p>Please use the link below to share a drawing board:</p>\n\t <p><a href="http://192.168.1.13:8080/board/')
# SOURCE LINE 44
__M_writer(unicode(boardid))
__M_writer(str(boardid))
__M_writer(u'">http://192.168.1.13:8080/board/')
__M_writer(unicode(boardid))
__M_writer(str(boardid))
__M_writer(u'</a></p>\n </section>\n </article>\n\n </div> <!-- #main -->\n </div> <!-- #main-container -->\n\n <div class="footer-container">\n <footer class="wrapper">\n <p>&copy; 2014 | <a href="http://www.defuze.org/">Sylvain Hellegouarch</a></p>\n </footer>\n </div>\n\n <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>\n <script type="application/javascript" src="/static/vendors/initializr/js/plugins.js"></script>\n </body>\n</html>\n')
return ''
finally:
Expand Down
5 changes: 4 additions & 1 deletion test/test_cherrypy.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@
import time
import unittest

from mock import MagicMock, call
try:
from unittest.mock import MagicMock, call
except ImportError:
from mock import MagicMock, call

import cherrypy
from ws4py.server.cherrypyserver import WebSocketPlugin, WebSocketTool
Expand Down
6 changes: 4 additions & 2 deletions test/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@
import socket
import time
import unittest

from mock import MagicMock, patch
try:
from unittest.mock import MagicMock, patch
except ImportError:
from mock import MagicMock, patch

from ws4py import WS_KEY
from ws4py.exc import HandshakeError
Expand Down
5 changes: 4 additions & 1 deletion test/test_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@
except ImportError:
from itertools import zip_longest

from mock import MagicMock, call, patch
try:
from unittest.mock import MagicMock, call, patch
except ImportError:
from mock import MagicMock, call, patch

from ws4py.manager import WebSocketManager, SelectPoller,\
EPollPoller
Expand Down
9 changes: 7 additions & 2 deletions test/test_utils.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
# -*- coding: utf-8 -*-
import unittest

try:
from unittest.mock import MagicMock
except ImportError:
from mock import MagicMock

from ws4py import format_addresses
from ws4py.websocket import WebSocket
from mock import MagicMock


class WSUtilities(unittest.TestCase):
def test_format_address(self):
Expand All @@ -14,7 +19,7 @@ def test_format_address(self):

log = format_addresses(ws)
self.assertEqual(log, "[Local => 127.0.0.1:52300 | Remote => 127.0.0.1:4800]")

if __name__ == '__main__':
suite = unittest.TestSuite()
loader = unittest.TestLoader()
Expand Down
5 changes: 4 additions & 1 deletion test/test_websocket.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@
import socket
import struct

from mock import MagicMock, call, patch
try:
from unittest.mock import MagicMock, call, patch
except ImportError:
from mock import MagicMock, call, patch

from ws4py.framing import Frame, \
OPCODE_CONTINUATION, OPCODE_TEXT, \
Expand Down
3 changes: 2 additions & 1 deletion ws4py/client/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,8 @@ def connect(self):
"""
if self.scheme == "wss":
# default port is now 443; upgrade self.sender to send ssl
context = ssl.create_default_context()
protocol = getattr(ssl, 'PROTOCOL_TLS_CLIENT', ssl.PROTOCOL_TLSv1_2) # PROTOCOL_TLS_CLIENT is correct for newer Python but doesn't exist on older Pythons
context = ssl.SSLContext(protocol)
if self.ssl_options.get('certfile', None):
context.load_cert_chain(self.ssl_options.get('certfile'), self.ssl_options.get('keyfile'))
# You almost certainly do not want to do this:
Expand Down
2 changes: 1 addition & 1 deletion ws4py/compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ def ord(c):
else:
py3k = False
from urlparse import urlsplit
range = xrange
range = xrange # noqa: F821
unicode = unicode
basestring = basestring
ord = ord
Expand Down
2 changes: 1 addition & 1 deletion ws4py/server/cherrypyserver.py
Original file line number Diff line number Diff line change
Expand Up @@ -379,4 +379,4 @@ def index(self):
cherrypy.log("Handler created: %s" % repr(cherrypy.request.ws_handler))

cherrypy.quickstart(Root(), '/', config={'/': {'tools.websocket.on': True,
'tools.websocket.handler_cls': EchoWebSocketHandler}})
'tools.websocket.handler_cls': EchoWebSocketHandler}}) # noqa: F821
4 changes: 2 additions & 2 deletions ws4py/websocket.py
Original file line number Diff line number Diff line change
Expand Up @@ -462,7 +462,7 @@ def process(self, bytes):
self.reading_buffer_size = s.parser.send(bytes) or DEFAULT_READING_SIZE

if s.closing is not None:
logger.debug("Closing message received (%d) '%s'" % (s.closing.code, s.closing.reason))
logger.debug("Closing message received (%d): %s" % (s.closing.code, s.closing.reason.decode() if isinstance(s.closing.reason, bytes) else s.closing.reason))
if not self.server_terminated:
self.close(s.closing.code, s.closing.reason)
else:
Expand All @@ -471,7 +471,7 @@ def process(self, bytes):

if s.errors:
for error in s.errors:
logger.debug("Error message received (%d) '%s'" % (error.code, error.reason))
logger.debug("Error message received (%d): %s" % (error.code, error.reason.decode() if isinstance(error.reason, bytes) else error.reason))
self.close(error.code, error.reason)
s.errors = []
return False
Expand Down
Loading