Code source de cli.parseur_arguments_cli

"""
Module pour analyser les arguments passés en ligne de commande.
"""

from argparse import ArgumentParser, Namespace
from re import match
from typing import Optional


[docs] class ParseurArgumentsCLI(ArgumentParser): """ Représente un parseur pour analyser les arguments passés en ligne de commande pour l'application. """ def __init__(self): """ Initialise uparseur pour analyser les arguments passés en ligne de commande. """ super().__init__( description="LogBuster, l'analyseur de log Apache.", allow_abbrev=False, ) self.__set_arguments() def __set_arguments(self) -> None: """ Définit les arguments attendus par l'application. Returns: None """ # -- Argument obligatoire -- self.add_argument( "chemin_log", type=str, help="Chemin du fichier log Apache à analyser." ) # -- Argument optionnel -- self.add_argument( "-s", "--sortie", type=str, default="./", help="Dossier où sera écrit l'analyse du fichier de log Apache. Par défaut," "sa valeur est le répertoire d'exécution du script.", ) self.add_argument( "-i", "--ip", type=str, help="L'adresse IP que doivent avoir les entrées à analyser." ) self.add_argument( "-c", "--code-statut-http", type=int, help="Le code de statut http que doivent avoir les entrées à analyser." ) self.add_argument( "--camembert", action="store_true", help="Active la génération d'histogrammes pour les statistiques compatibles." )
[docs] def parse_args(self, args: Optional[list] = None, namespace: Optional[Namespace] = None) -> Namespace: """ Récupère les arguments passés en ligne de commande puis vérifie que leur format est conforme à ceux attendus. Args: args (Optional[list]): Liste des arguments passés en paramètre. Si ``None``, les arguments de la ligne de commande sont utilisés. namespace (Optional[Namespace]): Un espace de noms (namespace) pour stocker les résultats. Si ``None``, un nouvel espace de noms est créé. Returns: Namespace: L'objet contenant les arguments analysés et leurs valeurs. Raises: ArgumentCLIException: Si une erreur se produit lors du parsing des arguments (par exemple, si un argument inconnu est fourni ou si son format est invalide). """ # Vérification du type des paramètres if args is not None and not isinstance(args, list): raise TypeError("Les arguments doivent soit être None, soit être dans une liste.") if namespace is not None and not isinstance(args, Namespace): raise TypeError("L'espace de noms doit soit être None, soit être un objet Namespace.") # Analyse des arguments try: arguments_parses = super().parse_args(args, namespace) except SystemExit as ex: #Arguments inconnus raise ArgumentCLIException() from ex # Vérification syntaxique des arguments regex_chemin = r"^[a-zA-Z0-9:_\\\-.\/]+$" if not match(regex_chemin, arguments_parses.chemin_log): raise ArgumentCLIException( "Le chemin du fichier log doit uniquement contenir les caractères autorisés. " "Les caractères autorisés sont les minuscules, majuscules, chiffres ou les " "caractères spéciaux suivants: _, \\, -, /." ) if not match(regex_chemin, arguments_parses.sortie): raise ArgumentCLIException( "Le chemin du dossier de sortie doit uniquement contenir les caractères " "autorisés. Les caractères autorisés sont les minuscules, majuscules, " "chiffres ou les caractères spéciaux suivants: _, \\, -, /." ) return arguments_parses
[docs] class ArgumentCLIException(Exception): """ Représente une erreur lorsque un argument passé en ligne de commande est inconnu ou que son format est invalide. """ def __init__(self, *args): super().__init__(*args)