1- from geventwebsocket .handler import WebSocketHandler
21import gevent
32import socket
43import signal
76
87from zeroconf import IPVersion , ServiceInfo , Zeroconf , get_all_addresses
98
9+ from .handler import WebSocketHandler
1010from ..find import current_labthing
1111
12+ sentinel = object ()
1213
1314class Server :
1415 def __init__ (
1516 self ,
1617 app ,
1718 host = "0.0.0.0" ,
1819 port = 7485 ,
19- log = None ,
20- error_log = None ,
20+ log = sentinel ,
21+ error_log = sentinel ,
2122 debug = False ,
2223 zeroconf = True ,
2324 ):
@@ -82,15 +83,18 @@ def register_zeroconf(self):
8283 def stop (self ):
8384 # Unregister zeroconf service
8485 if self .zeroconf_server :
86+ logging .info ("Unregistering zeroconf services" )
8587 for service in self .service_infos :
8688 self .zeroconf_server .unregister_service (service )
8789 self .zeroconf_server .close ()
8890 # Stop WSGI server with timeout
8991 if self .wsgi_server :
92+ logging .info ("Shutting down WSGI server" )
9093 self .wsgi_server .stop (timeout = 5 )
9194 # Clear started event
9295 if self .started_event .is_set ():
9396 self .started_event .clear ()
97+ logging .info ("Done" )
9498
9599 def start (self ):
96100 # Unmodified version of app
@@ -101,10 +105,16 @@ def start(self):
101105 self .register_zeroconf ()
102106
103107 # Handle logging
104- if not self .log :
108+ if self .log is sentinel :
109+ print ("No access log specified. Using root." )
105110 self .log = logging .getLogger ()
106- if not self .error_log :
111+ if not self .log :
112+ self .log = logging .NullHandler ()
113+ if self .error_log is sentinel :
114+ print ("No error og specified. Using root." )
107115 self .error_log = logging .getLogger ()
116+ if not self .error_log :
117+ self .error_log = logging .NullHandler ()
108118
109119 # Handle debug mode
110120 if self .debug :
@@ -116,6 +126,8 @@ def start(self):
116126 friendlyhost = "localhost" if self .host == "0.0.0.0" else self .host
117127 print ("Starting LabThings WSGI Server" )
118128 print (f"Debug mode: { self .debug } " )
129+ print (f"Access log: { self .log } " )
130+ print (f"Error log: { self .error_log } " )
119131 print (f"Running on http://{ friendlyhost } :{ self .port } (Press CTRL+C to quit)" )
120132
121133 # Create WSGIServer
@@ -124,6 +136,7 @@ def start(self):
124136 app_to_run ,
125137 handler_class = WebSocketHandler ,
126138 log = self .log ,
139+ error_log = self .error_log
127140 )
128141
129142 # Serve
@@ -140,7 +153,7 @@ def start(self):
140153 self .stop () # pragma: no cover
141154
142155 def run (
143- self , host = None , port = None , log = None , error_log = None , debug = None , zeroconf = None ,
156+ self , host = None , port = None , log = sentinel , error_log = sentinel , debug = None , zeroconf = None ,
144157 ):
145158 """Starts the server allowing for runtime parameters. Designed to immitate
146159 the old Flask app.run style of starting an app
@@ -158,10 +171,10 @@ def run(
158171 if host is not None :
159172 self .host = str (host )
160173
161- if log is not None :
174+ if log is not sentinel :
162175 self .log = log
163176
164- if error_log is not None :
177+ if error_log is not sentinel :
165178 self .error_log = error_log
166179
167180 if debug is not None :
0 commit comments