Erstellen eines Python-Code-Überprüfungsplaners: Nachbereitung der Überprüfung

WBOY
Freigeben: 2023-08-30 20:09:18
Original
1108 Leute haben es durchsucht

Erstellen eines Python-Code-Überprüfungsplaners: Nachbereitung der Überprüfung

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.

Loslegen Sie

Klonen Sie zunächst den Quellcode für Teil drei dieser Tutorial-Reihe.

git clone https://github.com/royagasthyan/CodeReviewer-Part3 CodeReviewer
Nach dem Login kopieren

Ändern config.json 文件以包含一些相关的电子邮件地址,并保留 royagasthyan@gmail.com 电子邮件地址。这是因为 git 具有与此特定电子邮件地址相关的提交,这是代码按预期执行所必需的。修改 schedule.py 文件中的 SMTP Anmeldeinformationen:

FROM_EMAIL      = "your_email_address@gmail.com"
FROM_PWD        = "your_password"
Nach dem Login kopieren

Navigieren Sie zum Projektverzeichnis CodeReviewer und versuchen Sie, den folgenden Befehl im Terminal auszuführen.

python scheduler.py -n 20 -p "project_x"
Nach dem Login kopieren

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.

Folgeanfragen umsetzen

Wir beginnen mit der Erstellung einer Folgeanforderungsmethode namens followup_request 的后续请求方法。在 followup_request 方法内,读取 reviewer.json. Lesen Sie innerhalb der

-Methode die

-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)
Nach dem Login kopieren

Als nächstes extrahieren Sie die E-Mail-Informationen mit der

-Methode, die Sie im vorherigen Tutorial implementiert haben. Re:

email_info = read_email(no_days)
Nach dem Login kopieren

Wenn der Rezensent auf die Bewertungsanfrage geantwortet hat, sollte eine E-Mail mit demselben Betreff und einem

-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;
Nach dem Login kopieren

Wie im Code oben gezeigt, durchlaufen Sie die

-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

Sobald ein Prüfer auf eine Codeüberprüfungsanfrage antwortet, müssen Sie keine spezifischen Überprüfungsinformationen mehr in der

-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
Nach dem Login kopieren

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

Wenn Sie auf eine Kommentarnachricht antworten, müssen Sie die Methode

aufrufen. Wenn Sie die Methode Delete_Info aufrufen, müssen Sie eine Kopie von

übergeben, um die ursprüngliche Nachrichtenliste nicht zu ändern. Für einen späteren Vergleich benötigen Sie die Original-Rezensionsinformationsliste. Importieren Sie also das Python-Modul copy, um eine Kopie der ursprünglichen Liste der Kommentarnachrichten zu erstellen.

from copy import copy
Nach dem Login kopieren
followup_requestErstellen Sie eine Kopie der

-Liste.

review_info_copy = copy(review_info)
Nach dem Login kopieren
review_info 列表被迭代,您需要检查 reviewer.json 文件中是否有任何更改。如果任何现有评论信息已被删除,您需要相应更新 reviewer.json 文件。因此,检查 review_info_copyreview_info 是否相同,并更新 reviewer.jsonWenn 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'])
Nach dem Login kopieren
followup_requestDas 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;
Nach dem Login kopieren
followup_requestSobald 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

identisch sind, und aktualisieren Sie die

-Datei. reviewer.json

if review_info_copy != review_info:
    with open('reviewer.json','w') as outfile:
        json.dump(review_info_copy,outfile)
Nach dem Login kopieren

Das ist die vollständige 🎜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;

    if review_info_copy != review_info:
        with open('reviewer.json','w') as outfile:
            json.dump(review_info_copy,outfile)
Nach dem Login kopieren
🎜Rufen Sie die Methode 🎜 auf, um eine gesendete Bewertungsanfrage weiterzuverfolgen. 🎜
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))
Nach dem Login kopieren
🎜Speichern Sie die oben genannten Änderungen. Um die spätere Funktionalität zu testen, löschen Sie bitte die 🎜-Datei aus dem Projektverzeichnis. Führen Sie nun den Planer aus, um Codeüberprüfungsanfragen an zufällige Entwickler zu senden. Überprüfen Sie, ob die Informationen in der 🎜-Datei gespeichert wurden. 🎜 🎜Fordern Sie bestimmte Entwickler auf, auf Anfragen zur Codeüberprüfung zu reagieren, indem sie auf E-Mails antworten. Führen Sie nun den Planer erneut aus und dieses Mal sollte der Planer in der Lage sein, die Antwort zu finden und sie aus der 🎜-Datei zu entfernen. 🎜

发送提醒电子邮件

审核者回复代码审核请求电子邮件后,需要从 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"
    ]
}
Nach dem Login kopieren

因此,当审阅者在 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
Nach dem Login kopieren

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
Nach dem Login kopieren

如果天数大于配置中的后续频率日期,请发送提醒电子邮件。

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')
Nach dem Login kopieren

这是完整的 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)
Nach dem Login kopieren

总结

在本教程中,您了解了如何实现跟进代码审核请求的逻辑。您还添加了如果审阅者在一定天数内没有回复电子邮件的情况下发送提醒电子邮件的功能。

这个 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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage