From 2fedb130af0b23bbee3ce667d5d754eb1284ada4 Mon Sep 17 00:00:00 2001 From: NaruX Date: Thu, 2 Nov 2017 19:34:52 +0100 Subject: [PATCH] =?UTF-8?q?cycleloop=20s=C3=A4ubert=20das=20=5Fexit-Event?= =?UTF-8?q?=20.wait=20Parameterpr=C3=BCfung=20eingebaut=20Fehler=20im=20De?= =?UTF-8?q?vicehandling=20bei=20doppelten=20Namen=20behoben?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/revpimodio2.device.html | 5 ++++- revpimodio2.e4p | 4 ++-- revpimodio2/device.py | 32 ++++++++++++++++++++++---------- revpimodio2/io.py | 14 +++++++++++++- revpimodio2/modio.py | 5 +++-- 5 files changed, 44 insertions(+), 16 deletions(-) diff --git a/doc/revpimodio2.device.html b/doc/revpimodio2.device.html index 278215b..5ca0a6f 100644 --- a/doc/revpimodio2.device.html +++ b/doc/revpimodio2.device.html @@ -788,13 +788,16 @@ True, wenn Device vorhanden

DeviceList.__delattr__

-__delattr__(key) +__delattr__(key, delcomplete=True)

Entfernt angegebenes Device.

key
Device zum entfernen +
delcomplete
+
+Wenn True wird Device komplett entfernt

diff --git a/revpimodio2.e4p b/revpimodio2.e4p index 0d6bbb2..69e2cb4 100644 --- a/revpimodio2.e4p +++ b/revpimodio2.e4p @@ -1,7 +1,7 @@ - + en_US @@ -354,7 +354,7 @@ ExcludeFiles - */test/*,*/setup.py + */test/*,*/setup.py,*/test_unit.py diff --git a/revpimodio2/device.py b/revpimodio2/device.py index e039eec..11a0ea1 100644 --- a/revpimodio2/device.py +++ b/revpimodio2/device.py @@ -29,23 +29,35 @@ class DeviceList(object): else: return key in self.__dict_position.values() - def __delattr__(self, key): + def __delattr__(self, key, delcomplete=True): """Entfernt angegebenes Device. - @param key Device zum entfernen""" - dev_del = getattr(self, key) + @param key Device zum entfernen + @param delcomplete Wenn True wird Device komplett entfernt""" + if delcomplete: + # Device finden + if type(key) == int: + dev_del = self.__dict_position[key] + key = dev_del._name + else: + dev_del = getattr(self, key) - # Reinigungsjobs - dev_del.autorefresh(False) - for io in dev_del: - delattr(dev_del._modio.io, io._name) + # Reinigungsjobs + dev_del.autorefresh(False) + for io in dev_del: + delattr(dev_del._modio.io, io._name) - del self.__dict_position[dev_del._position] - object.__delattr__(self, key) + # Device aus dict löschen + del self.__dict_position[dev_del._position] + + if hasattr(self, key): + object.__delattr__(self, key) def __delitem__(self, key): """Entfernt Device an angegebener Position. @param key Deviceposition zum entfernen""" - self.__delattr__(self[key]._name) + if issubclass(type(key), Device): + key = key._position + self.__delattr__(key) def __getitem__(self, key): """Gibt angegebenes Device zurueck. diff --git a/revpimodio2/io.py b/revpimodio2/io.py index 833e9de..c7a6a0f 100644 --- a/revpimodio2/io.py +++ b/revpimodio2/io.py @@ -674,7 +674,19 @@ class IOBase(object): self._parentdevice._position, self._parentdevice._name ) ) - + if not (RISING <= edge <= BOTH): + raise AttributeError( + "parameter 'edge' must be revpimodio2.RISING, " + "revpimodio2.FALLING or revpimodio2.BOTH" + ) + if not (exitevent is None or type(exitevent) == Event): + raise AttributeError( + "parameter 'exitevent' must be " + ) + if type(timeout) != int or timeout < 0: + raise AttributeError( + "parameter 'timeout' must be and greater than 0" + ) if edge != BOTH and self._bitaddress < 0: raise AttributeError( "parameter 'edge' can be used with bit Inputs only" diff --git a/revpimodio2/modio.py b/revpimodio2/modio.py index 8b60ea4..8aba70e 100644 --- a/revpimodio2/modio.py +++ b/revpimodio2/modio.py @@ -172,7 +172,7 @@ class RevPiModIO(object): else: # Device-Type nicht gefunden warnings.warn( - "device type {} unknown", + "device type '{}' unknown".format(device["type"]), Warning ) dev_new = None @@ -193,7 +193,7 @@ class RevPiModIO(object): # Namenszugriff zerstören, wenn doppelte Namen vorhanden sind for errdev in err_names: - delattr(self.device, errdev) + self.device.__delattr__(errdev, False) warnings.warn( "equal device name in pictory configuration. can not " "build device to access by name. you can access all devices " @@ -364,6 +364,7 @@ class RevPiModIO(object): self._imgwriter.refresh = cycletime # Cycleloop starten + self._exit.clear() self._looprunning = True cycleinfo = helpermodule.Cycletools(self._imgwriter.refresh) ec = None