diff --git a/bazarr/api.py b/bazarr/api.py index 1e6fe441f..bf66d2dd2 100644 --- a/bazarr/api.py +++ b/bazarr/api.py @@ -64,15 +64,15 @@ def authenticate(actual_method): class Shutdown(Resource): @authenticate def get(self): - from main import Server - Server.shutdown() + from main import webserver + webserver.shutdown() class Restart(Resource): @authenticate def get(self): - from main import Server - Server.restart() + from main import webserver + webserver.restart() class Badges(Resource): diff --git a/bazarr/main.py b/bazarr/main.py index 5f8a6d3c1..8afc87a72 100644 --- a/bazarr/main.py +++ b/bazarr/main.py @@ -464,79 +464,84 @@ def test_notification(protocol, provider): return '', 200 -class Server: - # Mute DeprecationWarning - warnings.simplefilter("ignore", DeprecationWarning) - # Mute Insecure HTTPS requests made to Sonarr and Radarr - warnings.filterwarnings('ignore', message='Unverified HTTPS request') - # Mute Python3 BrokenPipeError - warnings.simplefilter("ignore", BrokenPipeError) - - if args.dev: - server = app.run(host=str(settings.general.ip), - port=(int(args.port) if args.port else int(settings.general.port))) - else: - server = create_server(app, - host=str(settings.general.ip), - port=int(args.port) if args.port else int(settings.general.port), - threads=24) - - # Make sure that server class instance isn't getting instantiated again but reused instead. - _instance = None - - def __new__(cls, *args, **kwargs): - if not cls._instance: - cls._instance = super(Server, cls).__new__( - cls, *args, **kwargs) - return cls._instance - - @classmethod - def start(cls): - try: - logging.info( - 'BAZARR is started and waiting for request on http://' + str(settings.general.ip) + ':' + (str( - args.port) if args.port else str(settings.general.port)) + str(base_url)) - if not args.dev: - cls.server.run() - except KeyboardInterrupt: - cls.shutdown() - - @classmethod - def shutdown(cls): - try: - cls.server.close() - except Exception as e: - logging.error('BAZARR Cannot stop Waitress: ' + repr(e)) - else: - database.close() +class Server(object): + class __Server: + def __init__(self): + # Mute DeprecationWarning + warnings.simplefilter("ignore", DeprecationWarning) + # Mute Insecure HTTPS requests made to Sonarr and Radarr + warnings.filterwarnings('ignore', message='Unverified HTTPS request') + # Mute Python3 BrokenPipeError + warnings.simplefilter("ignore", BrokenPipeError) + + if args.dev: + self.server = app.run(host=str(settings.general.ip), + port=(int(args.port) if args.port else int(settings.general.port))) + else: + self.server = create_server(app, + host=str(settings.general.ip), + port=int(args.port) if args.port else int(settings.general.port), + threads=24) + + def start(self): + try: + logging.info( + 'BAZARR is started and waiting for request on http://' + str(settings.general.ip) + ':' + (str( + args.port) if args.port else str(settings.general.port)) + str(base_url)) + if not args.dev: + self.server.run() + except KeyboardInterrupt: + self.shutdown() + + def shutdown(self): try: - stop_file = io.open(os.path.join(args.config_dir, "bazarr.stop"), "w", encoding='UTF-8') + self.server.close() except Exception as e: - logging.error('BAZARR Cannot create bazarr.stop file: ' + repr(e)) + logging.error('BAZARR Cannot stop Waitress: ' + repr(e)) else: - logging.info('Bazarr is being shutdown...') - stop_file.write(str('')) - stop_file.close() - os._exit(0) - - @classmethod - def restart(cls): - try: - cls.server.close() - except Exception as e: - logging.error('BAZARR Cannot stop Waitress: ' + repr(e)) - else: - database.close() + database.close() + try: + stop_file = io.open(os.path.join(args.config_dir, "bazarr.stop"), "w", encoding='UTF-8') + except Exception as e: + logging.error('BAZARR Cannot create bazarr.stop file: ' + repr(e)) + else: + logging.info('Bazarr is being shutdown...') + stop_file.write(str('')) + stop_file.close() + os._exit(0) + + def restart(self): try: - restart_file = io.open(os.path.join(args.config_dir, "bazarr.restart"), "w", encoding='UTF-8') + self.server.close() except Exception as e: - logging.error('BAZARR Cannot create bazarr.restart file: ' + repr(e)) + logging.error('BAZARR Cannot stop Waitress: ' + repr(e)) else: - logging.info('Bazarr is being restarted...') - restart_file.write(str('')) - restart_file.close() - os._exit(0) + database.close() + try: + restart_file = io.open(os.path.join(args.config_dir, "bazarr.restart"), "w", encoding='UTF-8') + except Exception as e: + logging.error('BAZARR Cannot create bazarr.restart file: ' + repr(e)) + else: + logging.info('Bazarr is being restarted...') + restart_file.write(str('')) + restart_file.close() + os._exit(0) + + instance = None + + def __new__(cls): # __new__ always a classmethod + if not Server.instance: + Server.instance = Server.__Server() + return Server.instance + + def __getattr__(self, name): + return getattr(self.instance, name) + + def __setattr__(self, name): + return setattr(self.instance, name) + +webserver = Server() if __name__ == "__main__": - Server.start() + webserver.start()