Advertisement
  1. Code
  2. Python

Création d'un planificateur de révision du code Python: journal de traitement

Scroll to top
Read Time: 8 min
This post is part of a series called Building a Python Code Review Scheduler.
Building a Python Code Review Scheduler: Sending Review Requests

French (Français) translation by New Lune (you can also view the original English article)

Dans cette série de tutoriels, vous verrez comment créer un planificateur d'évaluation de code à l'aide de Python. Tout au long de cette série, vous vous lèverez à certains concepts de base, comme la lecture d'emails, l'envoi d'un courrier électronique, l'exécution de commandes de terminal depuis le programme Python, le traitement des journaux git, etc.

Dans la première partie, vous commencez par configurer les fichiers de configuration de base, lire les journaux git et les traiter pour envoyer la demande de révision du code.

Commençons

Commencez par créer un dossier de projet appelé CodeReviewer. Dans le dossier CodeReviewer, créez un fichier appelé scheduler.py.

En supposant que le planificateur d'examen de code sera exécuté contre plusieurs projets, vous devrez spécifier le nom du projet sur lequel le planificateur fonctionnera et le nombre de jours pendant lesquels le journal doit être traité. Alors, lisez d'abord ces deux paramètres comme arguments du programme de révision du code.

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

1
import argparse
2
3
parser = argparse.ArgumentParser(description="Code Review Scheduler Program")
4
parser.add_argument("-n", nargs="?", type=int, default=1, help="Number of (d)ays to look for log. ")
5
parser.add_argument("-p", nargs="?", type=str, default="em", help="Project name.")
6
args = parser.parse_args()
7
8
no_days = args.n
9
project = args.p
10
11
print 'Processing the scheduler against project ' + project + '....'

Configuration des configurations de projet

Gardons un fichier de configuration séparé qui sera traité par l'éditeur 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 comment apparaitrait le fichier de configuration du projet:

1
[{
2
    "name": "project_x",
3
    "git_url": "https://github.com/royagasthyan/project_x"
4
}, {
5
    "name": "project_y",
6
    "git_url": "https://github.com/royagasthyan/project_y"
7
}]

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

Lisez le fichier JSON de configuration dans le programme Python. Importez le module JSON et chargez les données JSON lues à partir du fichier de configuration.

1
#

2
# Read the scheduler config file

3
#

4
with open('config.json') as cfg_file:
5
    main_config = json.load(cfg_file)

Lisez Commit Info du référentiel

Lorsque le script critique est exécuté, le nom du projet est spécifié comme paramètre. Sur la base du nom du projet spécifié, vérifiez si ses configurations sont disponibles et clonez le référentiel.

D'abord, vous devez trouver l'URL du projet à partir des configurations. Répétez les données du projet et trouvez l'URL du projet comme indiqué:

1
for p in main_config:
2
    if p['name'] == project:
3
        project_url = p['git_url']
4
    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 de projet existant et tirez les dernières modifications.

1
# Clone the repository if not already exists

2
print "********* Doing project checkout **********"
3
if(os.path.isdir("./" + project)):
4
    execute_cmd("cd " + project + "; git pull")
5
else:
6
    execute_cmd("git clone " + project_url + " " + project)
7
print "*** Done *******"
8
print " "

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

1
def execute_cmd(cmd):
2
    print "***** Executing command '"+ cmd + "'"
3
    response = os.popen(cmd).read()
4
    return response

Traitement du journal Git

Après avoir récupéré le journal de validation du dépôt Git, vous analyserez le journal. Créez une nouvelle méthode Python appelée process_commits pour traiter les journaux Git.

1
def process_commits():
2
    # code would be here

Git nous fournit les commandes pour obtenir le journal de validation. Pour obtenir tous les journaux à partir d'un dépôt, la commande serait:

1
git log --all

La réponse serait:

1
commit 04d11e21fb625215c5e672a93d955f4a176e16e4
2
Author: royagasthyan <royagasthyan@gmail.com>
3
Date:   Wed Feb 8 21:41:20 2017 +0530
4
5
    Create README.md

Vous pouvez également obtenir des journaux spécifiques au nombre de jours à partir du moment où la commande est exécutée. Pour obtenir des journaux depuis n nombre de jours, la commande serait:

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

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

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

La commande ci-dessus aurait la sortie suivante:

