Construire un planificateur de révision de code Python Envoi de demandes de révision

Dans la première partie de la série de didacticiels, vous avez vu comment configurer le projet et les configurations requises. Vous avez traité les journaux git du projet et les avez imprimés dans le terminal. Dans cette partie, nous allons passer au niveau suivant et envoyer les demandes de révision de code..

Commencer

Commencez par cloner le code source de la première partie de la série de tutoriels.

git clone https://github.com/royagasthyan/CodeReviewer CodeReviewer

Une fois le référentiel cloné, accédez au répertoire du projet. CodeReviewer et essayez d'exécuter la commande suivante dans le terminal.

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

Il convient d’imprimer les identifiants de validation, la date de validation et l’auteur de la validation dans le terminal..

Collecte de tous les commits avec des détails

Vous obtiendrez les détails de la validation en itérant les journaux de validation. Maintenant, vous devez collecter les détails de validation et les stocker dans une liste afin de pouvoir les réitérer ultérieurement pour envoyer la demande de révision du code. Afin de collecter les détails du commit, commencez par créer un Commettre classe avec les membres requis comme indiqué:

# ------------------------------------------- # # Classe de validation à contenir commit related info # # ------------------------------------------- class Commit : def __init __ (self, id, auteur, date): self.Id = id; self.Author = Author; self.Date = Date;

En itérant les journaux de commit dans le répertoire process_commits méthode, créer un Commettre instance pour garder le détail de commettre.

dans le process_commits méthode, définissez quelques variables comme indiqué:

commitId = "author =" date = "commits = []

Vous collecterez chaque détail de commit dans une liste Python appelée commet. Lors de la lecture des journaux de validation, la première fois que l'ID de validation est rencontré, conservez cet ID et supprimez les variables date et auteur, car il s'agit d'une nouvelle validation. Modifier le process_commits le code de la méthode après la vérification du mot clé commit comme indiqué: 

if line.startswith ('commit'): author = "date =" commitId = line [7:]

Lorsque l'ID de validation n'est pas nul, les informations de validation ont été collectées et il est temps d'ajouter la validation à la liste des validations. Ajoutez la ligne de code suivante au code ci-dessus:

if line.startswith ('commit'): if commitId <> "": commits.append (Commit (commitId, auteur, date)) author = "date =" commitId = line [7:]

Modifier le Auteur vérification des mots clés et la Rendez-vous amoureux vérification des mots clés pour conserver les détails de validation respectifs dans les variables auteur et date.

if line.startswith ('Author:'): if (re.search ('\<(.*?)\>', ligne)): author = re.search (' \<(.*?)\>', ligne) .group (1) si line.startswith (' Date: '): date = ligne [5:]

Maintenant, s'il n'y a qu'une seule validation dans le code source, les détails seront enregistrés dans la liste de validation. Alors ajoutez le code suivant à la fin de la boucle pour gérer ce scénario.

si commitId <> "": commits.append (Commit (commitId, auteur, date))

Voici le complet process_commits méthode qui collecte les détails de validation et retourne une liste de validations.

# ---------------------------------- # # Traite le journal git # # ------- --------------------------- def process_commits (): cmd = "cd" + project + "; git log --all --since = "+ str (no_days) +" .day --name-status "response = execute_cmd (cmd) commitId =" author = "date =" commits = [] pour la ligne dans response.splitlines (): if line.startswith ( 'commit'): if commitId <> "": commits.append (Commit (commitId, auteur, date)) author = "date =" commitId = line [7:] if line.startswith ('Author:'): if (recherche('\<(.*?)\>', ligne)): author = re.search (' \<(.*?)\>', ligne) .group (1) si line.startswith (' Date: '): date = ligne [5:] si commitId <> "": commits.append (Commit (commId, auteur, date)) renvoie des commits

Planification d'une demande de révision de code

Vous avez les détails de validation collectés à partir du journal du projet. Vous devez sélectionner des développeurs aléatoires pour envoyer la demande de révision du code. À l'intérieur de config.json fichier, ajoutons les développeurs associés au projet qui peuvent réviser le code. Voici le modifié config.json fichier:

["name": "project_x", "git_url": "https://github.com/royagasthyan/project_x", "members": ["royagasthyan", "hari", "sam", "shaun"] , "name": "project_y", "git_url": "https://github.com/royagasthyan/project_y", "members": ["royagasthyan", "hari", "sam", "shaun"] ]

Lisons les informations du développeur relatives à un projet particulier. Définir une variable publique appelée membres_projet.

project_members = "

Lors de la lecture des configurations du projet, renseignez les détails du membre du projet dans membres_projet variable de liste.

# # Lit le fichier de configuration du planificateur # avec open ('config.json') sous le nom fichier cfg: main_config = json.load (fichier cfg) pour p dans main_config: if p ['nom'] == projet: projet_url = p ['git_url '] project_members = p [' membres '] pause

Maintenant, vous avez la liste des développeurs liés à un projet particulier dans le membres_projet variable.

Définir une méthode appelée schedule_review_request que vous appelez pour planifier la demande de révision correspondant à chaque validation de projet. La demande de révision sera envoyée à un développeur aléatoire de la membres_projet liste, excluant l'auteur du commit. 

Créez une méthode appelée select_reviewer pour sélectionner le développeur aléatoire de la membres_projet liste. Pour sélectionner des développeurs aléatoires dans la liste, vous utiliserez le au hasard Module Python. Importer le au hasard Module Python.

