Add zeroconf to AppVeyor and setup.py, broadcast on all valid interfaces, quit the thread properly

This commit is contained in:
Raoul Snyman 2019-07-02 13:29:42 -07:00
parent a3b8a56da2
commit 50fcc9b5d5
3 changed files with 17 additions and 8 deletions

View File

@ -23,6 +23,8 @@
The :mod:`~openlp.core.api.zeroconf` module runs a Zerconf server so that OpenLP can advertise the
RESTful API for devices on the network to discover.
"""
import logging
import re
import socket
from time import sleep
@ -33,6 +35,11 @@ from openlp.core.common.registry import Registry
from openlp.core.common.settings import Settings
from openlp.core.threading import ThreadWorker, run_thread
# Skip names like "docker0", "tun0", "loopback_0", etc
INTERFACE_FILTER = re.compile('loopback|docker|tun', re.IGNORECASE)
log = logging.getLogger(__name__)
class ZeroconfWorker(ThreadWorker):
"""
@ -76,6 +83,7 @@ class ZeroconfWorker(ThreadWorker):
zc.unregister_service(http_info)
zc.unregister_service(ws_info)
zc.close()
self.quit.emit()
def stop(self):
"""
@ -91,11 +99,11 @@ def start_zeroconf():
# When we're running tests, just skip this set up if this flag is set
if Registry().get_flag('no_web_server'):
return
ifaces = get_local_ip4()
for key in iter(ifaces):
address = ifaces.get(key)['ip']
break
http_port = Settings().value('api/port')
ws_port = Settings().value('api/websocket port')
worker = ZeroconfWorker(address, http_port, ws_port)
run_thread(worker, 'api_zeroconf')
for name, interface in get_local_ip4().items():
log.debug('Interface {name}: {interface}'.format(name=name, interface=interface))
if not INTERFACE_FILTER.search(name):
# Only advertise on real interfaces
worker = ZeroconfWorker(interface['ip'], http_port, ws_port)
run_thread(worker, 'api_zeroconf_{name}'.format(name=name))

View File

@ -18,7 +18,7 @@ environment:
install:
# Install dependencies from pypi
- "%PYTHON%\\python.exe -m pip install sqlalchemy alembic appdirs chardet beautifulsoup4 lxml Mako mysql-connector-python pytest mock pyodbc psycopg2 pypiwin32 websockets asyncio waitress six webob requests QtAwesome PyQt5 PyQtWebEngine pymediainfo PyMuPDF QDarkStyle python-vlc Pyro4"
- "%PYTHON%\\python.exe -m pip install sqlalchemy alembic appdirs chardet beautifulsoup4 lxml Mako mysql-connector-python pytest mock pyodbc psycopg2 pypiwin32 websockets asyncio waitress six webob requests QtAwesome PyQt5 PyQtWebEngine pymediainfo PyMuPDF QDarkStyle python-vlc Pyro4 zeroconf"
build: off

View File

@ -185,7 +185,8 @@ using a computer and a data projector.""",
'SQLAlchemy >= 0.5',
'waitress',
'WebOb',
'websockets'
'websockets',
'zeroconf'
],
extras_require={
'agpl-pdf': ['PyMuPDF'],