diff --git a/revpipyload/helper.py b/revpipyload/helper.py index b437536..936b3ee 100644 --- a/revpipyload/helper.py +++ b/revpipyload/helper.py @@ -5,7 +5,7 @@ __copyright__ = "Copyright (C) 2020 Sven Sager" __license__ = "GPLv3" import os -from json import load, loads +from json import loads from re import match as rematch from subprocess import Popen, PIPE diff --git a/revpipyload/logsystem.py b/revpipyload/logsystem.py index 0e06131..3382999 100644 --- a/revpipyload/logsystem.py +++ b/revpipyload/logsystem.py @@ -9,7 +9,7 @@ from threading import Event, Lock, Thread from xmlrpc.client import Binary -class LogReader(): +class LogReader: """Ermoeglicht den Zugriff auf die Logdateien. @@ -112,7 +112,6 @@ class PipeLogwriter(Thread): @return FileHandler-Objekt""" proginit.logger.debug("enter PipeLogwriter._configurefh()") - logfile = None dirname = os.path.dirname(self.logfile) if os.access(dirname, os.R_OK | os.W_OK): diff --git a/revpipyload/procimgserver.py b/revpipyload/procimgserver.py index c7a6bc2..a87dae9 100644 --- a/revpipyload/procimgserver.py +++ b/revpipyload/procimgserver.py @@ -14,7 +14,7 @@ import revpimodio2 from xmlrpc.client import Binary -class ProcimgServer(): +class ProcimgServer: """Serverkomponente fuer zusaetzliche XML-RPC Funktionen. diff --git a/revpipyload/revpipyload.py b/revpipyload/revpipyload.py index 2c6bb4d..646f00a 100755 --- a/revpipyload/revpipyload.py +++ b/revpipyload/revpipyload.py @@ -56,7 +56,7 @@ from xrpcserver import SaveXMLRPCServer min_revpimodio = "2.5.0" -class RevPiPyLoad(): +class RevPiPyLoad: """Hauptklasse, die alle Funktionen zur Verfuegung stellt. Hier wird die gesamte Konfiguraiton eingelesen und der ggf. aktivierte @@ -495,8 +495,9 @@ class RevPiPyLoad(): # Neustart bei reload if not self._exit: - proginit.logger.info("start xmlrpc-server") - self.xsrv.start() + proginit.logger.info("bind xmlrpc-server") + self.xsrv.server_bind() + self.xsrv.server_activate() # Konfiguration abschließen self.evt_loadconfig.clear() @@ -562,8 +563,6 @@ class RevPiPyLoad(): ) return None - th_plc = None - proginit.logger.debug("create PLC program watcher") th_plc = plcsystem.RevPiPlc( os.path.join(self.plcworkdir, self.plcprogram), @@ -774,8 +773,9 @@ class RevPiPyLoad(): self._exit = False if self.xmlrpc and self.xsrv is not None: - proginit.logger.info("start xmlrpc-server") - self.xsrv.start() + proginit.logger.info("bind xmlrpc-server") + self.xsrv.server_bind() + self.xsrv.server_activate() # MQTT Uebertragung starten if self.th_plcmqtt is not None: @@ -871,7 +871,11 @@ class RevPiPyLoad(): if self.th_plcslave is not None: self.th_plcslave.start() - self.evt_loadconfig.wait(1) + if self.xmlrpc and self.xsrv is not None: + # Wort xml calls in same thread or wait till timeout + self.xsrv.handle_request() + else: + self.evt_loadconfig.wait(1) proginit.logger.info("stopping revpipyload") @@ -911,8 +915,11 @@ class RevPiPyLoad(): if self.plc is not None and self.plc.is_alive(): proginit.logger.info("stopping revpiplc thread") self.plc.stop() - self.plc.join() - proginit.logger.debug("revpiplc thread successfully closed") + self.plc.join(5.0) + if self.plc.is_alive(): + proginit.logger.warning("revpiplc thread not closed") + else: + proginit.logger.debug("revpiplc thread successfully closed") proginit.logger.debug("leave RevPiPyLoad.stop_plcprogram()") @@ -933,8 +940,8 @@ class RevPiPyLoad(): proginit.logger.debug("enter RevPiPyLoad.stop_xmlrpcserver()") if self.xsrv is not None: - proginit.logger.info("shutting down xmlrpc-server") - self.xsrv.stop() + proginit.logger.info("close xmlrpc-server") + self.xsrv.server_close() proginit.logger.debug("leave RevPiPyLoad.stop_xmlrpcserver()") diff --git a/revpipyload/xrpcserver.py b/revpipyload/xrpcserver.py index bde8fde..2e7cb8e 100644 --- a/revpipyload/xrpcserver.py +++ b/revpipyload/xrpcserver.py @@ -3,10 +3,11 @@ __author__ = "Sven Sager" __copyright__ = "Copyright (C) 2018 Sven Sager" __license__ = "GPLv3" + +from xmlrpc.server import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler + import proginit from shared.ipaclmanager import IpAclManager -from concurrent import futures -from xmlrpc.server import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler class SaveXMLRPCServer(SimpleXMLRPCServer): @@ -31,6 +32,7 @@ class SaveXMLRPCServer(SimpleXMLRPCServer): encoding="utf-8", bind_and_activate=False, ) + self.timeout = 0.5 # Klassenvariablen if ipacl is None: @@ -39,8 +41,6 @@ class SaveXMLRPCServer(SimpleXMLRPCServer): self.aclmgr = ipacl self.funcacls = {} self.requestacl = -1 - self.tpe = futures.ThreadPoolExecutor(max_workers=1) - self.fut = None proginit.logger.debug("leave SaveXMLRPCServer.__init__()") @@ -62,11 +62,6 @@ class SaveXMLRPCServer(SimpleXMLRPCServer): return super()._dispatch(method, params) - def is_alive(self): - """Prueft ob der XML RPC Server laeuft. - @return True, wenn Server noch laeuft""" - return False if self.fut is None else self.fut.running() - def register_function(self, acl_level, function, name=None): """Override register_function to add acl_level. @@ -83,32 +78,6 @@ class SaveXMLRPCServer(SimpleXMLRPCServer): self.funcs[name] = function self.funcacls[name] = acl_level - def start(self): - """Startet den XML-RPC Server.""" - proginit.logger.debug("enter SaveXMLRPCServer.start()") - - if self.fut is None: - self.server_bind() - self.server_activate() - self.fut = self.tpe.submit(self.serve_forever) - else: - raise RuntimeError("savexmlrpcservers can only be started once") - - proginit.logger.debug("leave SaveXMLRPCServer.start()") - - def stop(self): - """Stoppt den XML-RPC Server.""" - proginit.logger.debug("enter SaveXMLRPCServer.stop()") - - if self.fut is not None: - self.shutdown() - self.tpe.shutdown() - self.server_close() - else: - raise RuntimeError("save xml rpc server was not started") - - proginit.logger.debug("leave SaveXMLRPCServer.stop()") - class SaveXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): diff --git a/setup.py b/setup.py index 1bf4b87..f9a2150 100644 --- a/setup.py +++ b/setup.py @@ -27,7 +27,7 @@ setup( license="LGPLv3", name="revpipyload", - version="0.9.2", + version="0.9.2b", scripts=[ "data/revpipyload",