Fehler behoben bei Aufruf mit ungültigem configrsc Parameter

code style
This commit is contained in:
2018-08-12 18:40:58 +02:00
parent 4ff125b245
commit 58629a62a4
24 changed files with 261 additions and 196 deletions

View File

@@ -12,7 +12,7 @@ Helperfunktionen fuer das gesamte RevPiPyLoad-System.
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Global Attributes</h3> Global Attributes</h3>
<table> <table>
<tr><td>None</td></tr> <tr><td>__author__</td></tr><tr><td>__copyright__</td></tr><tr><td>__license__</td></tr>
</table> </table>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Classes</h3> Classes</h3>

View File

@@ -6,7 +6,9 @@
<body style="background-color:#FFFFFF;color:#000000"> <body style="background-color:#FFFFFF;color:#000000">
<h1 style="background-color:#FFFFFF;color:#0000FF"> <h1 style="background-color:#FFFFFF;color:#0000FF">
revpipyload.shared</h1> revpipyload.shared</h1>
<p>
Shared modules.
</p>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">

View File

@@ -13,7 +13,7 @@ Packages</h3>
<table> <table>
<tr> <tr>
<td><a style="color:#0000FF" href="index-revpipyload.shared.html">shared</a></td> <td><a style="color:#0000FF" href="index-revpipyload.shared.html">shared</a></td>
<td></td> <td>Shared modules.</td>
</tr> </tr>
</table> </table>

View File

@@ -12,7 +12,7 @@ Modul fuer die Verwaltung der Logdateien.
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Global Attributes</h3> Global Attributes</h3>
<table> <table>
<tr><td>None</td></tr> <tr><td>__author__</td></tr><tr><td>__copyright__</td></tr><tr><td>__license__</td></tr>
</table> </table>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Classes</h3> Classes</h3>

View File

@@ -12,7 +12,7 @@ Modul fuer die Verwaltung der PLC-Slave Funktionen.
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Global Attributes</h3> Global Attributes</h3>
<table> <table>
<tr><td>None</td></tr> <tr><td>__author__</td></tr><tr><td>__copyright__</td></tr><tr><td>__license__</td></tr>
</table> </table>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Classes</h3> Classes</h3>

View File

@@ -12,7 +12,7 @@ Modul fuer die Verwaltung der PLC Funktionen.
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Global Attributes</h3> Global Attributes</h3>
<table> <table>
<tr><td>None</td></tr> <tr><td>__author__</td></tr><tr><td>__copyright__</td></tr><tr><td>__license__</td></tr>
</table> </table>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Classes</h3> Classes</h3>

View File

@@ -15,7 +15,7 @@ IO-Check bei Inbetriebname durchzufuehren.
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Global Attributes</h3> Global Attributes</h3>
<table> <table>
<tr><td>None</td></tr> <tr><td>__author__</td></tr><tr><td>__copyright__</td></tr><tr><td>__license__</td></tr>
</table> </table>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Classes</h3> Classes</h3>
@@ -115,11 +115,11 @@ list() mit Tuple (pos, name)
</dl><a NAME="ProcimgServer.ios" ID="ProcimgServer.ios"></a> </dl><a NAME="ProcimgServer.ios" ID="ProcimgServer.ios"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
ProcimgServer.ios</h3> ProcimgServer.ios</h3>
<b>ios</b>(<i>type</i>) <b>ios</b>(<i>iotype</i>)
<p> <p>
Generiert ein dict() der Devices und IOs. Generiert ein dict() der Devices und IOs.
</p><dl> </p><dl>
<dt><i>type</i></dt> <dt><i>iotype</i></dt>
<dd> <dd>
IO Typ inp/out IO Typ inp/out
</dd> </dd>

View File

@@ -12,7 +12,7 @@ Main functions of our program.
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Global Attributes</h3> Global Attributes</h3>
<table> <table>
<tr><td>forked</td></tr><tr><td>globalconffile</td></tr><tr><td>logapp</td></tr><tr><td>logger</td></tr><tr><td>logplc</td></tr><tr><td>pargs</td></tr><tr><td>picontrolreset</td></tr><tr><td>rapcatalog</td></tr><tr><td>startdir</td></tr> <tr><td>__author__</td></tr><tr><td>__copyright__</td></tr><tr><td>__license__</td></tr><tr><td>forked</td></tr><tr><td>globalconffile</td></tr><tr><td>logapp</td></tr><tr><td>logger</td></tr><tr><td>logplc</td></tr><tr><td>pargs</td></tr><tr><td>picontrolreset</td></tr><tr><td>rapcatalog</td></tr><tr><td>startdir</td></tr>
</table> </table>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Classes</h3> Classes</h3>

View File

@@ -9,6 +9,8 @@ revpipyload</h1>
<p> <p>
Revolution Pi Python PLC Loader. Revolution Pi Python PLC Loader.
</p><p> </p><p>
Webpage: https://revpimodio.org/revpipyplc/
</p><p>
Stellt das RevPiPyLoad Programm bereit. Dieses Programm lauft als Daemon auf Stellt das RevPiPyLoad Programm bereit. Dieses Programm lauft als Daemon auf
dem Revolution Pi. Es stellt Funktionen bereit, die es ermoeglichen ein Python dem Revolution Pi. Es stellt Funktionen bereit, die es ermoeglichen ein Python
Programm zu starten und fuehrt dessen Ausgaben in eine Logdatei. Die Logdaten Programm zu starten und fuehrt dessen Ausgaben in eine Logdatei. Die Logdaten
@@ -32,7 +34,7 @@ begrenzt werden!
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Global Attributes</h3> Global Attributes</h3>
<table> <table>
<tr><td>pyloadversion</td></tr> <tr><td>__author__</td></tr><tr><td>__copyright__</td></tr><tr><td>__license__</td></tr><tr><td>__version__</td></tr>
</table> </table>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Classes</h3> Classes</h3>

View File

@@ -12,7 +12,7 @@ Verwaltet IP Adressen und deren ACLs.
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Global Attributes</h3> Global Attributes</h3>
<table> <table>
<tr><td>None</td></tr> <tr><td>__author__</td></tr><tr><td>__copyright__</td></tr><tr><td>__license__</td></tr><tr><td>__version__</td></tr>
</table> </table>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Classes</h3> Classes</h3>

View File

@@ -12,7 +12,7 @@ XML-RPC Server anpassungen fuer Absicherung.
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Global Attributes</h3> Global Attributes</h3>
<table> <table>
<tr><td>None</td></tr> <tr><td>__author__</td></tr><tr><td>__copyright__</td></tr><tr><td>__license__</td></tr>
</table> </table>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Classes</h3> Classes</h3>

