PyInterceptor : un intercepteur d'appels de fonction Python pour une analyse non invasive
PyInterceptor est une bibliothèque Python actuellement en cours de développement (disponible sur GitHub) conçue pour l'interception et l'analyse non invasives des appels de fonctions. Imaginez avoir besoin d'informations détaillées (noms de fonctions, paramètres, valeurs de retour, temps d'exécution) d'un client Python interagissant avec une API Python, sans modifier le code existant. PyInterceptor répond à ce besoin.
Cet article dev.to présente les concepts de base, les cas d'utilisation et l'application de PyInterceptor.
Interception et traitement des appels Python
L'interception des appels de fonction se divise en deux catégories : bloquante et non bloquante (Figure 1). Le blocage de l'interception capture les informations d'appel et les renvoie immédiatement, sans exécuter la fonction cible. Ceci est utile pour créer des simulations ou des stubs pendant les tests unitaires. L'interception non bloquante collecte des informations, puis exécute la fonction cible, capturant sa valeur de retour avant de continuer. PyInterceptor prend en charge les deux modes.
L'interception des appels API Python offre de nombreuses applications :
Mise en œuvre détaillée
PyInterceptor fonctionne en insérant une fonction handler qui intercepte les appels destinés à l'API. Ce gestionnaire capture les métadonnées (arguments, horodatages, etc.), les stocke dans un objet CallInfo et gère le transfert d'appel.
En mode blocage, le gestionnaire transmet CallInfo à un intercepteur appelable défini par l'utilisateur. Cet appelable traite les informations (journalisation, statistiques, etc.). Le gestionnaire renvoie ensuite le résultat de l'intercepteur.
En mode non bloquant, le gestionnaire exécute la fonction cible, ajoute sa valeur de retour à CallInfo, puis appelle l'intercepteur. La valeur de retour de la fonction cible réelle est renvoyée à l'appelant, contrairement au mode blocage.
Exemple de code illustratif
Cet exemple démontre l'utilisation de PyInterceptor avec une API arithmétique et une classe Processor, enregistrant tous les appels de méthode dans un fichier JSON.
<code class="language-python">import json from pathlib import Path from typing import List from interceptor import intercept, get_methods, CallInfo class API: # ... (API methods remain unchanged) ... class Processor: # ... (Processor methods remain unchanged) ... class JSONLogger: # ... (JSONLogger class remains unchanged) ... if __name__ == '__main__': # ... (Main method remains unchanged) ...</code>
La méthode principale crée une instance JSONLogger (agissant en tant qu'intercepteur), intercepte les méthodes API et Processor à l'aide de intercept()
, exécute les méthodes Processor et enregistre les journaux dans "logs.json". La sortie JSON contient un enregistrement détaillé de chaque appel de fonction.
Améliorations futures
Les améliorations prévues pour PyInterceptor incluent :
Vos commentaires sont les bienvenus ! Veuillez laisser un commentaire si vous avez trouvé cet article utile ou si vous avez des suggestions pour un développement futur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!