From 58629a62a4e322829091df025b481fee07bdb643 Mon Sep 17 00:00:00 2001 From: NaruX Date: Sun, 12 Aug 2018 18:40:58 +0200 Subject: [PATCH] =?UTF-8?q?Fehler=20behoben=20bei=20Aufruf=20mit=20ung?= =?UTF-8?q?=C3=BCltigem=20configrsc=20Parameter=20code=20style?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/helper.html | 2 +- doc/index-revpipyload.shared.html | 4 +- doc/index.html | 2 +- doc/logsystem.html | 2 +- doc/picontrolserver.html | 2 +- doc/plcsystem.html | 2 +- doc/procimgserver.html | 6 +- doc/proginit.html | 2 +- doc/revpipyload.html | 4 +- doc/revpipyload.shared.ipaclmanager.html | 2 +- doc/xrpcserver.html | 2 +- eric-revpipyload.api | 35 +++++++- revpipyload.e4p | 104 +++++++++++++++++------ revpipyload/helper.py | 21 ++--- revpipyload/logsystem.py | 19 ++--- revpipyload/picontrolserver.py | 51 ++++++----- revpipyload/plcsystem.py | 31 +++---- revpipyload/procimgserver.py | 19 ++--- revpipyload/proginit.py | 16 ++-- revpipyload/revpipyload.py | 92 ++++++++++---------- revpipyload/shared/__init__.py | 4 + revpipyload/shared/ipaclmanager.py | 16 ++-- revpipyload/xrpcserver.py | 13 ++- setup.py | 6 +- 24 files changed, 261 insertions(+), 196 deletions(-) diff --git a/doc/helper.html b/doc/helper.html index c6856f8..a58d308 100644 --- a/doc/helper.html +++ b/doc/helper.html @@ -12,7 +12,7 @@ Helperfunktionen fuer das gesamte RevPiPyLoad-System.

Global Attributes

- +
None
__author__
__copyright__
__license__

Classes

diff --git a/doc/index-revpipyload.shared.html b/doc/index-revpipyload.shared.html index 387c9b5..9126c49 100644 --- a/doc/index-revpipyload.shared.html +++ b/doc/index-revpipyload.shared.html @@ -6,7 +6,9 @@

revpipyload.shared

- +

+Shared modules. +

diff --git a/doc/index.html b/doc/index.html index b9be723..a43d5a3 100644 --- a/doc/index.html +++ b/doc/index.html @@ -13,7 +13,7 @@ Packages

- +
sharedShared modules.
diff --git a/doc/logsystem.html b/doc/logsystem.html index 43eb55a..52d9b2d 100644 --- a/doc/logsystem.html +++ b/doc/logsystem.html @@ -12,7 +12,7 @@ Modul fuer die Verwaltung der Logdateien.

Global Attributes

- +
None
__author__
__copyright__
__license__

Classes

diff --git a/doc/picontrolserver.html b/doc/picontrolserver.html index 816899f..12ed28a 100644 --- a/doc/picontrolserver.html +++ b/doc/picontrolserver.html @@ -12,7 +12,7 @@ Modul fuer die Verwaltung der PLC-Slave Funktionen.

Global Attributes

- +
None
__author__
__copyright__
__license__

Classes

diff --git a/doc/plcsystem.html b/doc/plcsystem.html index 42c4fc0..6c5cb1e 100644 --- a/doc/plcsystem.html +++ b/doc/plcsystem.html @@ -12,7 +12,7 @@ Modul fuer die Verwaltung der PLC Funktionen.

Global Attributes

- +
None
__author__
__copyright__
__license__

Classes

diff --git a/doc/procimgserver.html b/doc/procimgserver.html index 1c0f2b8..5498973 100644 --- a/doc/procimgserver.html +++ b/doc/procimgserver.html @@ -15,7 +15,7 @@ IO-Check bei Inbetriebname durchzufuehren.

Global Attributes

- +
None
__author__
__copyright__
__license__

Classes

@@ -115,11 +115,11 @@ list() mit Tuple (pos, name)

ProcimgServer.ios

-ios(type) +ios(iotype)

Generiert ein dict() der Devices und IOs.

-
type
+
iotype
IO Typ inp/out
diff --git a/doc/proginit.html b/doc/proginit.html index 92782af..61d58df 100644 --- a/doc/proginit.html +++ b/doc/proginit.html @@ -12,7 +12,7 @@ Main functions of our program.

Global Attributes

- +
forked
globalconffile
logapp
logger
logplc
pargs
picontrolreset
rapcatalog
startdir
__author__
__copyright__
__license__
forked
globalconffile
logapp
logger
logplc
pargs
picontrolreset
rapcatalog
startdir

Classes

diff --git a/doc/revpipyload.html b/doc/revpipyload.html index e478cd8..cda4677 100644 --- a/doc/revpipyload.html +++ b/doc/revpipyload.html @@ -9,6 +9,8 @@ revpipyload

Revolution Pi Python PLC Loader.

+Webpage: https://revpimodio.org/revpipyplc/ +

Stellt das RevPiPyLoad Programm bereit. Dieses Programm lauft als Daemon auf dem Revolution Pi. Es stellt Funktionen bereit, die es ermoeglichen ein Python Programm zu starten und fuehrt dessen Ausgaben in eine Logdatei. Die Logdaten @@ -32,7 +34,7 @@ begrenzt werden!

Global Attributes