View File

@@ -1,3 +1,6 @@
helper.__author__?9
helper.__copyright__?9
helper.__license__?9
helper._setuprt?5(pid, evt_exit) helper._setuprt?5(pid, evt_exit)
helper._zeroprocimg?5() helper._zeroprocimg?5()
helper.refullmatch?4(regex, string) helper.refullmatch?4(regex, string)
@@ -12,6 +15,9 @@ logsystem.PipeLogwriter.newlogfile?4()
logsystem.PipeLogwriter.run?4() logsystem.PipeLogwriter.run?4()
logsystem.PipeLogwriter.stop?4() logsystem.PipeLogwriter.stop?4()
logsystem.PipeLogwriter?1(logfilename) logsystem.PipeLogwriter?1(logfilename)
logsystem.__author__?9
logsystem.__copyright__?9
logsystem.__license__?9
picontrolserver.RevPiSlave.check_connectedacl?4() picontrolserver.RevPiSlave.check_connectedacl?4()
picontrolserver.RevPiSlave.newlogfile?4() picontrolserver.RevPiSlave.newlogfile?4()
picontrolserver.RevPiSlave.run?4() picontrolserver.RevPiSlave.run?4()
@@ -20,6 +26,9 @@ picontrolserver.RevPiSlave?1(ipacl, port=55234)
picontrolserver.RevPiSlaveDev.run?4() picontrolserver.RevPiSlaveDev.run?4()
picontrolserver.RevPiSlaveDev.stop?4() picontrolserver.RevPiSlaveDev.stop?4()
picontrolserver.RevPiSlaveDev?1(devcon, acl) picontrolserver.RevPiSlaveDev?1(devcon, acl)
picontrolserver.__author__?9
picontrolserver.__copyright__?9
picontrolserver.__license__?9
plcsystem.RevPiPlc.__get_autoreloaddelay?6() plcsystem.RevPiPlc.__get_autoreloaddelay?6()
plcsystem.RevPiPlc.__set_autoreloaddelay?6(value) plcsystem.RevPiPlc.__set_autoreloaddelay?6(value)
plcsystem.RevPiPlc._configureplw?5() plcsystem.RevPiPlc._configureplw?5()
@@ -30,14 +39,23 @@ plcsystem.RevPiPlc.newlogfile?4()
plcsystem.RevPiPlc.run?4() plcsystem.RevPiPlc.run?4()
plcsystem.RevPiPlc.stop?4() plcsystem.RevPiPlc.stop?4()
plcsystem.RevPiPlc?1(program, arguments, pversion) plcsystem.RevPiPlc?1(program, arguments, pversion)
plcsystem.__author__?9
plcsystem.__copyright__?9
plcsystem.__license__?9
procimgserver.ProcimgServer.devices?4() procimgserver.ProcimgServer.devices?4()
procimgserver.ProcimgServer.ios?4(type) procimgserver.ProcimgServer.ios?4(iotype)
procimgserver.ProcimgServer.loadrevpimodio?4() procimgserver.ProcimgServer.loadrevpimodio?4()
procimgserver.ProcimgServer.setvalue?4(device, io, value) procimgserver.ProcimgServer.setvalue?4(device, io, value)
procimgserver.ProcimgServer.start?4() procimgserver.ProcimgServer.start?4()
procimgserver.ProcimgServer.stop?4() procimgserver.ProcimgServer.stop?4()
procimgserver.ProcimgServer.values?4() procimgserver.ProcimgServer.values?4()
procimgserver.ProcimgServer?1(xmlserver) 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.cleanup?4()
proginit.configure?4() proginit.configure?4()
proginit.forked?7 proginit.forked?7
@@ -84,7 +102,13 @@ revpipyload.RevPiPyLoad.xml_reload?4()
revpipyload.RevPiPyLoad.xml_setconfig?4(dc, loadnow=False) revpipyload.RevPiPyLoad.xml_setconfig?4(dc, loadnow=False)
revpipyload.RevPiPyLoad.xml_setpictoryrsc?4(filebytes, reset=False) revpipyload.RevPiPyLoad.xml_setpictoryrsc?4(filebytes, reset=False)
revpipyload.RevPiPyLoad?1() 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_acl?6()
revpipyload.shared.ipaclmanager.IpAclManager.__get_filename?6() revpipyload.shared.ipaclmanager.IpAclManager.__get_filename?6()
revpipyload.shared.ipaclmanager.IpAclManager.__get_regex_acl?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.regex_acl?7
revpipyload.shared.ipaclmanager.IpAclManager.writeaclfile?4(filename=None, aclname=None) revpipyload.shared.ipaclmanager.IpAclManager.writeaclfile?4(filename=None, aclname=None)
revpipyload.shared.ipaclmanager.IpAclManager?1(minlevel, maxlevel, acl=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) revpipyload.shared.ipaclmanager.refullmatch?4(regex, string)
xrpcserver.SaveXMLRPCRequestHandler.parse_request?4() xrpcserver.SaveXMLRPCRequestHandler.parse_request?4()
xrpcserver.SaveXMLRPCServer._dispatch?5(method, params) 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.start?4()
xrpcserver.SaveXMLRPCServer.stop?4() xrpcserver.SaveXMLRPCServer.stop?4()
xrpcserver.SaveXMLRPCServer?1(addr, logRequests=True, allow_none=False, ipacl=None) xrpcserver.SaveXMLRPCServer?1(addr, logRequests=True, allow_none=False, ipacl=None)
xrpcserver.__author__?9
xrpcserver.__copyright__?9
xrpcserver.__license__?9

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Project SYSTEM "Project-5.1.dtd"> <!DOCTYPE Project SYSTEM "Project-5.1.dtd">
<!-- eric project file for project revpipyload --> <!-- eric project file for project revpipyload -->
<!-- Saved: 2018-06-27, 11:29:04 --> <!-- Saved: 2018-08-12, 18:40:18 -->
<!-- Copyright (C) 2018 Sven Sager, akira@narux.de --> <!-- Copyright (C) 2018 Sven Sager, akira@narux.de -->
<Project version="5.1"> <Project version="5.1">
<Language>en_US</Language> <Language>en_US</Language>
@@ -14,27 +14,27 @@
<Email>akira@narux.de</Email> <Email>akira@narux.de</Email>
<Eol index="1"/> <Eol index="1"/>
<Sources> <Sources>
<Source>revpipyload/proginit.py</Source>
<Source>setup.py</Source>
<Source>revpipyload/revpipyload.py</Source>
<Source>revpipyload/procimgserver.py</Source>
<Source>revpipyload/logsystem.py</Source>
<Source>revpipyload/plcsystem.py</Source>
<Source>revpipyload/picontrolserver.py</Source>
<Source>revpipyload/helper.py</Source> <Source>revpipyload/helper.py</Source>
<Source>revpipyload/xrpcserver.py</Source> <Source>revpipyload/logsystem.py</Source>
<Source>revpipyload/shared/ipaclmanager.py</Source> <Source>revpipyload/picontrolserver.py</Source>
<Source>revpipyload/plcsystem.py</Source>
<Source>revpipyload/procimgserver.py</Source>
<Source>revpipyload/proginit.py</Source>
<Source>revpipyload/revpipyload.py</Source>
<Source>revpipyload/shared/__init__.py</Source> <Source>revpipyload/shared/__init__.py</Source>
<Source>revpipyload/shared/ipaclmanager.py</Source>
<Source>revpipyload/xrpcserver.py</Source>
<Source>setup.py</Source>
</Sources> </Sources>
<Forms/> <Forms/>
<Translations/> <Translations/>
<Resources/> <Resources/>
<Interfaces/> <Interfaces/>
<Others> <Others>
<Other>data</Other>
<Other>MANIFEST.in</Other> <Other>MANIFEST.in</Other>
<Other>doc</Other> <Other>data</Other>
<Other>debian</Other> <Other>debian</Other>
<Other>doc</Other>
<Other>eric-revpipyload.api</Other> <Other>eric-revpipyload.api</Other>
<Other>stdeb.cfg</Other> <Other>stdeb.cfg</Other>
</Others> </Others>
@@ -141,9 +141,6 @@
</value> </value>
</dict> </dict>
</VcsOptions> </VcsOptions>
<VcsOtherData>
<dict/>
</VcsOtherData>
</Vcs> </Vcs>
<FiletypeAssociations> <FiletypeAssociations>
<FiletypeAssociation pattern="*.idl" type="INTERFACES"/> <FiletypeAssociation pattern="*.idl" type="INTERFACES"/>
@@ -240,14 +237,6 @@
<value> <value>
<bool>False</bool> <bool>False</bool>
</value> </value>
<key>
<string>sourceExtensions</string>
</key>
<value>
<list>
<string></string>
</list>
</value>
<key> <key>
<string>useRecursion</string> <string>useRecursion</string>
</key> </key>
@@ -267,6 +256,41 @@
</key> </key>
<value> <value>
<dict> <dict>
<key>
<string>BuiltinsChecker</string>
</key>
<value>
<dict>
<key>
<string>chr</string>
</key>
<value>
<list>
<string>unichr</string>
</list>
</value>
<key>
<string>str</string>
</key>
<value>
<list>
<string>unicode</string>
</list>
</value>
</dict>
</value>
<key>
<string>CopyrightAuthor</string>
</key>
<value>
<string></string>
</value>
<key>
<string>CopyrightMinFileSize</string>
</key>
<value>
<int>0</int>
</value>
<key> <key>
<string>DocstringType</string> <string>DocstringType</string>
</key> </key>
@@ -277,13 +301,13 @@
<string>ExcludeFiles</string> <string>ExcludeFiles</string>
</key> </key>
<value> <value>
<string>demo/*</string> <string>*/demo/*</string>
</value> </value>
<key> <key>
<string>ExcludeMessages</string> <string>ExcludeMessages</string>
</key> </key>
<value> <value>
<string>E123,E226,E24</string> <string>E123,E226,E24,C101</string>
</value> </value>
<key> <key>
<string>FixCodes</string> <string>FixCodes</string>
@@ -297,6 +321,12 @@
<value> <value>
<bool>False</bool> <bool>False</bool>
</value> </value>
<key>
<string>FutureChecker</string>
</key>
<value>
<string></string>
</value>
<key> <key>
<string>HangClosing</string> <string>HangClosing</string>
</key> </key>
@@ -309,6 +339,24 @@
<value> <value>
<string></string> <string></string>
</value> </value>
<key>
<string>LineComplexity</string>
</key>
<value>
<int>15</int>
</value>
<key>
<string>LineComplexityScore</string>
</key>
<value>
<int>10</int>
</value>
<key>
<string>MaxCodeComplexity</string>
</key>
<value>
<int>10</int>
</value>
<key> <key>
<string>MaxLineLength</string> <string>MaxLineLength</string>
</key> </key>
@@ -333,6 +381,12 @@
<value> <value>
<bool>False</bool> <bool>False</bool>
</value> </value>
<key>
<string>ValidEncodings</string>
</key>
<value>
<string>latin-1, utf-8</string>
</value>
</dict> </dict>
</value> </value>
</dict> </dict>

View File

@@ -1,11 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
#
# RevPiPyLoad
#
# Webpage: https://revpimodio.org/revpipyplc/
# (c) Sven Sager, License: LGPLv3
#
"""Helperfunktionen fuer das gesamte RevPiPyLoad-System.""" """Helperfunktionen fuer das gesamte RevPiPyLoad-System."""
__author__ = "Sven Sager"
__copyright__ = "Copyright (C) 2018 Sven Sager"
__license__ = "GPLv3"
import os import os
import proginit import proginit
from re import match as rematch from re import match as rematch
@@ -49,7 +46,7 @@ def _setuprt(pid, evt_exit):
try: try:
kpiddat = kpidps.communicate()[0] kpiddat = kpidps.communicate()[0]
lst_kpids = kpiddat.split() lst_kpids = kpiddat.split()
except: except Exception:
kpidps.kill() kpidps.kill()
if proginit.logger is not None: if proginit.logger is not None:
proginit.logger.error( proginit.logger.error(
@@ -66,7 +63,7 @@ def _setuprt(pid, evt_exit):
if not kpid.isdigit(): if not kpid.isdigit():
if proginit.logger is not None: if proginit.logger is not None:
proginit.logger.error( 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) "".format(kpid, kprio)
) )
return None return None
@@ -80,7 +77,7 @@ def _setuprt(pid, evt_exit):
if kprio < 10: if kprio < 10:
# Profile anpassen # 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 dict_change[ps_change], kpid
)) ))
if ec != 0: if ec != 0:
@@ -92,12 +89,12 @@ def _setuprt(pid, evt_exit):
# SCHED_RR für pid setzen # SCHED_RR für pid setzen
if proginit.logger is not None: 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: if ec != 0 and proginit.logger is not None:
proginit.logger.error( proginit.logger.error(
"could not set scheduler profile of pid {}" "could not set scheduler profile of pid {0}"
"".format(pid) "".format(pid)
) )

View File

@@ -1,11 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
#
# RevPiPyLoad
#
# Webpage: https://revpimodio.org/revpipyplc/
# (c) Sven Sager, License: LGPLv3
#
"""Modul fuer die Verwaltung der Logdateien.""" """Modul fuer die Verwaltung der Logdateien."""
__author__ = "Sven Sager"
__copyright__ = "Copyright (C) 2018 Sven Sager"
__license__ = "GPLv3"
import os import os
import proginit import proginit
from threading import Event, Lock, Thread from threading import Event, Lock, Thread
@@ -100,7 +97,7 @@ class PipeLogwriter(Thread):
# Pipes öffnen # Pipes öffnen
self._fdr, self.fdw = os.pipe() 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 self._fdr, self.fdw
)) ))
@@ -121,7 +118,7 @@ class PipeLogwriter(Thread):
if os.access(dirname, os.R_OK | os.W_OK): if os.access(dirname, os.R_OK | os.W_OK):
logfile = open(self.logfile, "a") logfile = open(self.logfile, "a")
else: 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()") proginit.logger.debug("leave PipeLogwriter._configurefh()")
return logfile return logfile
@@ -130,7 +127,7 @@ class PipeLogwriter(Thread):
"""Schreibt eine Zeile in die Logdatei oder stdout. """Schreibt eine Zeile in die Logdatei oder stdout.
@param message Logzeile zum Schreiben""" @param message Logzeile zum Schreiben"""
with self._lckfh: with self._lckfh:
self._fh.write("{}\n".format(message)) self._fh.write("{0}\n".format(message))
self._fh.flush() self._fh.flush()
def newlogfile(self): def newlogfile(self):
@@ -152,7 +149,7 @@ class PipeLogwriter(Thread):
try: try:
self._fh.write(line) self._fh.write(line)
self._fh.flush() self._fh.flush()
except: except Exception:
proginit.logger.exception("PipeLogwriter in write log line") proginit.logger.exception("PipeLogwriter in write log line")
finally: finally:
self._lckfh.release() self._lckfh.release()
@@ -178,7 +175,7 @@ class PipeLogwriter(Thread):
# Letzten Log in Pipe schreiben zum befreien # Letzten Log in Pipe schreiben zum befreien
try: try:
os.write(self.fdw, b"\n") os.write(self.fdw, b"\n")
except: except Exception:
pass pass
finally: finally:
self._lckfh.release() self._lckfh.release()

View File

@@ -1,11 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
#
# RevPiPyLoad
#
# Webpage: https://revpimodio.org/revpipyplc/
# (c) Sven Sager, License: LGPLv3
#
"""Modul fuer die Verwaltung der PLC-Slave Funktionen.""" """Modul fuer die Verwaltung der PLC-Slave Funktionen."""
__author__ = "Sven Sager"
__copyright__ = "Copyright (C) 2018 Sven Sager"
__license__ = "GPLv3"
import proginit import proginit
import socket import socket
from shared.ipaclmanager import IpAclManager from shared.ipaclmanager import IpAclManager
@@ -52,14 +49,14 @@ class RevPiSlave(Thread):
if level < 0: if level < 0:
# Verbindung killen # Verbindung killen
proginit.logger.warning( proginit.logger.warning(
"client {} not in acl - disconnect!".format(ip) "client {0} not in acl - disconnect!".format(ip)
) )
dev.stop() dev.stop()
elif level != dev._acl: elif level != dev._acl:
# ACL Level anpassen # ACL Level anpassen
proginit.logger.warning( proginit.logger.warning(
"change acl level from {} to {} on existing connection {}" "change acl level from {0} to {1} on existing "
"".format(level, dev._acl, ip) "connection {2}".format(level, dev._acl, ip)
) )
dev._acl = level dev._acl = level
@@ -76,7 +73,7 @@ class RevPiSlave(Thread):
while not self._evt_exit.is_set(): while not self._evt_exit.is_set():
try: try:
self.so.bind(("", self._port)) self.so.bind(("", self._port))
except: except Exception:
proginit.logger.warning("can not bind socket - retry") proginit.logger.warning("can not bind socket - retry")
self._evt_exit.wait(1) self._evt_exit.wait(1)
else: else:
@@ -91,7 +88,7 @@ class RevPiSlave(Thread):
proginit.logger.info("accept new connection for revpinetio") proginit.logger.info("accept new connection for revpinetio")
try: try:
tup_sock = self.so.accept() tup_sock = self.so.accept()
except: except Exception:
if not self._evt_exit.is_set(): if not self._evt_exit.is_set():
proginit.logger.exception("accept exception") proginit.logger.exception("accept exception")
continue continue
@@ -101,7 +98,7 @@ class RevPiSlave(Thread):
if aclstatus == -1: if aclstatus == -1:
tup_sock[0].close() tup_sock[0].close()
proginit.logger.warning( proginit.logger.warning(
"host ip '{}' does not match revpiacl - disconnect" "host ip '{0}' does not match revpiacl - disconnect"
"".format(tup_sock[1][0]) "".format(tup_sock[1][0])
) )
else: else:
@@ -135,7 +132,7 @@ class RevPiSlave(Thread):
if self.so is not None: if self.so is not None:
try: try:
self.so.shutdown(socket.SHUT_RDWR) self.so.shutdown(socket.SHUT_RDWR)
except: except Exception:
pass pass
proginit.logger.debug("leave RevPiSlave.stop()") proginit.logger.debug("leave RevPiSlave.stop()")
@@ -174,7 +171,7 @@ class RevPiSlaveDev(Thread):
proginit.logger.debug("enter RevPiSlaveDev.run()") proginit.logger.debug("enter RevPiSlaveDev.run()")
proginit.logger.info( 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 self._addr, self._acl
) )
) )
@@ -182,11 +179,11 @@ class RevPiSlaveDev(Thread):
# Prozessabbild öffnen # Prozessabbild öffnen
try: try:
fh_proc = open(proginit.pargs.procimg, "r+b", 0) fh_proc = open(proginit.pargs.procimg, "r+b", 0)
except: except Exception:
fh_proc = None fh_proc = None
self._evt_exit.set() self._evt_exit.set()
proginit.logger.error( proginit.logger.error(
"can not open process image {}".format(proginit.pargs.procimg) "can not open process image {0}".format(proginit.pargs.procimg)
) )
dirty = True dirty = True
@@ -197,14 +194,14 @@ class RevPiSlaveDev(Thread):
# Meldung erhalten # Meldung erhalten
try: try:
netcmd = self._devcon.recv(16) netcmd = self._devcon.recv(16)
except: except Exception:
break break
# Wenn Meldung ungültig ist aussteigen # Wenn Meldung ungültig ist aussteigen
if netcmd[0:1] != b'\x01' or netcmd[-1:] != b'\x17': if netcmd[0:1] != b'\x01' or netcmd[-1:] != b'\x17':
if netcmd != b'': if netcmd != b'':
proginit.logger.error( proginit.logger.error(
"net cmd not valid {}".format(netcmd) "net cmd not valid {0}".format(netcmd)
) )
break break
@@ -219,7 +216,7 @@ class RevPiSlaveDev(Thread):
fh_proc.seek(position) fh_proc.seek(position)
try: try:
self._devcon.sendall(fh_proc.read(length)) self._devcon.sendall(fh_proc.read(length))
except: except Exception:
proginit.logger.error("error while send read data") proginit.logger.error("error while send read data")
break break
@@ -235,7 +232,7 @@ class RevPiSlaveDev(Thread):
# Empfange Datenblock zu schreiben nach Meldung # Empfange Datenblock zu schreiben nach Meldung
try: try:
block = self._devcon.recv(length) block = self._devcon.recv(length)
except: except Exception:
proginit.logger.error("error while recv data to write") proginit.logger.error("error while recv data to write")
self._writeerror = True self._writeerror = True
break break
@@ -267,7 +264,7 @@ class RevPiSlaveDev(Thread):
try: try:
timeoutms = int.from_bytes(netcmd[3:5], byteorder="little") timeoutms = int.from_bytes(netcmd[3:5], byteorder="little")
except: except Exception:
proginit.logger.error("can not convert timeout value") proginit.logger.error("can not convert timeout value")
break break
@@ -306,7 +303,7 @@ class RevPiSlaveDev(Thread):
# Record seperator character # Record seperator character
self._devcon.send(b'\x1e') self._devcon.send(b'\x1e')
proginit.logger.info( proginit.logger.info(
"cleared dirty bytes on position {}" "cleared dirty bytes on position {0}"
"".format(position) "".format(position)
) )
@@ -321,7 +318,7 @@ class RevPiSlaveDev(Thread):
if block == b'': if block == b'':
break break
except: except Exception:
proginit.logger.error("error while recv dirty bytes") proginit.logger.error("error while recv dirty bytes")
break break
@@ -335,14 +332,14 @@ class RevPiSlaveDev(Thread):
# Record seperator character # Record seperator character
self._devcon.send(b'\x1e') self._devcon.send(b'\x1e')
proginit.logger.info( proginit.logger.info(
"got dirty bytes to write on error on position {}" "got dirty bytes to write on error on position {0}"
"".format(position) "".format(position)
) )
elif cmd == b'PI': elif cmd == b'PI':
# piCtory Konfiguration senden # piCtory Konfiguration senden
proginit.logger.debug( proginit.logger.debug(
"transfair pictory configuration: {}" "transfair pictory configuration: {0}"
"".format(proginit.pargs.configrsc) "".format(proginit.pargs.configrsc)
) )
fh_pic = open(proginit.pargs.configrsc, "rb") fh_pic = open(proginit.pargs.configrsc, "rb")
@@ -374,7 +371,7 @@ class RevPiSlaveDev(Thread):
comtime = default_timer() - ot comtime = default_timer() - ot
if comtime > self._deadtime: if comtime > self._deadtime:
proginit.logger.warning( proginit.logger.warning(
"runtime more than {} ms: {}!".format( "runtime more than {0} ms: {1}!".format(
int(self._deadtime * 1000), comtime int(self._deadtime * 1000), comtime
) )
) )
@@ -393,7 +390,7 @@ class RevPiSlaveDev(Thread):
self._devcon.close() self._devcon.close()
self._devcon = None 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()") proginit.logger.debug("leave RevPiSlaveDev.run()")
def stop(self): def stop(self):

View File

@@ -1,11 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
#
# RevPiPyLoad
#
# Webpage: https://revpimodio.org/revpipyplc/
# (c) Sven Sager, License: LGPLv3
#
"""Modul fuer die Verwaltung der PLC Funktionen.""" """Modul fuer die Verwaltung der PLC Funktionen."""
__author__ = "Sven Sager"
__copyright__ = "Copyright (C) 2018 Sven Sager"
__license__ = "GPLv3"
import os import os
import proginit import proginit
import shlex import shlex
@@ -81,7 +78,7 @@ class RevPiPlc(Thread):
def _setuppopen(self): def _setuppopen(self):
"""Setzt UID und GID fuer das PLC Programm.""" """Setzt UID und GID fuer das PLC Programm."""
proginit.logger.info( 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) self.uid, self.gid)
) )
os.setgid(self.gid) os.setgid(self.gid)
@@ -91,7 +88,7 @@ class RevPiPlc(Thread):
"""Startet das PLC Programm. """Startet das PLC Programm.
@param lst_proc Prozessliste @param lst_proc Prozessliste
@return subprocess""" @return subprocess"""
proginit.logger.debug("enter RevPiPlc._spopen({})".format(lst_proc)) proginit.logger.debug("enter RevPiPlc._spopen({0})".format(lst_proc))
sp = subprocess.Popen( sp = subprocess.Popen(
lst_proc, lst_proc,
@@ -111,7 +108,7 @@ class RevPiPlc(Thread):
if self._plw is not None: if self._plw is not None:
self._plw.newlogfile() self._plw.newlogfile()
self._plw.logline("-" * 55) 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()") proginit.logger.debug("leave RevPiPlc.newlogfile()")
@@ -122,20 +119,20 @@ class RevPiPlc(Thread):
# LogWriter starten und Logausgaben schreiben # LogWriter starten und Logausgaben schreiben
if self._plw is not None: if self._plw is not None:
self._plw.logline("-" * 55) self._plw.logline("-" * 55)
self._plw.logline("plc: {} started: {}".format( self._plw.logline("plc: {0} started: {1}".format(
os.path.basename(self._program), asctime() os.path.basename(self._program), asctime()
)) ))
self._plw.start() self._plw.start()
# Befehlstliste aufbauen # 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", "python2" if self._pversion == 2 else "python3",
self._program, self._program,
self._arguments self._arguments
)) ))
# Prozess erstellen # 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) self._procplc = self._spopen(lst_proc)
# RealTime Scheduler nutzen nach 5 Sekunden Programmvorlauf # RealTime Scheduler nutzen nach 5 Sekunden Programmvorlauf
@@ -155,7 +152,7 @@ class RevPiPlc(Thread):
if self.exitcode > 0: if self.exitcode > 0:
# PLC Python Programm abgestürzt # PLC Python Programm abgestürzt
proginit.logger.error( proginit.logger.error(
"plc program crashed - exitcode: {}".format( "plc program crashed - exitcode: {0}".format(
self.exitcode self.exitcode
) )
) )
@@ -198,7 +195,7 @@ class RevPiPlc(Thread):
if self._plw is not None: if self._plw is not None:
self._plw.logline("-" * 55) self._plw.logline("-" * 55)
self._plw.logline("plc: {} stopped: {}".format( self._plw.logline("plc: {0} stopped: {1}".format(
os.path.basename(self._program), asctime() os.path.basename(self._program), asctime()
)) ))
@@ -223,18 +220,18 @@ class RevPiPlc(Thread):
# Prozess beenden # Prozess beenden
count = 0 count = 0
proginit.logger.info("term plc program {}".format(self._program)) proginit.logger.info("term plc program {0}".format(self._program))
self._procplc.terminate() self._procplc.terminate()
while self._procplc.poll() is None and count < 10: while self._procplc.poll() is None and count < 10:
count += 1 count += 1
proginit.logger.info( 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) sleep(0.5)
if self._procplc.poll() is None: if self._procplc.poll() is None:
proginit.logger.warning( proginit.logger.warning(
"can not term plc program {}".format(self._program) "can not term plc program {0}".format(self._program)
) )
self._procplc.kill() self._procplc.kill()
proginit.logger.warning("killed plc program") proginit.logger.warning("killed plc program")

View File

@@ -1,16 +1,13 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
#
# RevPiPyLoad
#
# Webpage: https://revpimodio.org/revpipyplc/
# (c) Sven Sager, License: LGPLv3
#
"""Stellt Funktionen bereit um das Prozessabbild zu ueberwachen. """Stellt Funktionen bereit um das Prozessabbild zu ueberwachen.
Bei ausreichend Rechten koennen Ausgaenge auch gesetzt werden um einen Bei ausreichend Rechten koennen Ausgaenge auch gesetzt werden um einen
IO-Check bei Inbetriebname durchzufuehren. IO-Check bei Inbetriebname durchzufuehren.
""" """
__author__ = "Sven Sager"
__copyright__ = "Copyright (C) 2018 Sven Sager"
__license__ = "GPLv3"
import pickle import pickle
import proginit import proginit
import revpimodio2 import revpimodio2
@@ -59,18 +56,18 @@ class ProcimgServer():
(dev.position, dev.name) for dev in self.rpi.device (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. """Generiert ein dict() der Devices und IOs.
@param type IO Typ inp/out @param iotype IO Typ inp/out
@return pickled dict()""" @return pickled dict()"""
dict_ios = {} dict_ios = {}
for dev in self.rpi.device: for dev in self.rpi.device:
dict_ios[dev.position] = [] dict_ios[dev.position] = []
# IO Typen auswerten # IO Typen auswerten
if type == "inp": if iotype == "inp":
lst_io = dev.get_inputs() lst_io = dev.get_inputs()
elif type == "out": elif iotype == "out":
lst_io = dev.get_outputs() lst_io = dev.get_outputs()
else: else:
lst_io = [] lst_io = []
@@ -98,7 +95,7 @@ class ProcimgServer():
configrsc=proginit.pargs.configrsc, configrsc=proginit.pargs.configrsc,
procimg=proginit.pargs.procimg procimg=proginit.pargs.procimg
) )
except: except Exception:
self.rpi = None self.rpi = None
proginit.logger.error("piCtory configuration not loadable") proginit.logger.error("piCtory configuration not loadable")
return False return False

View File

@@ -1,11 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
#
# RevPiPyLoad
#
# Webpage: https://revpimodio.org/revpipyplc/
# (c) Sven Sager, License: LGPLv3
#
"""Main functions of our program.""" """Main functions of our program."""
__author__ = "Sven Sager"
__copyright__ = "Copyright (C) 2018 Sven Sager"
__license__ = "GPLv3"
import logging import logging
import os import os
import sys import sys
@@ -81,7 +78,7 @@ def configure():
# Prüfen ob daemon schon läuft # Prüfen ob daemon schon läuft
if os.path.exists(pidfile): if os.path.exists(pidfile):
raise SystemError( raise SystemError(
"program already running as daemon. check {}".format(pidfile) "program already running as daemon. check {0}".format(pidfile)
) )
# Zum daemon machen # Zum daemon machen
@@ -94,17 +91,18 @@ def configure():
forked = True forked = True
# piCtory Konfiguration prüfen # piCtory Konfiguration prüfen
lst_rsc = ["/etc/revpi/config.rsc", "/opt/KUNBUS/config.rsc"]
if pargs.configrsc is None: if pargs.configrsc is None:
lst_rsc = ["/etc/revpi/config.rsc", "/opt/KUNBUS/config.rsc"]
for rscfile in lst_rsc: for rscfile in lst_rsc:
if os.access(rscfile, os.F_OK | os.R_OK): if os.access(rscfile, os.F_OK | os.R_OK):
pargs.configrsc = rscfile pargs.configrsc = rscfile
break break
elif not os.access(pargs.configrsc, os.F_OK | os.R_OK): elif not os.access(pargs.configrsc, os.F_OK | os.R_OK):
pargs.configrsc = None pargs.configrsc = None
if pargs.configrsc is None: if pargs.configrsc is None:
raise RuntimeError( raise RuntimeError(
"can not find known pictory configurations at {}" "can not find known pictory configurations at {0}"
"".format(", ".join(lst_rsc)) "".format(", ".join(lst_rsc))
) )

View File

@@ -1,14 +1,9 @@
#!/usr/bin/python3 #!/usr/bin/python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
#
# RevPiPyLoad
# Version: see global var pyloadversion
#
# Webpage: https://revpimodio.org/revpipyplc/
# (c) Sven Sager, License: LGPLv3
#
"""Revolution Pi Python PLC Loader. """Revolution Pi Python PLC Loader.
Webpage: https://revpimodio.org/revpipyplc/
Stellt das RevPiPyLoad Programm bereit. Dieses Programm lauft als Daemon auf Stellt das RevPiPyLoad Programm bereit. Dieses Programm lauft als Daemon auf
dem Revolution Pi. Es stellt Funktionen bereit, die es ermoeglichen ein Python dem Revolution Pi. Es stellt Funktionen bereit, die es ermoeglichen ein Python
Programm zu starten und fuehrt dessen Ausgaben in eine Logdatei. Die Logdaten Programm zu starten und fuehrt dessen Ausgaben in eine Logdatei. Die Logdaten
@@ -30,6 +25,10 @@ Die Zugriffsmoeglichkeiten koennen ueber einen Konfigurationsparameter
begrenzt werden! begrenzt werden!
""" """
__author__ = "Sven Sager"
__copyright__ = "Copyright (C) 2018 Sven Sager"
__license__ = "GPLv3"
__version__ = "0.6.7"
import gzip import gzip
import logsystem import logsystem
import picontrolserver import picontrolserver
@@ -50,8 +49,6 @@ from time import asctime
from xmlrpc.client import Binary from xmlrpc.client import Binary
from xrpcserver import SaveXMLRPCServer from xrpcserver import SaveXMLRPCServer
pyloadversion = "0.6.7"
class RevPiPyLoad(): class RevPiPyLoad():
@@ -112,9 +109,9 @@ class RevPiPyLoad():
return ( return (
self.plcslave != self.plcslave !=
self.globalconfig["PLCSLAVE"].getboolean("plcslave", False) self.globalconfig["PLCSLAVE"].getboolean("plcslave", False) or
or self.plcslavebindip != ip self.plcslavebindip != ip or
or self.plcslaveport != port self.plcslaveport != port
) )
def _check_mustrestart_plcprogram(self): def _check_mustrestart_plcprogram(self):
@@ -127,18 +124,18 @@ class RevPiPyLoad():
else: else:
return ( return (
self.plcworkdir != self.plcworkdir !=
self.globalconfig["DEFAULT"].get("plcworkdir", ".") self.globalconfig["DEFAULT"].get("plcworkdir", ".") or
or self.plcprogram != self.plcprogram !=
self.globalconfig["DEFAULT"].get("plcprogram", "none.py") self.globalconfig["DEFAULT"].get("plcprogram", "none.py") or
or self.plcarguments != self.plcarguments !=
self.globalconfig["DEFAULT"].get("plcarguments", "") self.globalconfig["DEFAULT"].get("plcarguments", "") or
or self.plcuid != self.plcuid !=
self.globalconfig["DEFAULT"].getint("plcuid", 65534) self.globalconfig["DEFAULT"].getint("plcuid", 65534) or
or self.plcgid != self.plcgid !=
self.globalconfig["DEFAULT"].getint("plcgid", 65534) self.globalconfig["DEFAULT"].getint("plcgid", 65534) or
or self.pythonversion != self.pythonversion !=
self.globalconfig["DEFAULT"].getint("pythonversion", 3) self.globalconfig["DEFAULT"].getint("pythonversion", 3) or
or self.rtlevel != self.rtlevel !=
self.globalconfig["DEFAULT"].getint("rtlevel", 0) self.globalconfig["DEFAULT"].getint("rtlevel", 0)
) )
@@ -151,7 +148,7 @@ class RevPiPyLoad():
# Konfigurationsdatei laden # Konfigurationsdatei laden
proginit.logger.info( proginit.logger.info(
"loading config file: {}".format(proginit.globalconffile) "loading config file: {0}".format(proginit.globalconffile)
) )
self.globalconfig.read(proginit.globalconffile) self.globalconfig.read(proginit.globalconffile)
@@ -237,7 +234,7 @@ class RevPiPyLoad():
# Workdirectory wechseln # Workdirectory wechseln
if not os.access(self.plcworkdir, os.R_OK | os.W_OK | os.X_OK): if not os.access(self.plcworkdir, os.R_OK | os.W_OK | os.X_OK):
raise ValueError( raise ValueError(
"can not access plcworkdir '{}'".format(self.plcworkdir) "can not access plcworkdir '{0}'".format(self.plcworkdir)
) )
os.chdir(self.plcworkdir) os.chdir(self.plcworkdir)
@@ -288,7 +285,7 @@ class RevPiPyLoad():
self.xsrv.register_multicall_functions() self.xsrv.register_multicall_functions()
# Allgemeine Funktionen # 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") self.xsrv.register_function(0, lambda acl: acl, "xmlmodus")
# XML Modus 1 Nur Logs lesen und PLC Programm neu starten # 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.xml_ps = procimgserver.ProcimgServer(self.xsrv)
self.xsrv.register_function(1, self.xml_psstart, "psstart") self.xsrv.register_function(1, self.xml_psstart, "psstart")
self.xsrv.register_function(1, self.xml_psstop, "psstop") self.xsrv.register_function(1, self.xml_psstop, "psstop")
except: except Exception:
self.xml_ps = None self.xml_ps = None
proginit.logger.warning( proginit.logger.warning(
"can not load revpimodio2 module. maybe its not installed " "can not load revpimodio2 module. maybe its not installed "
@@ -377,7 +374,7 @@ class RevPiPyLoad():
# Prüfen ob Programm existiert # Prüfen ob Programm existiert
if not os.path.exists(os.path.join(self.plcworkdir, self.plcprogram)): 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) os.path.join(self.plcworkdir, self.plcprogram)
)) ))
return None return None
@@ -431,7 +428,7 @@ class RevPiPyLoad():
# Logger neu konfigurieren # Logger neu konfigurieren
proginit.configure() proginit.configure()
proginit.logger.warning("start new logfile: {}".format(asctime())) proginit.logger.warning("start new logfile: {0}".format(asctime()))
# stdout für revpipyplc # stdout für revpipyplc
if self.plc is not None: if self.plc is not None:
@@ -473,7 +470,7 @@ class RevPiPyLoad():
fh_pack.write( fh_pack.write(
proginit.pargs.configrsc, arcname="config.rsc" proginit.pargs.configrsc, arcname="config.rsc"
) )
except: except Exception:
filename = "" filename = ""
finally: finally:
fh_pack.close() fh_pack.close()
@@ -485,7 +482,7 @@ class RevPiPyLoad():
fh_pack.add(".", arcname=os.path.basename(self.plcworkdir)) fh_pack.add(".", arcname=os.path.basename(self.plcworkdir))
if pictory: if pictory:
fh_pack.add(proginit.pargs.configrsc, arcname="config.rsc") fh_pack.add(proginit.pargs.configrsc, arcname="config.rsc")
except: except Exception:
filename = "" filename = ""
finally: finally:
fh_pack.close() fh_pack.close()
@@ -772,7 +769,7 @@ class RevPiPyLoad():
proginit.logger.debug("xmlrpc call plcuploadclean") proginit.logger.debug("xmlrpc call plcuploadclean")
try: try:
rmtree(".", ignore_errors=True) rmtree(".", ignore_errors=True)
except: except Exception:
return False return False
return True return True
@@ -821,7 +818,7 @@ class RevPiPyLoad():
localkey = key.replace(suffix, "") localkey = key.replace(suffix, "")
if not refullmatch(keys[sektion][key], str(dc[key])): if not refullmatch(keys[sektion][key], str(dc[key])):
proginit.logger.error( proginit.logger.error(
"got wrong setting '{}' with value '{}'".format( "got wrong setting '{0}' with value '{1}'".format(
key, dc[key] key, dc[key]
) )
) )
@@ -837,7 +834,8 @@ class RevPiPyLoad():
with open(proginit.globalconffile, "w") as fh: with open(proginit.globalconffile, "w") as fh:
self.globalconfig.write(fh) self.globalconfig.write(fh)
proginit.logger.info( 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 # ACLs sofort übernehmen und schreiben
@@ -846,32 +844,28 @@ class RevPiPyLoad():
self.plcslaveacl.acl = str_acl self.plcslaveacl.acl = str_acl
if not self.plcslaveacl.writeaclfile(aclname="PLC-SLAVE"): if not self.plcslaveacl.writeaclfile(aclname="PLC-SLAVE"):
proginit.logger.error( proginit.logger.error(
"can not write acl file '{}' for PLC-SLAVE".format( "can not write acl file '{0}' for PLC-SLAVE"
self.plcslaveacl.filename "".format(self.plcslaveacl.filename)
)
) )
return False return False
else: else:
proginit.logger.info( proginit.logger.info(
"wrote new acl file '{}' for PLC-SLAVE".format( "wrote new acl file '{0}' for PLC-SLAVE"
self.plcslaveacl.filename "".format(self.plcslaveacl.filename)
)
) )
str_acl = dc.get("xmlrpcacl", None) str_acl = dc.get("xmlrpcacl", None)
if str_acl is not None and self.xmlrpcacl.acl != str_acl: if str_acl is not None and self.xmlrpcacl.acl != str_acl:
self.xmlrpcacl.acl = str_acl self.xmlrpcacl.acl = str_acl
if not self.xmlrpcacl.writeaclfile(aclname="XML-RPC"): if not self.xmlrpcacl.writeaclfile(aclname="XML-RPC"):
proginit.logger.error( proginit.logger.error(
"can not write acl file '{}' for XML-RPC".format( "can not write acl file '{0}' for XML-RPC"
self.xmlrpcacl.filename "".format(self.xmlrpcacl.filename)
)
) )
return False return False
else: else:
proginit.logger.info( proginit.logger.info(
"wrote new acl file '{}' for XML-RPC".format( "wrote new acl file '{0}' for XML-RPC"
self.xmlrpcacl.filename "".format(self.xmlrpcacl.filename)
)
) )
# RevPiPyLoad neu konfigurieren # RevPiPyLoad neu konfigurieren
@@ -899,7 +893,7 @@ class RevPiPyLoad():
# Datei als JSON laden # Datei als JSON laden
try: try:
jconfigrsc = jloads(filebytes.data.decode()) jconfigrsc = jloads(filebytes.data.decode())
except: except Exception:
return -1 return -1
# Elemente prüfen # Elemente prüfen
@@ -928,7 +922,7 @@ class RevPiPyLoad():
try: try:
with open(proginit.pargs.configrsc, "wb") as fh: with open(proginit.pargs.configrsc, "wb") as fh:
fh.write(filebytes.data) fh.write(filebytes.data)
except: except Exception:
return -3 return -3
else: else:
if reset: if reset:

View File

@@ -1 +1,5 @@
# -*- coding: utf-8 -*-
"""Shared modules.""" """Shared modules."""
__author__ = "Sven Sager"
__copyright__ = "Copyright (C) 2018 Sven Sager"
__license__ = "GPLv3"

View File

@@ -1,11 +1,9 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
#
# IpAclManager
#
# (c) Sven Sager, License: LGPLv3
# Version 0.1.0
#
"""Verwaltet IP Adressen und deren ACLs.""" """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 os import access, R_OK, W_OK
from re import match as rematch from re import match as rematch
@@ -66,7 +64,7 @@ class IpAclManager():
return ACLs als <class 'str'>""" return ACLs als <class 'str'>"""
str_acl = "" str_acl = ""
for aclip in sorted(self.__dict_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() return str_acl.strip()
def __get_filename(self): def __get_filename(self):
@@ -173,14 +171,14 @@ class IpAclManager():
if not access(filename, W_OK): if not access(filename, W_OK):
return False return False
header = "# {}Access Control List (acl)\n" \ header = "# {0}Access Control List (acl)\n" \
"# One entry per Line IPADRESS,LEVEL\n" \ "# One entry per Line IPADRESS,LEVEL\n" \
"#\n".format("" if aclname is None else aclname + " ") "#\n".format("" if aclname is None else aclname + " ")
with open(filename, "w") as fh: with open(filename, "w") as fh:
fh.write(header) fh.write(header)
for aclip in sorted(self.__dict_acl): 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 return True

View File

@@ -1,11 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
#
# RevPiPyLoad
#
# Webpage: https://revpimodio.org/revpipyplc/
# (c) Sven Sager, License: LGPLv3
#
"""XML-RPC Server anpassungen fuer Absicherung.""" """XML-RPC Server anpassungen fuer Absicherung."""
__author__ = "Sven Sager"
__copyright__ = "Copyright (C) 2018 Sven Sager"
__license__ = "GPLv3"
import proginit import proginit
from shared.ipaclmanager import IpAclManager from shared.ipaclmanager import IpAclManager
from concurrent import futures from concurrent import futures
@@ -61,7 +58,7 @@ class SaveXMLRPCServer(SimpleXMLRPCServer):
# ACL Mode abfragen (Gibt ACL Level als Parameter) # ACL Mode abfragen (Gibt ACL Level als Parameter)
if method == "xmlmodus": if method == "xmlmodus":
params = (self.requestacl, ) params = (self.requestacl,)
return super()._dispatch(method, params) return super()._dispatch(method, params)
@@ -132,7 +129,7 @@ class SaveXMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
return True return True
else: else:
self.send_error( self.send_error(
401, "IP '{}' not allowed".format(self.client_address[0]) 401, "IP '{0}' not allowed".format(self.client_address[0])
) )
return False return False

View File

@@ -1,9 +1,9 @@
#! /usr/bin/env python3 #! /usr/bin/env python3
#
# (c) Sven Sager, License: LGPLv3
#
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
"""Setupscript fuer RevPiPyLoad.""" """Setupscript fuer RevPiPyLoad."""
__author__ = "Sven Sager"
__copyright__ = "Copyright (C) 2018 Sven Sager"
__license__ = "GPLv3"
import distutils.command.install_egg_info import distutils.command.install_egg_info
from glob import glob from glob import glob
from distutils.core import setup from distutils.core import setup