From da4f9126055442b0c4973bc47f66d321c62b29e1 Mon Sep 17 00:00:00 2001 From: NaruX Date: Tue, 3 Apr 2018 12:06:46 +0200 Subject: [PATCH] =?UTF-8?q?Neue=20Optionen=20f=C3=BCr=20Config-file=20?= =?UTF-8?q?=C3=BCbernommen=20Neuen=20XML-Modus=204=20angelegt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- revpipyload/picontrolserver.py | 1 + revpipyload/revpipyload.py | 103 ++++++++++++++++++++++----------- 2 files changed, 69 insertions(+), 35 deletions(-) diff --git a/revpipyload/picontrolserver.py b/revpipyload/picontrolserver.py index 8be9c55..f9d9551 100644 --- a/revpipyload/picontrolserver.py +++ b/revpipyload/picontrolserver.py @@ -12,6 +12,7 @@ from threading import Event, Thread from timeit import default_timer +# NOTE: Sollte dies als Process ausgeführt werden? class RevPiSlave(Thread): """RevPi PLC-Server. diff --git a/revpipyload/revpipyload.py b/revpipyload/revpipyload.py index 7e30af5..a0c6c30 100755 --- a/revpipyload/revpipyload.py +++ b/revpipyload/revpipyload.py @@ -162,7 +162,7 @@ class RevPiPyLoad(): if "XMLRPC" in self.globalconfig: self.xmlrpc = \ int(self.globalconfig["XMLRPC"].get("xmlrpc", 0)) - self.xmlrpcacl = IpAclManager(minlevel=0, maxlevel=3) + self.xmlrpcacl = IpAclManager(minlevel=0, maxlevel=4) if not self.xmlrpcacl.loadacl( self.globalconfig["XMLRPC"].get("acl", "")): proginit.logger.warning( @@ -268,10 +268,12 @@ class RevPiPyLoad(): 3, self.xml_plcslavestart, "plcslavestart") self.xsrv.register_function( 3, self.xml_plcslavestop, "plcslavestop") + + # XML Modus 4 Einstellungen ändern self.xsrv.register_function( - 3, self.xml_setconfig, "set_config") + 4, self.xml_setconfig, "set_config") self.xsrv.register_function( - 3, self.xml_setpictoryrsc, "set_pictoryrsc") + 4, self.xml_setpictoryrsc, "set_pictoryrsc") proginit.logger.debug("created xmlrpc server") @@ -302,12 +304,12 @@ class RevPiPyLoad(): self.plcarguments, self.pythonversion ) - th_plc.autoreload = self.autoreload - th_plc.gid = self.plcgid - th_plc.uid = self.plcuid - th_plc.rtlevel = self.rtlevel - th_plc.zeroonerror = self.zeroonerror - th_plc.zeroonexit = self.zeroonexit + th_plc.autoreload = bool(self.autoreload) + th_plc.gid = int(self.plcgid) + th_plc.uid = int(self.plcuid) + th_plc.rtlevel = int(self.rtlevel) + th_plc.zeroonerror = bool(self.zeroonerror) + th_plc.zeroonexit = bool(self.zeroonexit) proginit.logger.debug("leave RevPiPyLoad._plcthread()") return th_plc @@ -489,20 +491,32 @@ class RevPiPyLoad(): @return dict() der Konfiguration""" proginit.logger.debug("xmlrpc call getconfig") dc = {} + + # DEFAULT Sektion dc["autoreload"] = self.autoreload + dc["autoreloaddelay"] = self.autoreloaddelay dc["autostart"] = self.autostart dc["plcworkdir"] = self.plcworkdir dc["plcprogram"] = self.plcprogram dc["plcarguments"] = self.plcarguments - dc["plcslave"] = self.plcslave - dc["plcslaveacl"] = self.plcslaveacl.acl - dc["plcslaveport"] = self.plcslaveport + # dc["plcuid"] = self.plcuid + # dc["plcgid"] = self.plcgid dc["pythonversion"] = self.pythonversion dc["rtlevel"] = self.rtlevel - dc["xmlrpc"] = self.xmlrpc - dc["xmlrpcacl"] = self.xmlrpcacl.acl dc["zeroonerror"] = self.zeroonerror dc["zeroonexit"] = self.zeroonexit + + # PLCSLAVE Sektion + dc["plcslave"] = self.plcslave + dc["plcslaveacl"] = self.plcslaveacl.acl + dc["plcslavebindip"] = self.plcslavebindip + dc["plcslaveport"] = self.plcslaveport + + # XMLRPC Sektion + dc["xmlrpc"] = self.xmlrpc + dc["xmlrpcacl"] = self.xmlrpcacl.acl + dc["xmlrpcbindip"] = self.xmlrpcbindip + return dc def xml_getfilelist(self): @@ -664,32 +678,51 @@ class RevPiPyLoad(): @return True, wenn erfolgreich angewendet""" proginit.logger.debug("xmlrpc call setconfig") keys = { - "autoreload": "[01]", - "autostart": "[01]", - "plcprogram": ".+", - "plcarguments": ".*", - "plcslave": "[01]", - "plcslaveacl": self.plcslaveacl.regex_acl, - "plcslaveport": "[0-9]{,5}", - "pythonversion": "[23]", - "rtlevel": "[0-1]", - "xmlrpc": "[0-3]", - "xmlrpcacl": self.xmlrpcacl.regex_acl, - "zeroonerror": "[01]", - "zeroonexit": "[01]" + "DEFAULT": { + "autoreload": "[01]", + "autoreloaddelay": "[0-9]+", + "autostart": "[01]", + "plcprogram": ".+", + "plcarguments": ".*", + # "plcuid": "[0-9]{,5}", + # "plcgid": "[0-9]{,5}", + "pythonversion": "[23]", + "rtlevel": "[0-1]", + "zeroonerror": "[01]", + "zeroonexit": "[01]", + }, + "PLCSLAVE": { + "plcslave": "[01]", + "plcslaveacl": self.plcslaveacl.regex_acl, + # "plcslavebindip": "^((([\\d]{1,3}\\.){3}[\\d]{1,3})|\\*)+$", + "plcslaveport": "[0-9]{,5}", + }, + "XMLRPC": { + "xmlrpc": "[01]", + "xmlrpcacl": self.xmlrpcacl.regex_acl, + # "xmlrpcbindip": "^((([\\d]{1,3}\\.){3}[\\d]{1,3})|\\*)+$", + # "xmlslaveport": "[0-9]{,5}", + } } # Werte übernehmen - for key in keys: - if key in dc: - if not refullmatch(keys[key], str(dc[key])): - proginit.logger.error( - "got wrong setting '{}' with value '{}'".format( - key, dc[key] + for sektion in keys: + suffix = sektion.lower() + for key in keys[sektion]: + if key in dc: + localkey = key.replace(suffix, "") + if not refullmatch(keys[sektion][key], str(dc[key])): + proginit.logger.error( + "got wrong setting '{}' with value '{}'".format( + key, dc[key] + ) ) + return False + self.globalconfig.set( + sektion, + key if localkey == "" else localkey, + str(dc[key]) ) - return False - self.globalconfig.set("DEFAULT", key, str(dc[key])) # conf-Datei schreiben with open(proginit.globalconffile, "w") as fh: