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 : 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
Quelqu'un autre une idée , une piste ? une soluce ? ^^
Merci d'avance !