Fonction de filtre en cascade
Hello,
Alors voilà je cherche à faire une fonction qui filtre des trames suivant certains critères, j'ai une zone de texte dans laquelle je rentre mes filtres (un peu a la manière de IpTable) par exemple :
- DB_WAVEFORMS:Filter , EVT_VALUE_CHANGE:Allow
J'aimerais que ça marche en cascade c'est à dire si je reçoit une trame qui contient DB_WAVEFORMS et aussi EVT_VALUE_CHANGE, qu'il m'affiche la trame, mais si je reçoit juste DB_WAVEFORMS,ça filtre.
Donc voila, je bloque au niveau de la "cascade".
Celle-ci doit être dans l'ordre du des mes filtres c'est a dire si je reçoit un DB_WAVEFORMS qui contient un EVT_VALUE_CHANGE dans cette config, je ne l'affiche pas:
- EVT_VALUE_CHANGE:Allow, DB_WAVEFORMS:Filter
Sachant que mes filtres sont stocké dans un dictionnaire
Voila ma fonction de filtre ( sans la cascade):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| def __is_value_allowed_dict(self,key):
try:
if(self.FilterDict[str(key)] == "Filter"):
return False
else:
return True
except:
print("__is_valued error")
def frame_should_be_filtered_dict(self, Decoded_frame):
if(type(Decoded_frame) is list):
cpt = 0
for item in Decoded_frame :
if(type(item)is list):
try:
if(item[0] in self.FilterDict.keys()):
if not (self.__is_value_allowed_dict(item[0])):
cpt += 1
else:
pass
except Exception as e:
print("EXCEPT IT" + str(e))
try:
if(item in self.FilterDict.keys()):
if not (self.__is_value_allowed_dict(item)):
cpt += 1
else:
pass
except:
pass
if(cpt < 1):
return False
elif(cpt > 0):
return True |
Quelqu'un autre une idée , une piste ? une soluce ? ^^
Merci d'avance !