Récupération d'une configuration 
			le paramètre ```name``` peut être soit un nom ou 
			un chemin vers la valeur (séparateur /)

			```parent_search``` est le boolean qui indique si on doit
			chercher la valeur dans la hiérarchie plus haute. Si la chaîne
			"/document/host/val" retourne None, on recherche dans "/document/val"
			puis dans "/val"

			```multikeys_search``` indique si la recherche d'une clef non trouvabe
			se fait sur les parents en multi clef
			ie: /graphic/output/logo/enable va aussi chercher dans /graphic/logo/enable

			```__settings_temp``` est le dictionnaire temporaire de 
			transmission récursif (intégrant les sous configurations)

			```__rank_recursion``` défini le rang de récusion pour chercher aussi
			depuis la racine du chemin en cas de récursion inverse

			exemple :
				valeur = self.settings("document/host/val", "mon_defaut")
				valeur = self.settings("/document/host/val", "mon_defaut")

def get(self, name, default="", parent_search=False, multikeys_search=False, __settings_temp=None, __rank_recursion=0):
		""" 
			Récupération d'une configuration 
			le paramètre ```name``` peut être soit un nom ou 
			un chemin vers la valeur (séparateur /)

			```parent_search``` est le boolean qui indique si on doit
			chercher la valeur dans la hiérarchie plus haute. Si la chaîne
			"/document/host/val" retourne None, on recherche dans "/document/val"
			puis dans "/val"

			```multikeys_search``` indique si la recherche d'une clef non trouvabe
			se fait sur les parents en multi clef
			ie: /graphic/output/logo/enable va aussi chercher dans /graphic/logo/enable

			```__settings_temp``` est le dictionnaire temporaire de 
			transmission récursif (intégrant les sous configurations)

			```__rank_recursion``` défini le rang de récusion pour chercher aussi
			depuis la racine du chemin en cas de récursion inverse

			exemple :
				valeur = self.settings("document/host/val", "mon_defaut")
				valeur = self.settings("/document/host/val", "mon_defaut")
		"""
		# configuration des settings temporaire pour traitement local
		if __settings_temp is None:
			__settings_temp = self.settings

		# check si le chemin commence par / auquel cas on le supprime
		if name.startswith("/"):
			name = name[1:]

		# check si le chemin termine par / auquel cas on le supprime
		if name.endswith("/"):
			name = name[:-1]

		# check s'il s'agit d'un chemin complet
		if "/" in name:
			# récupération du nom de la sous configuraiton
			name_master = name.split("/")[0]

			# récupération de l'indice si le nom obtenu contient []
			indice_master = -1
			indices_master = re.findall(r"\[\d+\]", name_master)
			if len(indices_master) > 0:
				try:
					indice_master = int(indices_master[0].replace("[", "").replace("]", ""))
				except:
					pass

			# suppression de l'indice dans le nom du chemin courant (ie: data[0] devient data)
			name_master = name_master.replace("[{}]".format(indice_master), "")

			# recherche si la clef est présente dans le chemin courant
			if name_master not in __settings_temp.keys():
				return None

			# récupération de la sous configuration
			if indice_master < 0:
				# la sous configuration n'est pas une liste
				__settings_temp = __settings_temp[name_master]

			else:
				# la sous configuration est une liste (SI JSON !!)
				__settings_temp = __settings_temp[name_master][indice_master] if self.is_json else __settings_temp[name]

			# recursion sur le chemin en dessous
			name_split = name.split("/")[1:]
			search_path = "/".join(name_split)
			return_value = self.get(
				search_path, default, parent_search, multikeys_search, __settings_temp, __rank_recursion + 1)

			# pas de valeur trouvé, on cherche sur la récursion inverse
			if len(name_split) > 1 and return_value is None:
				i = len(name_split)
				while i >= 0:
					# on décrémente le curseur de recherche
					i -= 1

					# établissement du nouveau chemin en supprimant le niveau supérieur
					new_search_path = "/".join(name_split[i-len(name_split):])
					return_value = self.get(
						new_search_path, default, parent_search, multikeys_search, __settings_temp, __rank_recursion + 1)

					# pas de recherche multi clef
					if not multikeys_search:
						break

					# une valeur a été trouvée
					if not return_value is None:
						break

			# pas de valeur trouvé et on est à la racine du chemin
			if return_value is None and __rank_recursion == 0:
				# on change le nom du master et on cherche
				name = name_split[-1]
				return_value = self.get(
					name, default, parent_search, multikeys_search, self.settings, 0)

				# toujours pas de valeur, on garde le défaut
				if return_value is None:
					return_value = default

			# retour de la valeur récupérée
			return return_value

		# récupération de l'indice si le nom obtenu contient []
		indice_master = -1
		indices_master = re.findall(r"\[\d+\]", name)
		if len(indices_master) > 0:
			try:
				indice_master = int(indices_master[0].replace("[", "").replace("]", ""))
			except:
				pass

		# suppression de l'indice dans le nom du chemin courant (ie: data[0] devient data)
		name = name.replace("[{}]".format(indice_master), "")

		# check de la précense de la clef
		if type(__settings_temp) is str or name not in __settings_temp.keys():
			# le hash n'est pas présent !
			# si la recherche récursive inverse est activée et pas de valeur trouvée,
			# on recherche plus haut
			if parent_search:
				return None

			return default

		# récupération de la valeur
		if indice_master < 0:
			# la sous configuration n'est pas une liste
			value = __settings_temp[name]

		else:
			# la sous configuration est une liste (SI JSON !!)
			value = __settings_temp[name][indice_master] if self.is_json else __settings_temp[name]

		# interdiction de la valeur "None"
		if value is None:
			# si la recherche récursive inverse est activée et pas de valeur trouvée,
			# on recherche plus haut
			if parent_search:
				return None

			# valeur par défaut
			value = default

		# trim si value est un str
		if isinstance(value, str):
			value = value.strip()

		# retour de la valeur
		return value