importer au hasard

Voici à quoi ressemblerait le code:

# ----------------------------------------- # # Méthode de sélection de réviseur aléatoire # # ----------------------------------------- def select_reviewer (auteur, groupe): si auteur dans le groupe: group.remove (author) reviewer = random.choice (group) return reviewer

Comme indiqué dans le code ci-dessus, l'auteur de la validation a été supprimé de la liste des développeurs avant de sélectionner des développeurs aléatoires pour examiner le code. Pour sélectionner des développeurs aléatoires dans la liste, vous avez utilisé le random.choice méthode de la au hasard module.

À l'intérieur de schedule_review_request méthode, parcourez chaque commit à partir de la liste des commits. Pour chaque validation, sélectionnez un développeur aléatoire autre que l'auteur du commit pour envoyer la demande de révision. Voici à quoi ressemblerait le code:

def schedule_review_request (commits): pour commettre des commits: reviewer = select_reviewer (commit.Author, project_members)

Formater la demande de révision de code

Vous avez sélectionné des développeurs aléatoires pour envoyer la demande de révision de code. Avant d'envoyer la demande de révision, vous devez la formater avec les détails de la demande de révision. Définir une méthode appelée format_review_commit qui formatera la demande de révision de code. Voici à quoi ressemblerait le code:

def format_review_commit (commit): review_req = "" review_req + = "URL:" + project_url + '/ commit /' + commit.Id + "\ n" review_req + = "Commit:" + commit.Id + "\ n" review_req + = "Auteur:" + commit.Auteur + "\ n" review_req + = "Date:" + commit.Date + "\ n" retourner review_req

dans le schedule_review_request méthode, créez le contenu du courrier électronique de demande de révision qui sera envoyé au réviseur. Le contenu de l'e-mail contiendra les informations requises pour permettre à l'examinateur d'examiner le code de validation. Modifier le schedule_review_request comme montré:

def schedule_review_request (commits): date = time.strftime ("% Y-% m-% d") pour le commit dans les commits: reviewer = select_reviewer (commit.Auteur, project_members) subject = date + "Vérification du code [commit:" + commit.Id + "]" body = "Hello '" + relecteur + "', vous avez été sélectionné pour vérifier le code de commit \ n" body + = "effectué par '" + commit.Author + "'. \ n "body + =" \ n "body + = format_review_commit (commit) corps d'impression

Enregistrez les modifications ci-dessus et exécutez le programme de planification Python..

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

Vous devriez pouvoir voir une sortie similaire à celle présentée ci-dessous:

Envoi de la demande de révision de code par courrier électronique

Créez une méthode appelée send_email qui enverra un e-mail à la demande de révision avec le sujet et le contenu requis. Vous allez utiliser le smtplib module pour envoyer les emails. Importation smptlib dans le scheduler.py fichier:

importer smtplib

Définissez les détails du serveur de messagerie avec les variables publiques:

FROM_EMAIL = "[email protected]" FROM_PWD = "votre mot de passe" SERVER = "smtp.gmail.com" PORT = 587

Créez une méthode appelée send_email qui enverra l'email à l'adresse spécifiée. Voici comment send_email le code aurait l'air:

def send_email (to, subject, body): header = "De:" + FROM_EMAIL + "\ n" entête + = "To:" + à + "\ n" entête + = "Subject:" + subject + "\ n "header + =" \ n "header + = body print" ** Envoi d'e-mail à '"+ à +"' "mail_server = smtplib.SMTP (SERVER, PORT) mail_server.starttls () mail_server.login (FROM_EMAIL, FROM_PWD) mail_server.sendmail (FROM_EMAIL, to, en-tête) mail_server.quit ()

Comme indiqué dans le code ci-dessus, vous avez créé le smtp serveur utilisant le serveur gmail et le numéro de port. En utilisant le nom d'utilisateur et le mot de passe définis, vous vous êtes connecté au compte de messagerie et avez envoyé l'e-mail au destinataire..

Modifier le schedule_review_request méthode pour envoyer l'e-mail au lieu d'imprimer le contenu de l'e-mail au terminal.

def schedule_review_request (commits): date = time.strftime ("% Y-% m-% d") pour le commit dans les commits: reviewer = select_reviewer (commit.Auteur, project_members) subject = date + "Vérification du code [commit:" + commit.Id + "]" body = "Hello '" + relecteur + "', vous avez été sélectionné pour vérifier le code de commit \ n" body + = "effectué par '" + commit.Author + "'. \ n "body + =" \ n "body + = format_review_commit (commit) send_email (réviseur, sujet, corps)

Enregistrez les modifications ci-dessus. Modifier le config.json fichier pour inclure une adresse e-mail valide que vous pouvez vérifier. Exécutez le planificateur à l'aide de la commande suivante:

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

Vous devriez pouvoir voir la sortie suivante sur le terminal:

Vérifiez l'adresse e-mail pour voir la demande de révision de code envoyée par le planificateur de révision de code..

Envelopper

Dans cette partie de la série Planificateur Python Code Review, vous avez collecté les informations de validation dans une liste. La liste de validation a ensuite été itérée pour formater la demande de révision. Des développeurs aléatoires ont été sélectionnés pour envoyer la demande de révision de code..

Dans la suite de cette série, vous verrez comment donner suite à la demande de révision de code..

Le code source de ce tutoriel est disponible sur GitHub.

.