From 2463eb019da7a441fd9aa40c7e9219b0c863c396 Mon Sep 17 00:00:00 2001 From: NaruX Date: Wed, 1 May 2019 12:25:45 +0200 Subject: [PATCH] =?UTF-8?q?Parameterpr=C3=BCfung=20f=C3=BCr=20Instantiieru?= =?UTF-8?q?ng=20eingef=C3=BChrt=20Debug-Parameter=20f=C3=BCr=20alle=20Vere?= =?UTF-8?q?rbungen=20=C3=BCbernommen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/revpimodio2.__init__.html | 21 +++++++++++++++++++++ doc/revpimodio2.modio.html | 7 +++++-- doc/revpimodio2.netio.html | 9 ++++++--- eric-revpimodio2.api | 11 ++++++----- revpimodio2/__init__.py | 22 ++++++++++++++++++++++ revpimodio2/helper.py | 2 +- revpimodio2/modio.py | 32 +++++++++++++++++++++++--------- revpimodio2/netio.py | 14 ++++++++------ 8 files changed, 92 insertions(+), 26 deletions(-) diff --git a/doc/revpimodio2.__init__.html b/doc/revpimodio2.__init__.html index 2bb8f2b..6441740 100644 --- a/doc/revpimodio2.__init__.html +++ b/doc/revpimodio2.__init__.html @@ -33,11 +33,32 @@ Classes Functions + + +
acheckCheck type of given arguments.
consttostr Gibt fuer Konstanten zurueck.


+ +

acheck

+acheck(check_type, **kwargs) +

+Check type of given arguments. +

+ Use the argument name as keyword and the argument itself as value. +

+
check_type
+
+Type to check +
kwargs
+
+Arguments to check +
+
+
Up
+

consttostr

consttostr(value) diff --git a/doc/revpimodio2.modio.html b/doc/revpimodio2.modio.html index 2b6dead..fcca538 100644 --- a/doc/revpimodio2.modio.html +++ b/doc/revpimodio2.modio.html @@ -180,6 +180,9 @@ Abweichender Pfad zur piCtory Konfigurationsdatei
simulator
Laedt das Modul als Simulator und vertauscht IOs +
debug
+
+Gibt bei allen Fehlern komplette Meldungen aus

@@ -592,7 +595,7 @@ Static Methods

RevPiModIODriver (Constructor)

-RevPiModIODriver(virtdev, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None) +RevPiModIODriver(virtdev, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, debug=False)

Instantiiert die Grundfunktionen.

@@ -652,7 +655,7 @@ Static Methods

RevPiModIOSelected (Constructor)

-RevPiModIOSelected(deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False) +RevPiModIOSelected(deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False, debug=False)

Instantiiert nur fuer angegebene Devices die Grundfunktionen.

diff --git a/doc/revpimodio2.netio.html b/doc/revpimodio2.netio.html index 9a11e8f..eb4a16a 100644 --- a/doc/revpimodio2.netio.html +++ b/doc/revpimodio2.netio.html @@ -423,7 +423,7 @@ Static Methods

RevPiNetIO (Constructor)

-RevPiNetIO(address, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False) +RevPiNetIO(address, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False, debug=False)

Instantiiert die Grundfunktionen.

@@ -442,6 +442,9 @@ Aktuell gesetzte Outputs vom Prozessabbild einlesen
simulator
Laedt das Modul als Simulator und vertauscht IOs +
debug
+
+Gibt bei allen Fehlern komplette Meldungen aus

@@ -533,7 +536,7 @@ Static Methods

RevPiNetIODriver (Constructor)

-RevPiNetIODriver(address, virtdev, autorefresh=False, monitoring=False, syncoutputs=True) +RevPiNetIODriver(address, virtdev, autorefresh=False, monitoring=False, syncoutputs=True, debug=False)

Instantiiert die Grundfunktionen.

@@ -596,7 +599,7 @@ Static Methods

RevPiNetIOSelected (Constructor)

-RevPiNetIOSelected(address, deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False) +RevPiNetIOSelected(address, deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False, debug=False)

Instantiiert nur fuer angegebene Devices die Grundfunktionen.

