Construire un planificateur de révision de code Python journal de traitement

Dans cette série de didacticiels, vous verrez comment créer un planificateur de révision de code à l'aide de Python. Tout au long de cette série, vous allez vous familiariser avec certains concepts de base tels que la lecture d’e-mails, l’envoi d’un e-mail, l’exécution de commandes de terminal à partir du programme Python, le traitement des journaux git, etc..

Dans la première partie, vous allez commencer par configurer les fichiers de configuration de base, lire les journaux git et les traiter pour l'envoi de la demande de révision de code.. 

Commencer

Commencez par créer un dossier de projet appelé CodeReviewer. À l'intérieur de CodeReviewer dossier, créer un fichier appelé scheduler.py

En supposant que le planificateur de révision de code sera exécuté sur plusieurs projets, vous devez spécifier le nom du projet en fonction duquel il sera exécuté et le nombre de jours pendant lesquels le journal doit être traité. Commencez donc par lire ces deux paramètres en tant qu'arguments du programme de révision de code.. 

Faisons usage de la argparse Module Python pour la lecture des paramètres du programme. Importez la bibliothèque et ajoutez les arguments du programme. Vous pouvez utiliser le ArgumentParser méthode du argparse module pour lancer l’analyseur. Une fois qu'il est lancé, vous pouvez ajouter les arguments à l'analyseur. Voici le code pour lire les arguments du programme:

import argparse parser = argparse.ArgumentParser (description = "Programme de planificateur de révision de code") parser.add_argument ("- n", nargs = "?", type = int, default = 1, help = "Nombre de (d) ays to cherche log. ") parser.add_argument (" - p ", nargs ="? ", type = str, default =" em ", help =" nom du projet ".) args = parser.parse_args () no_days = args. n projet = args.p print 'Traitement du planificateur contre projet' + projet + '…'

Configuration des configurations de projet

Gardons un fichier de configuration séparé qui sera traité par le relecteur de code. Créez un fichier appelé config.json dans le répertoire du projet CodeReviewer. Dans le fichier de configuration, il y aura des informations sur chaque projet qui sera traité. Voici à quoi ressemblerait le fichier de configuration du projet:

["name": "project_x", "git_url": "https://github.com/royagasthyan/project_x", "name": "project_y", "git_url": "https://github.com / royagasthyan / project_y "]

Quelques options supplémentaires seraient ajoutées aux configurations du projet dans les parties suivantes.. 

Lisons la configuration JSON déposer dans le programme Python. Importer le JSON module et charge le JSON données lues depuis le fichier de configuration.

# # Lit le fichier de configuration du planificateur # avec open ('config.json') en tant que cfg_file: main_config = json.load (cfg_file)

Lire les informations de validation à partir du référentiel

Lorsque le script de relecteur est exécuté, le nom du projet est spécifié en tant que paramètre. En fonction du nom du projet spécifié, vérifiez si ses configurations sont disponibles et clonez le référentiel.. 

Tout d'abord, vous devez trouver l'URL du projet à partir des configurations. Itérez les données du projet et recherchez l'URL du projet comme indiqué:

pour p dans main_config: if p ['nom'] == projet: projet_url = p ['git_url'] break

Une fois que vous avez l'URL du projet, vérifiez si le projet est déjà cloné. Sinon, clonez l'URL du projet. S'il existe déjà, accédez au répertoire du projet existant et extrayez les dernières modifications..

# Clonez le référentiel s'il n'existe pas déjà print "********* Effectuer la vérification du projet **********" if (os.path.isdir ("./" + projet)): execute_cmd ("cd" + projet + "; git pull") sinon: execute_cmd ("git clone" + projet_url + "" + projet) print "*** Done *******" print ""

Pour exécuter des commandes système, vous utiliserez Python. os module. Créez une méthode pour exécuter des commandes système car vous l'utiliserez fréquemment. Voici la execute_cmd méthode:

def execute_cmd (cmd): print "***** Executing command '" + cmd + "'" response = os.popen (cmd) .read () réponse de réponse

Traitement du journal Git

Après avoir extrait le journal de validation du référentiel Git, vous allez analyser le journal. Créez une nouvelle méthode Python appelée process_commits traiter les logs Git.

def process_commits (): # code serait ici

Git nous fournit les commandes pour obtenir le journal de validation. Pour obtenir tous les journaux d'un référentiel, la commande serait:

journal git --all

La réponse serait:

commit 04d11e21fb625215c5e672a93d955f4a176e16e4 Auteur: royagasthyan  Date: mer 8 fév 21:41:20 2017 +0530 Créer LISEZMOI.md 

Vous pouvez également obtenir des journaux spécifiques au nombre de jours à compter de l'exécution de la commande. Pour obtenir les journaux depuis n jours, la commande serait:

git log --all --since = n.days

Vous pouvez le réduire davantage pour voir si un commit particulier était un ajout, une modification ou une suppression. Exécutez la commande ci-dessus avec --nom-statut:

git log --all --since = 10.days --name-status

La commande ci-dessus aurait la sortie suivante:

commettre 04d11e21fb625215c5e672a93d955f4a176e16e4 Auteur: royagasthyan  Date: mer 8 fév 21:41:20 2017 +0530 Créer LISEZMOI.md A LISEZMOI.md 

le UNE lettre sur le côté gauche de la LISEZMOI.md le fichier indique l'addition. De même, M indiquerait une modification et indiquerait la suppression.

