Maison >développement back-end >Tutoriel Python >Construire un planificateur de révision de code Python : suivi des révisions
Dans la troisième partie de cette série, vous avez appris à enregistrer les informations de demande de révision de code pour un traitement ultérieur. Vous créez une méthode appelée read_email
pour recevoir un e-mail de la boîte de réception afin de vérifier si le réviseur a répondu à la demande de révision du code. Vous avez également implémenté la gestion des erreurs dans le code du planificateur de révision de code.
Dans cette partie de la série, vous utiliserez les informations de révision de code enregistrées et les informations de votre courrier électronique pour vérifier si le réviseur a répondu à la demande de révision. Si la demande n’a pas reçu de réponse, vous enverrez un e-mail de suivi au réviseur.
Commencez par cloner le code source de la troisième partie de cette série de didacticiels.
git clone https://github.com/royagasthyan/CodeReviewer-Part3 CodeReviewer
Modifier config.json
文件以包含一些相关的电子邮件地址,并保留 royagasthyan@gmail.com
电子邮件地址。这是因为 git 具有与此特定电子邮件地址相关的提交,这是代码按预期执行所必需的。修改 schedule.py
文件中的 SMTP
Identifiants :
FROM_EMAIL = "your_email_address@gmail.com" FROM_PWD = "your_password"
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 "project_x"
Il doit envoyer la demande de révision du code à un développeur aléatoire pour examen et créer un fichier reviewer.json
contenant les informations de révision.
Nous commençons par créer une méthode de demande de suivi nommée followup_request
的后续请求方法。在 followup_request
方法内,读取 reviewer.json
. Dans la méthode
et enregistrez le contenu dans une liste. Le code est le suivant : read_email
with open('reviewer.json','r') as jfile: review_info = json.load(jfile)Ensuite, extrayez les informations de courrier électronique en utilisant la méthode
que vous avez implémentée dans le didacticiel précédent. Re:
email_info = read_email(no_days)Si l'évaluateur a répondu à la demande d'avis, il devrait y avoir un e-mail avec le même sujet et une marque
devant. Alors, parcourez la liste des messages d'avis et comparez le sujet de l'avis au sujet de l'e-mail pour voir si le réviseur a répondu à la demande. review_info
for review in review_info: review_replied = false expected_subject = 'RE: ' + review['subject'] for email in email_info: if expected_subject == email['subject']: review_replied = True print 'Reviewer has responded' break;Comme le montre le code ci-dessus, vous parcourez la liste
et vérifiez le sujet du message de commentaire par rapport au sujet de l'e-mail pour voir si le commentateur a répondu. reviewer.json
文件中保留特定的审阅信息。因此,创建一个名为 Delete_Info
的 Python 方法,以从 reviewer.json
文件中删除特定评论信息。以下是 Delete_Info
. Par conséquent, créez une méthode Python nommée
pour supprimer les informations de commentaire spécifiques du fichier. Voici à quoi ressemble Delete_Info
方法。调用 Delete_Info
方法时,需要传递 review_info
的副本,以免更改原始信息列表。您将需要原始评论信息列表以供稍后比较。因此导入 copy
:
def Delete_Info(info, id): for i in xrange(len(info)): if info[i]['id'] == id: info.pop(i) break return info
Comme le montre le code ci-dessus, vous avez parcouru la liste des informations de commentaire et supprimé les entrées correspondant à l'ID. Après avoir supprimé les informations du fichier, revenez à la liste. review_info
. Lors de l'appel de la méthode Delete_Info
, vous devez transmettre une copie de
copy
pour créer une copie de la liste originale des messages de commentaires.
from copy import copy
followup_request
Créez une copie de la liste.
review_info_copy = copy(review_info)
review_info
列表被迭代,您需要检查 reviewer.json
文件中是否有任何更改。如果任何现有评论信息已被删除,您需要相应更新 reviewer.json
文件。因此,检查 review_info_copy
和 review_info
是否相同,并更新 reviewer.json
Lors de la suppression des informations sur les commentaires répondus de la liste d'origine, transmettez la liste copiée à la méthode .
review_info_copy = Delete_Info(review_info_copy,review['id'])
followup_request
Voici la méthode :
def followup_request(): with open('reviewer.json','r') as jfile: review_info = json.load(jfile) review_info_copy = copy(review_info) email_info = read_email(no_days) for review in review_info: review_replied = False expected_subject = 'Re: ' + review['subject'] for email in email_info: if expected_subject == email['Subject']: review_replied = True review_info_copy = Delete_Info(review_info_copy,review['id']) break;
followup_request
Maintenant, une fois la liste itérée, vous devez vérifier s'il y a des changements dans le fichier . Si des informations de commentaire existantes ont été supprimées, vous devrez mettre à jour votre fichier reviewer.json
文件。现在运行调度程序,以便将代码审查请求发送给随机开发人员。检查该信息是否已保存在 reviewer.json
en conséquence. Alors, vérifiez si review_info_copy
et
. reviewer.json
if review_info_copy != review_info: with open('reviewer.json','w') as outfile: json.dump(review_info_copy,outfile)Voici la méthode 🎜 complète : 🎜
def followup_request(): with open('reviewer.json','r') as jfile: review_info = json.load(jfile) review_info_copy = copy(review_info) email_info = read_email(no_days) for review in review_info: review_replied = False expected_subject = 'Re: ' + review['subject'] for email in email_info: if expected_subject == email['Subject']: review_replied = True review_info_copy = Delete_Info(review_info_copy,review['id']) break; if review_info_copy != review_info: with open('reviewer.json','w') as outfile: json.dump(review_info_copy,outfile)🎜Appelez la méthode 🎜 pour donner suite à une demande d'avis envoyée. 🎜
try: commits = process_commits() # Added the follow Up Method followup_request() if len(commits) == 0: print 'No commits found ' else: schedule_review_request(commits) except Exception,e: print 'Error occurred. Check log for details.' logger.error(str(datetime.datetime.now()) + " - Error occurred : " + str(e) + "\n") logger.exception(str(e))🎜Enregistrez les modifications ci-dessus. Afin de tester les fonctionnalités ultérieures, veuillez supprimer le fichier 🎜 du répertoire du projet. Exécutez maintenant le planificateur pour envoyer des demandes de révision de code à des développeurs aléatoires. Vérifiez si les informations ont été enregistrées dans le fichier 🎜. 🎜 🎜Exiger des développeurs spécifiques qu'ils répondent aux demandes de révision de code en répondant aux e-mails. Maintenant, exécutez à nouveau le planificateur et cette fois, le planificateur devrait être capable de trouver la réponse et de la supprimer du fichier 🎜. 🎜
审核者回复代码审核请求电子邮件后,需要从 reviewer.json
文件中删除该信息,因为您不需要进一步跟踪它。如果审核者尚未回复代码审核请求,您需要发送后续邮件提醒他或她审核请求。
代码审查调度程序将每天运行。当它运行时,您首先需要检查开发人员响应审核请求是否已经过去了一定时间。在项目配置中,您可以设置一个审核周期,在此期间,如果审核者没有回复,调度程序将发送提醒电子邮件。
让我们首先在项目配置中添加配置。在配置文件中添加一个名为 followup_Frequency
的新配置。
{ "name": "project_x", "git_url": "https://github.com/royagasthyan/project_x", "followup_frequency":2, "members": [ "royagasthyan@gmail.com", "samon@gmail.com", "sualonni@gmail.com", "restuni@gmail.com" ] }
因此,当审阅者在 followup_Frequency
天数内没有回复时,您将发送一封提醒电子邮件。读取配置的同时将配置读入全局变量:
for p in main_config: if p['name'] == project: project_url = p['git_url'] project_members = p['members'] followup_frequency = p['followup_frequency'] break
在 followup_request
方法内部,当审稿人在 followup_frequest
天数内没有回复后续请求时,发送提醒邮件。计算自评论发送以来的天数。
review_date = datetime.datetime.strptime(review['sendDate'],'%Y-%m-%d') today = datetime.datetime.today() days_since_review = (today - review_date).days
如果天数大于配置中的后续频率日期,请发送提醒电子邮件。
if not review_replied: if days_since_review > followup_frequency: send_email(review['reviewer'],'Reminder: ' + review['subject'],'\nYou have not responded to the review request\n')
这是完整的 followup_request
方法:
def followup_request(): with open('reviewer.json','r') as jfile: review_info = json.load(jfile) review_info_copy = copy(review_info) email_info = read_email(no_days) for review in review_info: review_date = datetime.datetime.strptime(review['sendDate'],'%Y-%m-%d') today = datetime.datetime.today() days_since_review = (today - review_date).days review_replied = False expected_subject = 'Re: ' + review['subject'] for email in email_info: if expected_subject == email['Subject']: review_replied = True review_info_copy = Delete_Info(review_info_copy,review['id']) break; if not review_replied: if days_since_review > followup_frequency: send_email(review['reviewer'],'Reminder: ' + review['subject'],'\nYou have not responded to the review request\n') if review_info_copy != review_info: with open('reviewer.json','w') as outfile: json.dump(review_info_copy,outfile)
在本教程中,您了解了如何实现跟进代码审核请求的逻辑。您还添加了如果审阅者在一定天数内没有回复电子邮件的情况下发送提醒电子邮件的功能。
这个 Python 代码审查器可以进一步增强以满足您的需求。请分叉存储库并添加新功能,并在下面的评论中告诉我们。
本教程的源代码可在 GitHub 上获取。
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!