diff --git a/eric-revpimodio2.api b/eric-revpimodio2.api index 346f981..98bbf09 100644 --- a/eric-revpimodio2.api +++ b/eric-revpimodio2.api @@ -7,6 +7,7 @@ revpimodio2.OFF?7 revpimodio2.OUT?7 revpimodio2.RED?7 revpimodio2.RISING?7 +revpimodio2.acheck?4(check_type, **kwargs) revpimodio2.app.App?1(app) revpimodio2.consttostr?4(value) revpimodio2.device.Connect.A3?7 @@ -173,8 +174,8 @@ revpimodio2.modio.RevPiModIO.simulator?7 revpimodio2.modio.RevPiModIO.syncoutputs?4(device=None) revpimodio2.modio.RevPiModIO.writeprocimg?4(device=None) revpimodio2.modio.RevPiModIO?1(autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False, debug=False) -revpimodio2.modio.RevPiModIODriver?1(virtdev, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None) -revpimodio2.modio.RevPiModIOSelected?1(deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False) +revpimodio2.modio.RevPiModIODriver?1(virtdev, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, debug=False) +revpimodio2.modio.RevPiModIOSelected?1(deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False, debug=False) revpimodio2.netio.NetFH._connect?5() revpimodio2.netio.NetFH._direct_send?5(send_bytes, recv_count) revpimodio2.netio.NetFH.clear_dirtybytes?4(position=None) @@ -201,9 +202,9 @@ revpimodio2.netio.RevPiNetIO.disconnect?4() revpimodio2.netio.RevPiNetIO.get_jconfigrsc?4() revpimodio2.netio.RevPiNetIO.net_cleardefaultvalues?4(device=None) revpimodio2.netio.RevPiNetIO.net_setdefaultvalues?4(device=None) -revpimodio2.netio.RevPiNetIO?1(address, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False) -revpimodio2.netio.RevPiNetIODriver?1(address, virtdev, autorefresh=False, monitoring=False, syncoutputs=True) -revpimodio2.netio.RevPiNetIOSelected?1(address, deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False) +revpimodio2.netio.RevPiNetIO?1(address, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False, debug=False) +revpimodio2.netio.RevPiNetIODriver?1(address, virtdev, autorefresh=False, monitoring=False, syncoutputs=True, debug=False) +revpimodio2.netio.RevPiNetIOSelected?1(address, deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, simulator=False, debug=False) revpimodio2.netio._sysdeldirty?8 revpimodio2.netio._sysexit?8 revpimodio2.netio._sysflush?8 diff --git a/revpimodio2/__init__.py b/revpimodio2/__init__.py index 946bf38..8feb06f 100644 --- a/revpimodio2/__init__.py +++ b/revpimodio2/__init__.py @@ -38,6 +38,28 @@ MEM = 302 warnings.simplefilter(action="always") +def acheck(check_type, **kwargs): + """Check type of given arguments. + + Use the argument name as keyword and the argument itself as value. + + @param check_type Type to check + @param kwargs Arguments to check + + """ + for var_name in kwargs: + none_okay = var_name.endswith("_noneok") + + if not (isinstance(kwargs[var_name], check_type) or + none_okay and kwargs[var_name] is None): + + msg = "Argument '{0}' must be {1}{2}".format( + var_name.rstrip("_noneok"), str(check_type), + " or " if none_okay else "" + ) + raise TypeError(msg) + + def consttostr(value): """Gibt fuer Konstanten zurueck. diff --git a/revpimodio2/helper.py b/revpimodio2/helper.py index e6fd9e1..37af3cb 100644 --- a/revpimodio2/helper.py +++ b/revpimodio2/helper.py @@ -446,7 +446,7 @@ class ProcimgWriter(Thread): RuntimeWarning ) if self._modio._debug and e is not None: - warnings.warn(str(e)) + warnings.warn(str(e), RuntimeWarning) def get_maxioerrors(self): """Gibt die Anzahl der maximal erlaubten Fehler zurueck. diff --git a/revpimodio2/modio.py b/revpimodio2/modio.py index 023e5a2..55f589a 100644 --- a/revpimodio2/modio.py +++ b/revpimodio2/modio.py @@ -9,6 +9,7 @@ from json import load as jload from multiprocessing import cpu_count from os import access, F_OK, R_OK from queue import Empty +from revpimodio2 import acheck from signal import signal, SIG_DFL, SIGINT, SIGTERM from threading import Thread, Event, Lock from timeit import default_timer @@ -45,8 +46,18 @@ class RevPiModIO(object): @param procimg Abweichender Pfad zum Prozessabbild @param configrsc Abweichender Pfad zur piCtory Konfigurationsdatei @param simulator Laedt das Modul als Simulator und vertauscht IOs + @param debug Gibt bei allen Fehlern komplette Meldungen aus """ + # Parameterprüfung + acheck( + bool, autorefresh=autorefresh, monitoring=monitoring, + syncoutputs=syncoutputs, simulator=simulator, debug=debug + ) + acheck( + str, procimg_noneok=procimg, configrsc_noneok=configrsc + ) + self._autorefresh = autorefresh self._configrsc = configrsc self._monitoring = monitoring @@ -336,7 +347,7 @@ class RevPiModIO(object): RuntimeWarning ) if self._debug and e is not None: - warnings.warn(str(e)) + warnings.warn(str(e), RuntimeWarning) def _set_cycletime(self, milliseconds): """Setzt Aktualisierungsrate der Prozessabbild-Synchronisierung. @@ -819,7 +830,7 @@ class RevPiModIO(object): ) mylist = [dev] - e = None + global_ex = None workokay = True for dev in mylist: if not dev._selfupdate: @@ -831,7 +842,7 @@ class RevPiModIO(object): self._myfh.seek(dev._slc_outoff.start) self._myfh.write(dev._ba_devdata[dev._slc_out]) except IOError as e: - e = e + global_ex = e workokay = False finally: self._myfh_lck.release() @@ -842,11 +853,11 @@ class RevPiModIO(object): try: self._myfh.flush() except IOError as e: - e = e + global_ex = e workokay = False if not workokay: - self._gotioerror("writeprocimg", e) + self._gotioerror("writeprocimg", global_ex) return workokay @@ -875,7 +886,8 @@ class RevPiModIOSelected(RevPiModIO): def __init__( self, deviceselection, autorefresh=False, monitoring=False, - syncoutputs=True, procimg=None, configrsc=None, simulator=False): + syncoutputs=True, procimg=None, configrsc=None, + simulator=False, debug=False): """Instantiiert nur fuer angegebene Devices die Grundfunktionen. Der Parameter deviceselection kann eine einzelne @@ -887,7 +899,8 @@ class RevPiModIOSelected(RevPiModIO): """ super().__init__( - autorefresh, monitoring, syncoutputs, procimg, configrsc, simulator + autorefresh, monitoring, syncoutputs, procimg, configrsc, + simulator, debug ) # Device liste erstellen @@ -941,7 +954,7 @@ class RevPiModIODriver(RevPiModIOSelected): def __init__( self, virtdev, autorefresh=False, monitoring=False, - syncoutputs=True, procimg=None, configrsc=None): + syncoutputs=True, procimg=None, configrsc=None, debug=False): """Instantiiert die Grundfunktionen. Parameter 'monitoring' und 'simulator' stehen hier nicht zur @@ -953,7 +966,8 @@ class RevPiModIODriver(RevPiModIOSelected): """ # Parent mit monitoring=False und simulator=True laden super().__init__( - virtdev, autorefresh, False, syncoutputs, procimg, configrsc, True + virtdev, autorefresh, False, syncoutputs, procimg, configrsc, + True, debug ) diff --git a/revpimodio2/netio.py b/revpimodio2/netio.py index 04cdd2b..7ac2dc2 100644 --- a/revpimodio2/netio.py +++ b/revpimodio2/netio.py @@ -489,7 +489,7 @@ class RevPiNetIO(_RevPiModIO): def __init__( self, address, autorefresh=False, monitoring=False, - syncoutputs=True, simulator=False): + syncoutputs=True, simulator=False, debug=False): """Instantiiert die Grundfunktionen. @param address: IP-Adresse / (IP, Port) @@ -497,6 +497,7 @@ class RevPiNetIO(_RevPiModIO): @param monitoring In- und Outputs werden gelesen, niemals geschrieben @param syncoutputs Aktuell gesetzte Outputs vom Prozessabbild einlesen @param simulator Laedt das Modul als Simulator und vertauscht IOs + @param debug Gibt bei allen Fehlern komplette Meldungen aus """ check_ip = compile( @@ -544,7 +545,8 @@ class RevPiNetIO(_RevPiModIO): syncoutputs, "{0}:{1}".format(*self._address), None, - simulator + simulator, + debug ) # Netzwerkfilehandler anlegen @@ -655,7 +657,7 @@ class RevPiNetIOSelected(RevPiNetIO): def __init__( self, address, deviceselection, autorefresh=False, - monitoring=False, syncoutputs=True, simulator=False): + monitoring=False, syncoutputs=True, simulator=False, debug=False): """Instantiiert nur fuer angegebene Devices die Grundfunktionen. Der Parameter deviceselection kann eine einzelne @@ -668,7 +670,7 @@ class RevPiNetIOSelected(RevPiNetIO): """ super().__init__( - address, autorefresh, monitoring, syncoutputs, simulator + address, autorefresh, monitoring, syncoutputs, simulator, debug ) # Device liste erstellen @@ -722,7 +724,7 @@ class RevPiNetIODriver(RevPiNetIOSelected): def __init__( self, address, virtdev, autorefresh=False, monitoring=False, - syncoutputs=True): + syncoutputs=True, debug=False): """Instantiiert die Grundfunktionen. Parameter 'monitoring' und 'simulator' stehen hier nicht zur @@ -735,5 +737,5 @@ class RevPiNetIODriver(RevPiNetIOSelected): """ # Parent mit monitoring=False und simulator=True laden super().__init__( - address, virtdev, autorefresh, False, syncoutputs, True + address, virtdev, autorefresh, False, syncoutputs, True, debug )