Im dritten Teil dieser Serie haben Sie gelernt, wie Sie Informationen zur Codeüberprüfungsanfrage für die spätere Verarbeitung speichern. Sie erstellen eine Methode namens read_email
, um eine E-Mail aus dem Posteingang zu erhalten und zu prüfen, ob der Prüfer auf die Codeüberprüfungsanfrage geantwortet hat. Sie haben auch die Fehlerbehandlung im Codeüberprüfungsplanercode implementiert.
In diesem Teil der Serie verwenden Sie Ihre gespeicherten Codeüberprüfungsinformationen und Informationen aus Ihrer E-Mail, um zu überprüfen, ob der Prüfer auf die Überprüfungsanfrage geantwortet hat. Wenn die Anfrage nicht beantwortet wurde, senden Sie eine Folge-E-Mail an den Prüfer.
Klonen Sie zunächst den Quellcode für Teil drei dieser Tutorial-Reihe.
git clone https://github.com/royagasthyan/CodeReviewer-Part3 CodeReviewer
Ändern config.json
文件以包含一些相关的电子邮件地址,并保留 royagasthyan@gmail.com
电子邮件地址。这是因为 git 具有与此特定电子邮件地址相关的提交,这是代码按预期执行所必需的。修改 schedule.py
文件中的 SMTP
Anmeldeinformationen:
FROM_EMAIL = "your_email_address@gmail.com" FROM_PWD = "your_password"
Navigieren Sie zum Projektverzeichnis CodeReviewer
und versuchen Sie, den folgenden Befehl im Terminal auszuführen.
python scheduler.py -n 20 -p "project_x"
Es sollte die Codeüberprüfungsanfrage zur Überprüfung an einen zufälligen Entwickler senden und eine reviewer.json
Datei mit den Überprüfungsinformationen erstellen.
Wir beginnen mit der Erstellung einer Folgeanforderungsmethode namens followup_request
的后续请求方法。在 followup_request
方法内,读取 reviewer.json
. Lesen Sie innerhalb der
-Datei und speichern Sie den Inhalt in einer Liste. Der Code lautet wie folgt: read_email
with open('reviewer.json','r') as jfile: review_info = json.load(jfile)
-Methode, die Sie im vorherigen Tutorial implementiert haben. Re:
email_info = read_email(no_days)
-Zeichen davor stehen. Gehen Sie also die Liste der Bewertungsnachrichten durch und vergleichen Sie den Bewertungsbetreff mit dem E-Mail-Betreff, um festzustellen, ob der Prüfer auf die Anfrage geantwortet hat. 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;
-Liste und vergleichen das Thema der Kommentarnachricht mit dem Betreff der E-Mail, um zu sehen, ob der Kommentator geantwortet hat. reviewer.json
文件中保留特定的审阅信息。因此,创建一个名为 Delete_Info
的 Python 方法,以从 reviewer.json
文件中删除特定评论信息。以下是 Delete_Info
-Datei speichern. Erstellen Sie daher eine Python-Methode mit dem Namen
, um bestimmte Kommentarinformationen aus der-Datei zu entfernen. So sieht Delete_Info
方法。调用 Delete_Info
方法时,需要传递 review_info
的副本,以免更改原始信息列表。您将需要原始评论信息列表以供稍后比较。因此导入 copy
aus:
def Delete_Info(info, id): for i in xrange(len(info)): if info[i]['id'] == id: info.pop(i) break return info
Wie im Code oben gezeigt, haben Sie die Liste der Kommentarinformationen durchlaufen und die Einträge entfernt, die der ID entsprechen. Nachdem Sie die Informationen aus der Datei entfernt haben, kehren Sie zur Liste zurück. review_info
aufrufen. Wenn Sie die Methode Delete_Info
aufrufen, müssen Sie eine Kopie von
copy
, um eine Kopie der ursprünglichen Liste der Kommentarnachrichten zu erstellen.
from copy import copy
followup_request
Erstellen Sie eine Kopie der -Liste.
review_info_copy = copy(review_info)
review_info
列表被迭代,您需要检查 reviewer.json
文件中是否有任何更改。如果任何现有评论信息已被删除,您需要相应更新 reviewer.json
文件。因此,检查 review_info_copy
和 review_info
是否相同,并更新 reviewer.json
Wenn Sie die Informationen zu beantworteten Kommentaren aus der ursprünglichen Liste löschen, übergeben Sie die kopierte Liste an die Methode .
review_info_copy = Delete_Info(review_info_copy,review['id'])
followup_request
Das ist die Methode:
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
Sobald die -Liste iteriert ist, müssen Sie prüfen, ob es Änderungen in der -Datei gibt. Wenn vorhandene Kommentarinformationen entfernt wurden, müssen Sie Ihre reviewer.json
文件。现在运行调度程序,以便将代码审查请求发送给随机开发人员。检查该信息是否已保存在 reviewer.json
-Datei entsprechend aktualisieren. Überprüfen Sie also, ob review_info_copy
und
-Datei. reviewer.json
if review_info_copy != review_info: with open('reviewer.json','w') as outfile: json.dump(review_info_copy,outfile)
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)
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))
审核者回复代码审核请求电子邮件后,需要从 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 上获取。
Das obige ist der detaillierte Inhalt vonErstellen eines Python-Code-Überprüfungsplaners: Nachbereitung der Überprüfung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!