diff --git a/CHANGES.rst b/CHANGES.rst index 64d1d66..85d8d7a 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -2,6 +2,14 @@ ========= The full list of changes between each Python LiveReload release. + +Version 2.6.0 +------------- + +Released on Nov 21, 2018 + +1. Changed logic of liveport. +2. Fixed bugs Version 2.5.2 ------------- diff --git a/README.rst b/README.rst index 86ed1e5..671a5fb 100644 --- a/README.rst +++ b/README.rst @@ -3,13 +3,7 @@ This is a brand new LiveReload in version 2.0.0. -.. image:: https://img.shields.io/pypi/dm/livereload.svg - :target: https://pypi.python.org/pypi/livereload - :alt: Downloads -.. image:: https://img.shields.io/pypi/v/livereload.svg - :target: https://pypi.python.org/pypi/livereload - :alt: Version - +`Download on PyPi `_ Installation ------------ @@ -130,7 +124,7 @@ server.serve(port=8080, host='localhost') # open the web browser on startup, based on $BROWSER environment variable - server.serve(open_url=True, debug=False) + server.serve(open_url_delay=5, debug=False) shell diff --git a/livereload/__init__.py b/livereload/__init__.py index 1283a00..07c8fed 100644 --- a/livereload/__init__.py +++ b/livereload/__init__.py @@ -8,7 +8,7 @@ :license: BSD, see LICENSE for more details. """ -__version__ = '2.5.2' +__version__ = '2.6.0' __author__ = 'Hsiaoming Yang ' __homepage__ = 'https://github.com/lepture/python-livereload' diff --git a/livereload/handlers.py b/livereload/handlers.py index 7c6139e..c5b7234 100644 --- a/livereload/handlers.py +++ b/livereload/handlers.py @@ -103,7 +103,7 @@ } cls._last_reload_time = time.time() - for waiter in cls.waiters: + for waiter in cls.waiters.copy(): try: waiter.write_message(msg) except: diff --git a/livereload/server.py b/livereload/server.py index 49c0e04..0fc6d8c 100644 --- a/livereload/server.py +++ b/livereload/server.py @@ -132,7 +132,10 @@ if status_code != 304: if "content-type" not in header_set: - headers.append(("Content-Type", "application/octet-stream; charset=UTF-8")) + headers.append(( + "Content-Type", + "application/octet-stream; charset=UTF-8" + )) if "content-length" not in header_set: headers.append(("Content-Length", str(len(body)))) @@ -207,11 +210,10 @@ self.watcher.watch(filepath, func, delay, ignore=ignore) - def application(self, port, host, liveport=None, debug=None, live_css=True): + def application(self, port, host, liveport=None, debug=None, + live_css=True): LiveReloadHandler.watcher = self.watcher LiveReloadHandler.live_css = live_css - if liveport is None: - liveport = port if debug is None and self.app: debug = True @@ -224,24 +226,26 @@ # The livereload.js snippet. # Uses JavaScript to dynamically inject the client's hostname. # This allows for serving on 0.0.0.0. - live_reload_path = ":{port}/livereload.js?port={port}".format(port=liveport) - if liveport == 80 or liveport == 443: - live_reload_path = "/livereload.js?port={port}".format(port=liveport) - - live_script = escape.utf8(( - '' - ).format(path=live_reload_path)) + live_script = ( + '' + ) + if liveport: + live_script = escape.utf8(live_script % liveport) + else: + live_script = escape.utf8(live_script % 'window.location.port') web_handlers = self.get_web_handlers(live_script) class ConfiguredTransform(LiveScriptInjector): script = live_script - if liveport == port: + if not liveport: handlers = live_handlers + web_handlers app = web.Application( handlers=handlers, @@ -271,7 +275,8 @@ ] def serve(self, port=5500, liveport=None, host=None, root=None, debug=None, - open_url=False, restart_delay=2, open_url_delay=None, live_css=True): + open_url=False, restart_delay=2, open_url_delay=None, + live_css=True): """Start serve the server with the given port. :param port: serve on this port, default is 5500 @@ -282,7 +287,8 @@ via Tornado (and causes polling). Defaults to True when ``self.app`` is set, otherwise False. :param open_url_delay: open webbrowser after the delay seconds - :param live_css: whether to use live css or force reload on css. Defaults to True + :param live_css: whether to use live css or force reload on css. + Defaults to True """ host = host or '127.0.0.1' if root is not None: @@ -291,7 +297,8 @@ self._setup_logging() logger.info('Serving on http://%s:%s' % (host, port)) - self.application(port, host, liveport=liveport, debug=debug, live_css=live_css) + self.application( + port, host, liveport=liveport, debug=debug, live_css=live_css) # Async open web browser after 5 sec timeout if open_url or open_url_delay: diff --git a/server.py b/server.py index 9b8f8c3..f75acae 100644 --- a/server.py +++ b/server.py @@ -4,4 +4,4 @@ server = Server() server.watch('docs/*.rst', shell('make html')) -server.serve(root='docs/_build/html', open_url_delay=5) +server.serve(root='docs/_build/html') diff --git a/setup.py b/setup.py index 3eb7b95..591e667 100644 --- a/setup.py +++ b/setup.py @@ -48,13 +48,11 @@ 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.3', - 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: Implementation :: CPython', 'Programming Language :: Python :: Implementation :: PyPy', 'Topic :: Software Development :: Build Tools',