- +
pyloadversion
__author__
__copyright__
__license__
__version__

Classes

diff --git a/doc/revpipyload.shared.ipaclmanager.html b/doc/revpipyload.shared.ipaclmanager.html index 9fdebde..c9253e5 100644 --- a/doc/revpipyload.shared.ipaclmanager.html +++ b/doc/revpipyload.shared.ipaclmanager.html @@ -12,7 +12,7 @@ Verwaltet IP Adressen und deren ACLs.

Global Attributes

- +
None
__author__
__copyright__
__license__
__version__

Classes

diff --git a/doc/xrpcserver.html b/doc/xrpcserver.html index 393e72d..4364aa4 100644 --- a/doc/xrpcserver.html +++ b/doc/xrpcserver.html @@ -12,7 +12,7 @@ XML-RPC Server anpassungen fuer Absicherung.

Global Attributes

- +
None
__author__
__copyright__
__license__

Classes

diff --git a/eric-revpipyload.api b/eric-revpipyload.api index 354bb8c..d30697b 100644 --- a/eric-revpipyload.api +++ b/eric-revpipyload.api @@ -1,3 +1,6 @@ +helper.__author__?9 +helper.__copyright__?9 +helper.__license__?9 helper._setuprt?5(pid, evt_exit) helper._zeroprocimg?5() helper.refullmatch?4(regex, string) @@ -12,6 +15,9 @@ logsystem.PipeLogwriter.newlogfile?4() logsystem.PipeLogwriter.run?4() logsystem.PipeLogwriter.stop?4() logsystem.PipeLogwriter?1(logfilename) +logsystem.__author__?9 +logsystem.__copyright__?9 +logsystem.__license__?9 picontrolserver.RevPiSlave.check_connectedacl?4() picontrolserver.RevPiSlave.newlogfile?4() picontrolserver.RevPiSlave.run?4() @@ -20,6 +26,9 @@ picontrolserver.RevPiSlave?1(ipacl, port=55234) picontrolserver.RevPiSlaveDev.run?4() picontrolserver.RevPiSlaveDev.stop?4() picontrolserver.RevPiSlaveDev?1(devcon, acl) +picontrolserver.__author__?9 +picontrolserver.__copyright__?9 +picontrolserver.__license__?9 plcsystem.RevPiPlc.__get_autoreloaddelay?6() plcsystem.RevPiPlc.__set_autoreloaddelay?6(value) plcsystem.RevPiPlc._configureplw?5() @@ -30,14 +39,23 @@ plcsystem.RevPiPlc.newlogfile?4() plcsystem.RevPiPlc.run?4() plcsystem.RevPiPlc.stop?4() plcsystem.RevPiPlc?1(program, arguments, pversion) +plcsystem.__author__?9 +plcsystem.__copyright__?9 +plcsystem.__license__?9 procimgserver.ProcimgServer.devices?4() -procimgserver.ProcimgServer.ios?4(type) +procimgserver.ProcimgServer.ios?4(iotype) procimgserver.ProcimgServer.loadrevpimodio?4() procimgserver.ProcimgServer.setvalue?4(device, io, value) procimgserver.ProcimgServer.start?4() procimgserver.ProcimgServer.stop?4() procimgserver.ProcimgServer.values?4() procimgserver.ProcimgServer?1(xmlserver) +procimgserver.__author__?9 +procimgserver.__copyright__?9 +procimgserver.__license__?9 +proginit.__author__?9 +proginit.__copyright__?9 +proginit.__license__?9 proginit.cleanup?4() proginit.configure?4() proginit.forked?7 @@ -84,7 +102,13 @@ revpipyload.RevPiPyLoad.xml_reload?4() revpipyload.RevPiPyLoad.xml_setconfig?4(dc, loadnow=False) revpipyload.RevPiPyLoad.xml_setpictoryrsc?4(filebytes, reset=False) revpipyload.RevPiPyLoad?1() -revpipyload.pyloadversion?7 +revpipyload.__author__?9 +revpipyload.__copyright__?9 +revpipyload.__license__?9 +revpipyload.__version__?9 +revpipyload.shared.__author__?9 +revpipyload.shared.__copyright__?9 +revpipyload.shared.__license__?9 revpipyload.shared.ipaclmanager.IpAclManager.__get_acl?6() revpipyload.shared.ipaclmanager.IpAclManager.__get_filename?6() revpipyload.shared.ipaclmanager.IpAclManager.__get_regex_acl?6() @@ -98,6 +122,10 @@ revpipyload.shared.ipaclmanager.IpAclManager.loadaclfile?4(filename) revpipyload.shared.ipaclmanager.IpAclManager.regex_acl?7 revpipyload.shared.ipaclmanager.IpAclManager.writeaclfile?4(filename=None, aclname=None) revpipyload.shared.ipaclmanager.IpAclManager?1(minlevel, maxlevel, acl=None) +revpipyload.shared.ipaclmanager.__author__?9 +revpipyload.shared.ipaclmanager.__copyright__?9 +revpipyload.shared.ipaclmanager.__license__?9 +revpipyload.shared.ipaclmanager.__version__?9 revpipyload.shared.ipaclmanager.refullmatch?4(regex, string) xrpcserver.SaveXMLRPCRequestHandler.parse_request?4() xrpcserver.SaveXMLRPCServer._dispatch?5(method, params) @@ -106,3 +134,6 @@ xrpcserver.SaveXMLRPCServer.register_function?4(acl_level, function, name=None) xrpcserver.SaveXMLRPCServer.start?4() xrpcserver.SaveXMLRPCServer.stop?4() xrpcserver.SaveXMLRPCServer?1(addr, logRequests=True, allow_none=False, ipacl=None) +xrpcserver.__author__?9 +xrpcserver.__copyright__?9 +xrpcserver.__license__?9 diff --git a/revpipyload.e4p b/revpipyload.e4p index bd8ef63..097630e 100644 --- a/revpipyload.e4p +++ b/revpipyload.e4p @@ -1,7 +1,7 @@ - + en_US @@ -14,27 +14,27 @@ akira@narux.de - revpipyload/proginit.py - setup.py - revpipyload/revpipyload.py - revpipyload/procimgserver.py - revpipyload/logsystem.py - revpipyload/plcsystem.py - revpipyload/picontrolserver.py revpipyload/helper.py - revpipyload/xrpcserver.py - revpipyload/shared/ipaclmanager.py + revpipyload/logsystem.py + revpipyload/picontrolserver.py + revpipyload/plcsystem.py + revpipyload/procimgserver.py + revpipyload/proginit.py + revpipyload/revpipyload.py revpipyload/shared/__init__.py + revpipyload/shared/ipaclmanager.py + revpipyload/xrpcserver.py + setup.py - data MANIFEST.in - doc + data debian + doc eric-revpipyload.api stdeb.cfg @@ -141,9 +141,6 @@ - - - @@ -240,14 +237,6 @@ False - - sourceExtensions - - - - - - useRecursion @@ -267,6 +256,41 @@ + + BuiltinsChecker + + + + + chr + + + + unichr + + + + str + + + + unicode + + + + + + CopyrightAuthor + + + + + + CopyrightMinFileSize + + + 0 + DocstringType @@ -277,13 +301,13 @@ ExcludeFiles - demo/* + */demo/* ExcludeMessages - E123,E226,E24 + E123,E226,E24,C101 FixCodes @@ -297,6 +321,12 @@ False + + FutureChecker + + + + HangClosing @@ -309,6 +339,24 @@ + + LineComplexity + + + 15 + + + LineComplexityScore + + + 10 + + + MaxCodeComplexity + + + 10 + MaxLineLength @@ -333,6 +381,12 @@ False + + ValidEncodings + + + latin-1, utf-8 + diff --git a/revpipyload/helper.py b/revpipyload/helper.py index e40f4fd..915f546 100644 --- a/revpipyload/helper.py +++ b/revpipyload/helper.py @@ -1,11 +1,8 @@ # -*- coding: utf-8 -*- -# -# RevPiPyLoad -# -# Webpage: https://revpimodio.org/revpipyplc/ -# (c) Sven Sager, License: LGPLv3 -# """Helperfunktionen fuer das gesamte RevPiPyLoad-System.""" +__author__ = "Sven Sager" +__copyright__ = "Copyright (C) 2018 Sven Sager" +__license__ = "GPLv3" import os import proginit from re import match as rematch @@ -49,7 +46,7 @@ def _setuprt(pid, evt_exit): try: kpiddat = kpidps.communicate()[0] lst_kpids = kpiddat.split() - except: + except Exception: kpidps.kill() if proginit.logger is not None: proginit.logger.error( @@ -66,7 +63,7 @@ def _setuprt(pid, evt_exit): if not kpid.isdigit(): if proginit.logger is not None: proginit.logger.error( - "pid={} and prio={} are not valid - no rt active" + "pid={0} and prio={1} are not valid - no rt active" "".format(kpid, kprio) ) return None @@ -80,7 +77,7 @@ def _setuprt(pid, evt_exit): if kprio < 10: # Profile anpassen - ec = os.system("/usr/bin/env chrt -fp {} {}".format( + ec = os.system("/usr/bin/env chrt -fp {0} {1}".format( dict_change[ps_change], kpid )) if ec != 0: @@ -92,12 +89,12 @@ def _setuprt(pid, evt_exit): # SCHED_RR für pid setzen if proginit.logger is not None: - proginit.logger.info("set scheduler profile of pid {}".format(pid)) + proginit.logger.info("set scheduler profile of pid {0}".format(pid)) - ec = os.system("/usr/bin/env chrt -p 1 {}".format(pid)) + ec = os.system("/usr/bin/env chrt -p 1 {0}".format(pid)) if ec != 0 and proginit.logger is not None: proginit.logger.error( - "could not set scheduler profile of pid {}" + "could not set scheduler profile of pid {0}" "".format(pid) ) diff --git a/revpipyload/logsystem.py b/revpipyload/logsystem.py index 370b918..0e06131 100644 --- a/revpipyload/logsystem.py +++ b/revpipyload/logsystem.py @@ -1,11 +1,8 @@ # -*- coding: utf-8 -*- -# -# RevPiPyLoad -# -# Webpage: https://revpimodio.org/revpipyplc/ -# (c) Sven Sager, License: LGPLv3 -# """Modul fuer die Verwaltung der Logdateien.""" +__author__ = "Sven Sager" +__copyright__ = "Copyright (C) 2018 Sven Sager" +__license__ = "GPLv3" import os import proginit from threading import Event, Lock, Thread @@ -100,7 +97,7 @@ class PipeLogwriter(Thread): # Pipes öffnen self._fdr, self.fdw = os.pipe() - proginit.logger.debug("pipe fd read: {} / write: {}".format( + proginit.logger.debug("pipe fd read: {0} / write: {1}".format( self._fdr, self.fdw )) @@ -121,7 +118,7 @@ class PipeLogwriter(Thread): if os.access(dirname, os.R_OK | os.W_OK): logfile = open(self.logfile, "a") else: - raise RuntimeError("can not open logfile {}".format(self.logfile)) + raise RuntimeError("can not open logfile {0}".format(self.logfile)) proginit.logger.debug("leave PipeLogwriter._configurefh()") return logfile @@ -130,7 +127,7 @@ class PipeLogwriter(Thread): """Schreibt eine Zeile in die Logdatei oder stdout. @param message Logzeile zum Schreiben""" with self._lckfh: - self._fh.write("{}\n".format(message)) + self._fh.write("{0}\n".format(message)) self._fh.flush() def newlogfile(self): @@ -152,7 +149,7 @@ class PipeLogwriter(Thread): try: self._fh.write(line) self._fh.flush() - except: + except Exception: proginit.logger.exception("PipeLogwriter in write log line") finally: self._lckfh.release() @@ -178,7 +175,7 @@ class PipeLogwriter(Thread): # Letzten Log in Pipe schreiben zum befreien try: os.write(self.fdw, b"\n") - except: + except Exception: pass finally: self._lckfh.release() diff --git a/revpipyload/picontrolserver.py b/revpipyload/picontrolserver.py index 3fb8705..e30db0f 100644 --- a/revpipyload/picontrolserver.py +++ b/revpipyload/picontrolserver.py @@ -1,11 +1,8 @@ # -*- coding: utf-8 -*- -# -# RevPiPyLoad -# -# Webpage: https://revpimodio.org/revpipyplc/ -# (c) Sven Sager, License: LGPLv3 -# """Modul fuer die Verwaltung der PLC-Slave Funktionen.""" +__author__ = "Sven Sager" +__copyright__ = "Copyright (C) 2018 Sven Sager" +__license__ = "GPLv3" import proginit import socket from shared.ipaclmanager import IpAclManager @@ -52,14 +49,14 @@ class RevPiSlave(Thread): if level < 0: # Verbindung killen proginit.logger.warning( - "client {} not in acl - disconnect!".format(ip) + "client {0} not in acl - disconnect!".format(ip) ) dev.stop() elif level != dev._acl: # ACL Level anpassen proginit.logger.warning( - "change acl level from {} to {} on existing connection {}" - "".format(level, dev._acl, ip) + "change acl level from {0} to {1} on existing " + "connection {2}".format(level, dev._acl, ip) ) dev._acl = level @@ -76,7 +73,7 @@ class RevPiSlave(Thread): while not self._evt_exit.is_set(): try: self.so.bind(("", self._port)) - except: + except Exception: proginit.logger.warning("can not bind socket - retry") self._evt_exit.wait(1) else: @@ -91,7 +88,7 @@ class RevPiSlave(Thread): proginit.logger.info("accept new connection for revpinetio") try: tup_sock = self.so.accept() - except: + except Exception: if not self._evt_exit.is_set(): proginit.logger.exception("accept exception") continue @@ -101,7 +98,7 @@ class RevPiSlave(Thread): if aclstatus == -1: tup_sock[0].close() proginit.logger.warning( - "host ip '{}' does not match revpiacl - disconnect" + "host ip '{0}' does not match revpiacl - disconnect" "".format(tup_sock[1][0]) ) else: @@ -135,7 +132,7 @@ class RevPiSlave(Thread): if self.so is not None: try: self.so.shutdown(socket.SHUT_RDWR) - except: + except Exception: pass proginit.logger.debug("leave RevPiSlave.stop()") @@ -174,7 +171,7 @@ class RevPiSlaveDev(Thread): proginit.logger.debug("enter RevPiSlaveDev.run()") proginit.logger.info( - "got new connection from host {} with acl {}".format( + "got new connection from host {0} with acl {1}".format( self._addr, self._acl ) ) @@ -182,11 +179,11 @@ class RevPiSlaveDev(Thread): # Prozessabbild öffnen try: fh_proc = open(proginit.pargs.procimg, "r+b", 0) - except: + except Exception: fh_proc = None self._evt_exit.set() proginit.logger.error( - "can not open process image {}".format(proginit.pargs.procimg) + "can not open process image {0}".format(proginit.pargs.procimg) ) dirty = True @@ -197,14 +194,14 @@ class RevPiSlaveDev(Thread): # Meldung erhalten try: netcmd = self._devcon.recv(16) - except: + except Exception: break # Wenn Meldung ungültig ist aussteigen if netcmd[0:1] != b'\x01' or netcmd[-1:] != b'\x17': if netcmd != b'': proginit.logger.error( - "net cmd not valid {}".format(netcmd) + "net cmd not valid {0}".format(netcmd) ) break @@ -219,7 +216,7 @@ class RevPiSlaveDev(Thread): fh_proc.seek(position) try: self._devcon.sendall(fh_proc.read(length)) - except: + except Exception: proginit.logger.error("error while send read data") break @@ -235,7 +232,7 @@ class RevPiSlaveDev(Thread): # Empfange Datenblock zu schreiben nach Meldung try: block = self._devcon.recv(length) - except: + except Exception: proginit.logger.error("error while recv data to write") self._writeerror = True break @@ -267,7 +264,7 @@ class RevPiSlaveDev(Thread): try: timeoutms = int.from_bytes(netcmd[3:5], byteorder="little") - except: + except Exception: proginit.logger.error("can not convert timeout value") break @@ -306,7 +303,7 @@ class RevPiSlaveDev(Thread): # Record seperator character self._devcon.send(b'\x1e') proginit.logger.info( - "cleared dirty bytes on position {}" + "cleared dirty bytes on position {0}" "".format(position) ) @@ -321,7 +318,7 @@ class RevPiSlaveDev(Thread): if block == b'': break - except: + except Exception: proginit.logger.error("error while recv dirty bytes") break @@ -335,14 +332,14 @@ class RevPiSlaveDev(Thread): # Record seperator character self._devcon.send(b'\x1e') proginit.logger.info( - "got dirty bytes to write on error on position {}" + "got dirty bytes to write on error on position {0}" "".format(position) ) elif cmd == b'PI': # piCtory Konfiguration senden proginit.logger.debug( - "transfair pictory configuration: {}" + "transfair pictory configuration: {0}" "".format(proginit.pargs.configrsc) ) fh_pic = open(proginit.pargs.configrsc, "rb") @@ -374,7 +371,7 @@ class RevPiSlaveDev(Thread): comtime = default_timer() - ot if comtime > self._deadtime: proginit.logger.warning( - "runtime more than {} ms: {}!".format( + "runtime more than {0} ms: {1}!".format( int(self._deadtime * 1000), comtime ) ) @@ -393,7 +390,7 @@ class RevPiSlaveDev(Thread): self._devcon.close() self._devcon = None - proginit.logger.info("disconnected from {}".format(self._addr)) + proginit.logger.info("disconnected from {0}".format(self._addr)) proginit.logger.debug("leave RevPiSlaveDev.run()") def stop(self): diff --git a/revpipyload/plcsystem.py b/revpipyload/plcsystem.py index fadcf94..43fd6d9 100644 --- a/revpipyload/plcsystem.py +++ b/revpipyload/plcsystem.py @@ -1,11 +1,8 @@ # -*- coding: utf-8 -*- -# -# RevPiPyLoad -# -# Webpage: https://revpimodio.org/revpipyplc/ -# (c) Sven Sager, License: LGPLv3 -# """Modul fuer die Verwaltung der PLC Funktionen.""" +__author__ = "Sven Sager" +__copyright__ = "Copyright (C) 2018 Sven Sager" +__license__ = "GPLv3" import os import proginit import shlex @@ -81,7 +78,7 @@ class RevPiPlc(Thread): def _setuppopen(self): """Setzt UID und GID fuer das PLC Programm.""" proginit.logger.info( - "set uid {} and gid {} for plc program".format( + "set uid {0} and gid {1} for plc program".format( self.uid, self.gid) ) os.setgid(self.gid) @@ -91,7 +88,7 @@ class RevPiPlc(Thread): """Startet das PLC Programm. @param lst_proc Prozessliste @return subprocess""" - proginit.logger.debug("enter RevPiPlc._spopen({})".format(lst_proc)) + proginit.logger.debug("enter RevPiPlc._spopen({0})".format(lst_proc)) sp = subprocess.Popen( lst_proc, @@ -111,7 +108,7 @@ class RevPiPlc(Thread): if self._plw is not None: self._plw.newlogfile() self._plw.logline("-" * 55) - self._plw.logline("start new logfile: {}".format(asctime())) + self._plw.logline("start new logfile: {0}".format(asctime())) proginit.logger.debug("leave RevPiPlc.newlogfile()") @@ -122,20 +119,20 @@ class RevPiPlc(Thread): # LogWriter starten und Logausgaben schreiben if self._plw is not None: self._plw.logline("-" * 55) - self._plw.logline("plc: {} started: {}".format( + self._plw.logline("plc: {0} started: {1}".format( os.path.basename(self._program), asctime() )) self._plw.start() # Befehlstliste aufbauen - lst_proc = shlex.split("/usr/bin/env {} -u {} {}".format( + lst_proc = shlex.split("/usr/bin/env {0} -u {1} {2}".format( "python2" if self._pversion == 2 else "python3", self._program, self._arguments )) # Prozess erstellen - proginit.logger.info("start plc program {}".format(self._program)) + proginit.logger.info("start plc program {0}".format(self._program)) self._procplc = self._spopen(lst_proc) # RealTime Scheduler nutzen nach 5 Sekunden Programmvorlauf @@ -155,7 +152,7 @@ class RevPiPlc(Thread): if self.exitcode > 0: # PLC Python Programm abgestürzt proginit.logger.error( - "plc program crashed - exitcode: {}".format( + "plc program crashed - exitcode: {0}".format( self.exitcode ) ) @@ -198,7 +195,7 @@ class RevPiPlc(Thread): if self._plw is not None: self._plw.logline("-" * 55) - self._plw.logline("plc: {} stopped: {}".format( + self._plw.logline("plc: {0} stopped: {1}".format( os.path.basename(self._program), asctime() )) @@ -223,18 +220,18 @@ class RevPiPlc(Thread): # Prozess beenden count = 0 - proginit.logger.info("term plc program {}".format(self._program)) + proginit.logger.info("term plc program {0}".format(self._program)) self._procplc.terminate() while self._procplc.poll() is None and count < 10: count += 1 proginit.logger.info( - "wait term plc program {} seconds".format(count * 0.5) + "wait term plc program {0} seconds".format(count * 0.5) ) sleep(0.5) if self._procplc.poll() is None: proginit.logger.warning( - "can not term plc program {}".format(self._program) + "can not term plc program {0}".format(self._program) ) self._procplc.kill() proginit.logger.warning("killed plc program") diff --git a/revpipyload/procimgserver.py b/revpipyload/procimgserver.py index 1526771..e6d9a52 100644 --- a/revpipyload/procimgserver.py +++ b/revpipyload/procimgserver.py @@ -1,16 +1,13 @@ # -*- coding: utf-8 -*- -# -# RevPiPyLoad -# -# Webpage: https://revpimodio.org/revpipyplc/ -# (c) Sven Sager, License: LGPLv3 -# """Stellt Funktionen bereit um das Prozessabbild zu ueberwachen. Bei ausreichend Rechten koennen Ausgaenge auch gesetzt werden um einen IO-Check bei Inbetriebname durchzufuehren. """ +__author__ = "Sven Sager" +__copyright__ = "Copyright (C) 2018 Sven Sager" +__license__ = "GPLv3" import pickle import proginit import revpimodio2 @@ -59,18 +56,18 @@ class ProcimgServer(): (dev.position, dev.name) for dev in self.rpi.device ] - def ios(self, type): + def ios(self, iotype): """Generiert ein dict() der Devices und IOs. - @param type IO Typ inp/out + @param iotype IO Typ inp/out @return pickled dict()""" dict_ios = {} for dev in self.rpi.device: dict_ios[dev.position] = [] # IO Typen auswerten - if type == "inp": + if iotype == "inp": lst_io = dev.get_inputs() - elif type == "out": + elif iotype == "out": lst_io = dev.get_outputs() else: lst_io = [] @@ -98,7 +95,7 @@ class ProcimgServer(): configrsc=proginit.pargs.configrsc, procimg=proginit.pargs.procimg ) - except: + except Exception: self.rpi = None proginit.logger.error("piCtory configuration not loadable") return False diff --git a/revpipyload/proginit.py b/revpipyload/proginit.py index 9583afb..80b6e8a 100644 --- a/revpipyload/proginit.py +++ b/revpipyload/proginit.py @@ -1,11 +1,8 @@ # -*- coding: utf-8 -*- -# -# RevPiPyLoad -# -# Webpage: https://revpimodio.org/revpipyplc/ -# (c) Sven Sager, License: LGPLv3 -# """Main functions of our program.""" +__author__ = "Sven Sager" +__copyright__ = "Copyright (C) 2018 Sven Sager" +__license__ = "GPLv3" import logging import os import sys @@ -81,7 +78,7 @@ def configure(): # Prüfen ob daemon schon läuft if os.path.exists(pidfile): raise SystemError( - "program already running as daemon. check {}".format(pidfile) + "program already running as daemon. check {0}".format(pidfile) ) # Zum daemon machen @@ -94,17 +91,18 @@ def configure(): forked = True # piCtory Konfiguration prüfen + lst_rsc = ["/etc/revpi/config.rsc", "/opt/KUNBUS/config.rsc"] if pargs.configrsc is None: - lst_rsc = ["/etc/revpi/config.rsc", "/opt/KUNBUS/config.rsc"] for rscfile in lst_rsc: if os.access(rscfile, os.F_OK | os.R_OK): pargs.configrsc = rscfile break elif not os.access(pargs.configrsc, os.F_OK | os.R_OK): pargs.configrsc = None + if pargs.configrsc is None: raise RuntimeError( - "can not find known pictory configurations at {}" + "can not find known pictory configurations at {0}" "".format(", ".join(lst_rsc)) ) diff --git a/revpipyload/revpipyload.py b/revpipyload/revpipyload.py index 9010f9c..925ce7b 100755 --- a/revpipyload/revpipyload.py +++ b/revpipyload/revpipyload.py @@ -1,14 +1,9 @@ #!/usr/bin/python3 # -*- coding: utf-8 -*- -# -# RevPiPyLoad -# Version: see global var pyloadversion -# -# Webpage: https://revpimodio.org/revpipyplc/ -# (c) Sven Sager, License: LGPLv3 -# """Revolution Pi Python PLC Loader. +Webpage: https://revpimodio.org/revpipyplc/ + Stellt das RevPiPyLoad Programm bereit. Dieses Programm lauft als Daemon auf dem Revolution Pi. Es stellt Funktionen bereit, die es ermoeglichen ein Python Programm zu starten und fuehrt dessen Ausgaben in eine Logdatei. Die Logdaten @@ -30,6 +25,10 @@ Die Zugriffsmoeglichkeiten koennen ueber einen Konfigurationsparameter begrenzt werden! """ +__author__ = "Sven Sager" +__copyright__ = "Copyright (C) 2018 Sven Sager" +__license__ = "GPLv3" +__version__ = "0.6.7" import gzip import logsystem import picontrolserver @@ -50,8 +49,6 @@ from time import asctime from xmlrpc.client import Binary from xrpcserver import SaveXMLRPCServer -pyloadversion = "0.6.7" - class RevPiPyLoad(): @@ -112,9 +109,9 @@ class RevPiPyLoad(): return ( self.plcslave != - self.globalconfig["PLCSLAVE"].getboolean("plcslave", False) - or self.plcslavebindip != ip - or self.plcslaveport != port + self.globalconfig["PLCSLAVE"].getboolean("plcslave", False) or + self.plcslavebindip != ip or + self.plcslaveport != port ) def _check_mustrestart_plcprogram(self): @@ -127,18 +124,18 @@ class RevPiPyLoad(): else: return ( self.plcworkdir != - self.globalconfig["DEFAULT"].get("plcworkdir", ".") - or self.plcprogram != - self.globalconfig["DEFAULT"].get("plcprogram", "none.py") - or self.plcarguments != - self.globalconfig["DEFAULT"].get("plcarguments", "") - or self.plcuid != - self.globalconfig["DEFAULT"].getint("plcuid", 65534) - or self.plcgid != - self.globalconfig["DEFAULT"].getint("plcgid", 65534) - or self.pythonversion != - self.globalconfig["DEFAULT"].getint("pythonversion", 3) - or self.rtlevel != + self.globalconfig["DEFAULT"].get("plcworkdir", ".") or + self.plcprogram != + self.globalconfig["DEFAULT"].get("plcprogram", "none.py") or + self.plcarguments != + self.globalconfig["DEFAULT"].get("plcarguments", "") or + self.plcuid != + self.globalconfig["DEFAULT"].getint("plcuid", 65534) or + self.plcgid != + self.globalconfig["DEFAULT"].getint("plcgid", 65534) or + self.pythonversion != + self.globalconfig["DEFAULT"].getint("pythonversion", 3) or + self.rtlevel != self.globalconfig["DEFAULT"].getint("rtlevel", 0) ) @@ -151,7 +148,7 @@ class RevPiPyLoad(): # Konfigurationsdatei laden proginit.logger.info( - "loading config file: {}".format(proginit.globalconffile) + "loading config file: {0}".format(proginit.globalconffile) ) self.globalconfig.read(proginit.globalconffile) @@ -237,7 +234,7 @@ class RevPiPyLoad(): # Workdirectory wechseln if not os.access(self.plcworkdir, os.R_OK | os.W_OK | os.X_OK): raise ValueError( - "can not access plcworkdir '{}'".format(self.plcworkdir) + "can not access plcworkdir '{0}'".format(self.plcworkdir) ) os.chdir(self.plcworkdir) @@ -288,7 +285,7 @@ class RevPiPyLoad(): self.xsrv.register_multicall_functions() # Allgemeine Funktionen - self.xsrv.register_function(0, lambda: pyloadversion, "version") + self.xsrv.register_function(0, lambda: __version__, "version") self.xsrv.register_function(0, lambda acl: acl, "xmlmodus") # XML Modus 1 Nur Logs lesen und PLC Programm neu starten @@ -315,7 +312,7 @@ class RevPiPyLoad(): self.xml_ps = procimgserver.ProcimgServer(self.xsrv) self.xsrv.register_function(1, self.xml_psstart, "psstart") self.xsrv.register_function(1, self.xml_psstop, "psstop") - except: + except Exception: self.xml_ps = None proginit.logger.warning( "can not load revpimodio2 module. maybe its not installed " @@ -377,7 +374,7 @@ class RevPiPyLoad(): # Prüfen ob Programm existiert if not os.path.exists(os.path.join(self.plcworkdir, self.plcprogram)): - proginit.logger.error("plc file does not exists {}".format( + proginit.logger.error("plc file does not exists {0}".format( os.path.join(self.plcworkdir, self.plcprogram) )) return None @@ -431,7 +428,7 @@ class RevPiPyLoad(): # Logger neu konfigurieren proginit.configure() - proginit.logger.warning("start new logfile: {}".format(asctime())) + proginit.logger.warning("start new logfile: {0}".format(asctime())) # stdout für revpipyplc if self.plc is not None: @@ -473,7 +470,7 @@ class RevPiPyLoad(): fh_pack.write( proginit.pargs.configrsc, arcname="config.rsc" ) - except: + except Exception: filename = "" finally: fh_pack.close() @@ -485,7 +482,7 @@ class RevPiPyLoad(): fh_pack.add(".", arcname=os.path.basename(self.plcworkdir)) if pictory: fh_pack.add(proginit.pargs.configrsc, arcname="config.rsc") - except: + except Exception: filename = "" finally: fh_pack.close() @@ -772,7 +769,7 @@ class RevPiPyLoad(): proginit.logger.debug("xmlrpc call plcuploadclean") try: rmtree(".", ignore_errors=True) - except: + except Exception: return False return True @@ -821,7 +818,7 @@ class RevPiPyLoad(): localkey = key.replace(suffix, "") if not refullmatch(keys[sektion][key], str(dc[key])): proginit.logger.error( - "got wrong setting '{}' with value '{}'".format( + "got wrong setting '{0}' with value '{1}'".format( key, dc[key] ) ) @@ -837,7 +834,8 @@ class RevPiPyLoad(): with open(proginit.globalconffile, "w") as fh: self.globalconfig.write(fh) proginit.logger.info( - "got new config and wrote it to {}".format(proginit.globalconffile) + "got new config and wrote it to {0}" + "".format(proginit.globalconffile) ) # ACLs sofort übernehmen und schreiben @@ -846,32 +844,28 @@ class RevPiPyLoad(): self.plcslaveacl.acl = str_acl if not self.plcslaveacl.writeaclfile(aclname="PLC-SLAVE"): proginit.logger.error( - "can not write acl file '{}' for PLC-SLAVE".format( - self.plcslaveacl.filename - ) + "can not write acl file '{0}' for PLC-SLAVE" + "".format(self.plcslaveacl.filename) ) return False else: proginit.logger.info( - "wrote new acl file '{}' for PLC-SLAVE".format( - self.plcslaveacl.filename - ) + "wrote new acl file '{0}' for PLC-SLAVE" + "".format(self.plcslaveacl.filename) ) str_acl = dc.get("xmlrpcacl", None) if str_acl is not None and self.xmlrpcacl.acl != str_acl: self.xmlrpcacl.acl = str_acl if not self.xmlrpcacl.writeaclfile(aclname="XML-RPC"): proginit.logger.error( - "can not write acl file '{}' for XML-RPC".format( - self.xmlrpcacl.filename - ) + "can not write acl file '{0}' for XML-RPC" + "".format(self.xmlrpcacl.filename) ) return False else: proginit.logger.info( - "wrote new acl file '{}' for XML-RPC".format( - self.xmlrpcacl.filename - ) + "wrote new acl file '{0}' for XML-RPC" + "".format(self.xmlrpcacl.filename) ) # RevPiPyLoad neu konfigurieren @@ -899,7 +893,7 @@ class RevPiPyLoad(): # Datei als JSON laden try: jconfigrsc = jloads(filebytes.data.decode()) - except: + except Exception: return -1 # Elemente prüfen @@ -928,7 +922,7 @@ class RevPiPyLoad(): try: with open(proginit.pargs.configrsc, "wb") as fh: fh.write(filebytes.data) - except: + except Exception: return -3 else: if reset: diff --git a/revpipyload/shared/__init__.py b/revpipyload/shared/__init__.py index d059206..1caa366 100644 --- a/revpipyload/shared/__init__.py +++ b/revpipyload/shared/__init__.py @@ -1 +1,5 @@ +# -*- coding: utf-8 -*- """Shared modules.""" +__author__ = "Sven Sager" +__copyright__ = "Copyright (C) 2018 Sven Sager" +__license__ = "GPLv3" diff --git a/revpipyload/shared/ipaclmanager.py b/revpipyload/shared/ipaclmanager.py index 5bf9aea..2568ea8 100644 --- a/revpipyload/shared/ipaclmanager.py +++ b/revpipyload/shared/ipaclmanager.py @@ -1,11 +1,9 @@ # -*- coding: utf-8 -*- -# -# IpAclManager -# -# (c) Sven Sager, License: LGPLv3 -# Version 0.1.0 -# """Verwaltet IP Adressen und deren ACLs.""" +__author__ = "Sven Sager" +__copyright__ = "Copyright (C) 2018 Sven Sager" +__license__ = "GPLv3" +__version__ = "0.1.0" from os import access, R_OK, W_OK from re import match as rematch @@ -66,7 +64,7 @@ class IpAclManager(): return ACLs als """ str_acl = "" for aclip in sorted(self.__dict_acl): - str_acl += "{},{} ".format(aclip, self.__dict_acl[aclip]) + str_acl += "{0},{1} ".format(aclip, self.__dict_acl[aclip]) return str_acl.strip() def __get_filename(self): @@ -173,14 +171,14 @@ class IpAclManager(): if not access(filename, W_OK): return False - header = "# {}Access Control List (acl)\n" \ + header = "# {0}Access Control List (acl)\n" \ "# One entry per Line IPADRESS,LEVEL\n" \ "#\n".format("" if aclname is None else aclname + " ") with open(filename, "w") as fh: fh.write(header) for aclip in sorted(self.__dict_acl): - fh.write("{},{}\n".format(aclip, self.__dict_acl[aclip])) + fh.write("{0},{1}\n".format(aclip, self.__dict_acl[aclip])) return True diff --git a/revpipyload/xrpcserver.py b/revpipyload/xrpcserver.py index ae1f807..d318d68 100644 --- a/revpipyload/xrpcserver.py +++ b/revpipyload/xrpcserver.py @@ -1,11 +1,8 @@ # -*- coding: utf-8 -*- -# -# RevPiPyLoad -# -# Webpage: https://revpimodio.org/revpipyplc/ -# (c) Sven Sager, License: LGPLv3 -# """XML-RPC Server anpassungen fuer Absicherung.""" +__author__ = "Sven Sager" +__copyright__ = "Copyright (C) 2018 Sven Sager" +__license__ = "GPLv3" import proginit from shared.ipaclmanager import IpAclManager from concurrent import futures @@ -61,7 +58,7 @@ class SaveXMLRPCServer(SimpleXMLRPCServer): # ACL Mode abfragen (Gibt ACL Level als Parameter) if method == "xmlmodus": - params = (self.requestacl, ) + params = (self.requestacl,) return super()._dispatch(method, params) @@ -132,7 +129,7 @@ class SaveXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): return True else: self.send_error( - 401, "IP '{}' not allowed".format(self.client_address[0]) + 401, "IP '{0}' not allowed".format(self.client_address[0]) ) return False diff --git a/setup.py b/setup.py index 1d54a13..c9ae824 100644 --- a/setup.py +++ b/setup.py @@ -1,9 +1,9 @@ #! /usr/bin/env python3 -# -# (c) Sven Sager, License: LGPLv3 -# # -*- coding: utf-8 -*- """Setupscript fuer RevPiPyLoad.""" +__author__ = "Sven Sager" +__copyright__ = "Copyright (C) 2018 Sven Sager" +__license__ = "GPLv3" import distutils.command.install_egg_info from glob import glob from distutils.core import setup