"""
Module pour les filtres lors d'une analyse d'un fichier log Apache.
"""
from typing import Optional
from parse.entree_log_apache import EntreeLogApache
[docs]
class FiltreLogApache:
"""
Représente le filtre à appliquer lors d'une analyse d'un fichier de log Apache.
Attributes:
adresse_ip (Optional[str]): L'adresse IP que doit avoir une entrée pour
pouvoir passer le filtre. Si sa valeur est ``None``, ce filtre ne sera
pas appliqué.
code_statut_http (Optional[int]): Le code de statut http que doit avoir une entrée
pour pouvoir passer le filtre. Si sa valeur est ``None``, ce filtre ne sera
pas appliqué.
"""
def __init__(self, filtre_adresse_ip: Optional[str], filtre_code_statut_http: Optional[int]):
"""
Initalise le filtre à appliquer lors d'une analyse.
Args:
filtre_adresse_ip (Optional[str]): L'adresse IP que doit avoir une entrée pour
pouvoir passer le filtre. Si sa valeur est ``None``, cette vérification ne sera
pas appliqué.
filtre_code_statut_http (Optional[int]): Le code de statut http que doit
avoir une entrée pour pouvoir passer le filtre. Si sa valeur est ``None``,
cette vérification ne sera pas appliqué.
Raises:
TypeError: Les paramètres ne sont pas du type attendu.
"""
# Vérification des paramètres
if filtre_adresse_ip is not None and not isinstance(filtre_adresse_ip, str):
raise TypeError("L'adresse IP dans un filtre doit être une chaîne de caractère.")
if (filtre_code_statut_http is not None
and not isinstance(filtre_code_statut_http, int)
or isinstance(filtre_code_statut_http, bool)):
raise TypeError("Un code de statut http dans un filtre doit être un entier.")
# Ajout des filtres
self.adresse_ip = filtre_adresse_ip
self.code_statut_http = filtre_code_statut_http
[docs]
def entree_passe_filtre(self, entree: EntreeLogApache) -> bool:
"""
Indique si l'entrée passée en paramètre passe le filtre.
Args:
entree (EntreeLogApache): L'entrée à vérifier.
Returns:
bool: True si l'entrée passe le filtre, False sinon.
Raises:
TypeError: L'``entrée`` n'est pas de type :class:`EntreeLogApache`
"""
# Vérification du paramètre
if not isinstance(entree, EntreeLogApache):
raise TypeError("L'entrée à vérifier pour le filtre doit être de type EntreeLogApache")
# Vérification que l'entrée passe le filtre
# Application du filtre sur l'adresse IP si activé
if self.adresse_ip is not None:
if self.adresse_ip != entree.client.adresse_ip:
return False
# Application du filtre sur le code de statut http si activé
if self.code_statut_http is not None:
if self.code_statut_http != entree.reponse.code_statut_http:
return False
return True
[docs]
def get_dict_filtre(self) -> dict:
"""
Retourne le filtre sous forme d'un dictionnaire.
Les clés représentent le champs d'une entrée et leur valeur la valeur
que doit avoir ce champs. Si la valeur d'un filtre est ``None``, cela signifie que
cette vérification n'est pas activé.
Returns:
dict: Les filtres sous forme d'un dictionnaire.
"""
return {
"adresse_ip": self.adresse_ip,
"code_statut_http": self.code_statut_http
}