1
commit 04d11e21fb625215c5e672a93d955f4a176e16e4
2
Author: royagasthyan <royagasthyan@gmail.com>
3
Date:   Wed Feb 8 21:41:20 2017 +0530
4
5
    Create README.md
6
7
A       README.md

La lettre A sur le côté gauche du fichier README.md indique l'addition. De même, M indiquerait une modification et D indiquerait une suppression.

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

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

Passez la commande cmd ci-dessus à la méthode execute_cmd.

1
response = execute_cmd(cmd)

Lisez la réponse, itérez chaque ligne et imprimez la même chose.

1
def process_commits():
2
    cmd = "cd " + project + "; git log --all --since=" + str(no_days) + ".day --name-status"
3
    response = execute_cmd(cmd)
4
5
    for line in response.splitlines():
6
        print line

Appelez la méthode process_commits une fois que les configurations ont été lues.

1
print 'Processing the scheduler against project ' + project + '....'
2
process_commits()

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

1
python scheduler.py -n 10 -p "project_x"

Comme vous pouvez le constater, nous avons commencé l'éditeur de code avec le nombre de jours et le nom du projet à traiter. Vous devriez pouvoir voir la sortie suivante:

1
********* Doing project checkout **********
2
***** Executing command 'cd project_x; git pull'
3
*** Done *******
4
 
5
Processing the scheduler against project project_x....
6
***** Executing command 'cd project_x; git log --all --since=10.day --name-status'
7
commit 04d11e21fb625215c5e672a93d955f4a176e16e4
8
Author: royagasthyan <royagasthyan@gmail.com>
9
Date:   Wed Feb 8 21:41:20 2017 +0530
10
11
    Create README.md
12
13
A    README.md

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

Maintenant, analysons le journal de validation pour découvrir l'ID de validation, la date de validation et l'auteur de validation.

Comme on l'a vu dans les journaux, l'identifiant de validation commence par le mot-clé commit, l'auteur commence par le mot-clé Author:, et la date commence par le mot-clé Date:. Vous utiliserez les mots-clés suivants pour identifier l'identifiant Id, l'auteur et la date d'un commit.

Essayons d'obtenir l'ID de validation à partir des lignes de journal Git. C'est très simple. Il suffit de vérifier si la ligne commence avec le mot clé commit.

1
for line in response.splitlines():
2
    if line.startswith('commit '):
3
        print line[7:]

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

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

Comme vous pouvez le voir, l'adresse électronique de l'utilisateur se trouve dans les panneaux "inférieurs à plus de". Nous utiliserons une expression régulière pour lire l'adresse e-mail entre <>. L'expression régulière sera comme ceci:

1
'\<(.*?)\>'

Importez le module Python re pour utiliser des expressions régulières dans Python.

1
import re

Vérifiez maintenant si la ligne commence avec le mot-clé Author. Si c'est le cas, extrayez l'adresse électronique de l'utilisateur en utilisant l'expression régulière ci-dessus. Voici comment cela se passerait:

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

Pour extraire la date de validation du journal, vous devez vérifier si la ligne commence avec le mot-clé Date. Voici comment cela se passerait:

1
if line.startswith('Date:'):
2
    print line[5:]

Voici la méthode finale de process_commits:

1
def process_commits():
2
    cmd = "cd " + project + "; git log --all --since=" + str(no_days) + ".day --name-status"
3
    response = execute_cmd(cmd)
4
5
    for line in response.splitlines():
6
        if line.startswith('commit '):
7
            print line[7:]
8
        if line.startswith('Author:'):
9
            if(re.search('\<(.*?)\>',line)):
10
                print re.search('\<(.*?)\>',line).group(1)
11
        if line.startswith('Date:'):
12
            print line[5:]

Enregistrez les modifications ci-dessus et démarrez l'éditeur de code.

1
python scheduler.py -n 10 -p "project_x"

Vous devriez avoir chaque détail de validation avec l'identifiant de validation, l'auteur et la date de validation imprimés sur le terminal.

Finissons-en

Dans cette première partie du Python Code Review Scheduler, 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 partie suivante de cette série de tutoriels, nous recueillons les détails de validation à partir de la méthode process_commits et envoyons le commit à des développeurs aléatoires pour l'examen du code.

N'hésitez pas à voir ce que nous avons à la vente et à étudier sur Envato Market, et n'hésitez pas à poser des questions et à fournir de 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 idées ou suggestions dans les commentaires ci-dessous.

Le code source de ce tutoriel est disponible sur GitHub.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.