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):
Quelqu'un autre une idée , une piste ? une soluce ? ^^
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Merci d'avance !
Partager