À l'intérieur de process_commits méthode, définissons la commande Git à exécuter pour obtenir l'historique du journal. 

cmd = "cd" + projet + "; git log --all --since =" + str (no_days) + ".day --name-status"

Passer la commande ci-dessus cmd au execute_cmd méthode.

response = execute_cmd (cmd)

Lire la réponse, itérer chaque ligne et imprimer la même chose.

def process_commits (): cmd = "cd" + projet + "; git log --all --since =" + str (no_days) + ".day --name-status" réponse = execute_cmd (cmd) pour la ligne en réponse .splitlines (): ligne d'impression

Appeler le process_commits méthode après la lecture des configurations.

print 'Traitement du planificateur par rapport au projet' + projet + '…' process_commits ()

Enregistrez les modifications ci-dessus et essayez d'exécuter le relecteur de code à l'aide de la commande suivante:

python scheduler.py -n 10 -p "projet_x"

Comme vous pouvez le constater, nous avons lancé le relecteur de code avec le nombre de jours et le nom du projet à traiter. Vous devriez pouvoir voir le résultat suivant:

********* Vérification du projet ********** ***** Exécution de la commande 'cd project_x; git pull '*** Done ******* Traitement du planificateur contre project project_x… ***** Exécution de la commande' cd project_x; git log --all --since = 10.day --name-status 'commit 04d11e21fb625215c5e672a93d955f4a176e16e4 Auteur: royagasthyan  Date: mer 8 fév 21:41:20 2017 +0530 Créer LISEZMOI.md A LISEZMOI.md 

Ainsi, lorsque vous exécutez le réviseur de code, vous pouvez voir que le référentiel est créé s'il n'existe pas déjà ou s'il est mis à jour. Après cela, en fonction du nombre de jours fournis, il récupère l'historique du journal de validation pour le traiter.. 

Analysons maintenant le journal de validation pour connaître son ID, sa date et son auteur..

Comme indiqué dans les journaux, l'identifiant de validation commence par le mot clé commettre , l'auteur commence par le mot clé Auteur:, et la date commence par le mot clé Rendez-vous amoureux:. Vous allez utiliser les mots-clés suivants pour identifier l'ID de validation, l'auteur et la date d'une validation..

Essayons d'obtenir l'ID de validation à partir des lignes du journal Git. C'est assez simple. Il vous suffit de vérifier si la ligne commence par le mot clé commettre.

for line dans response.splitlines (): if line.startswith ('commit'): print line [7:]

Enregistrez les modifications et exécutez le planificateur. Vous devriez pouvoir obtenir l'ID de validation..

La tâche suivante consiste à extraire le nom de l'auteur. Pour vérifier si la ligne contient les informations sur l'auteur, vous devez d'abord vérifier si la ligne commence par Auteur mot-clé. Si tel est le cas, vous utiliserez une expression régulière pour obtenir l'utilisateur. 

Comme vous pouvez le constater, l’adresse électronique de l’utilisateur se trouve à l’intérieur des signes "inférieur à supérieur à". Nous allons utiliser une expression régulière pour lire l'adresse email entre < >. L'expression régulière ressemblera à ceci:

'\<(.*?)\>'

Importer le Python module pour utiliser des expressions régulières en Python.

import re

Maintenant, vérifiez si la ligne commence par le Auteur mot-clé. Si tel est le cas, extrayez l'adresse de messagerie de l'utilisateur à l'aide de l'expression régulière ci-dessus. Voici à quoi cela ressemblerait:

if line.startswith ('Author:'): if (re.search ('\<(.*?)\>', line)): print re.search (' \<(.*?)\>', ligne) .group (1)

Pour extraire la date de validation du journal, vous devez vérifier si la ligne commence par le Rendez-vous amoureux mot-clé. Voici à quoi cela ressemblerait:

if line.startswith ('Date:'): affiche la ligne [5:]

Voici la finale process_commits méthode:

def process_commits (): cmd = "cd" + projet + "; git log --all --since =" + str (no_days) + ".day --name-status" réponse = execute_cmd (cmd) pour la ligne en réponse .splitlines (): if line.startswith ('commit'): affiche la ligne [7:] if line.startswith ('Author:'): if (re.search ('\<(.*?)\>', line)): print re.search (' \<(.*?)\>', ligne) .group (1) si line.startswith (' Date: '): affiche la ligne [5:]

Enregistrez les modifications ci-dessus et démarrez le réviseur de code..

python scheduler.py -n 10 -p "projet_x"

Vous devez avoir chaque détail de validation avec les ID, les auteurs et les dates de validation imprimés sur le terminal..

Envelopper

Dans cette première partie du planificateur de révision de code Python, vous avez vu comment configurer le projet. Vous lisez les paramètres d'entrée requis par le planificateur pour traiter le projet. Dans la suite de cette série de didacticiels, nous collecterons les détails de la validation à partir du process_commits méthode et envoyer le commit à des développeurs aléatoires pour la révision du code.

N'hésitez pas à voir ce que nous avons à vendre et à étudier sur le marché Envato, et n'hésitez pas à poser des questions et à fournir vos précieux commentaires en utilisant le flux ci-dessous.

J'espère que vous avez apprécié la première partie. Faites-nous savoir vos pensées ou suggestions dans les commentaires ci-dessous.

Le code source de ce tutoriel est disponible sur GitHub.