目录
开始使用
实施后续请求
发送提醒电子邮件
总结
首页 后端开发 Python教程 构建一个Python代码审查调度程序:审查跟进

构建一个Python代码审查调度程序:审查跟进

Aug 30, 2023 pm 08:09 PM
代码审查 调度程序 审查跟进

构建一个Python代码审查调度程序:审查跟进

在本系列的第三部分中,您了解了如何保存代码审查请求信息以供后续处理。您创建了一个名为 read_email 的方法来从收件箱中获取电子邮件,以检查审阅者是否已回复代码审阅请求。您还在代码审查调度程序代码中实现了错误处理。

在本系列的这一部分中,您将使用保存的代码审核信息和电子邮件中的信息来检查审核者是否已回复审核请求。如果请求尚未得到回复,您将向审核者发送一封后续电子邮件。

开始使用

首先克隆本教程系列第三部分的源代码。

git clone https://github.com/royagasthyan/CodeReviewer-Part3 CodeReviewer
登录后复制

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

FROM_EMAIL      = "your_email_address@gmail.com"
FROM_PWD        = "your_password"
登录后复制

导航到项目目录 CodeReviewer 并尝试在终端中执行以下命令。

python scheduler.py -n 20 -p "project_x"
登录后复制

它应该将代码审查请求发送给随机开发人员进行审查,并创建一个包含审查信息的 reviewer.json 文件。

实施后续请求

我们首先创建一个名为 followup_request 的后续请求方法。在 followup_request 方法内,读取 reviewer.json 的后续请求方法。在

方法内,读取

文件并将内容保存在列表中。代码如下:read_email

with open('reviewer.json','r') as jfile:
    review_info = json.load(jfile)
登录后复制

接下来,使用您在上一个教程中实现的

方法提取电子邮件信息。Re:

email_info = read_email(no_days)
登录后复制

如果审阅者已回复审阅请求,则应该有一封具有相同主题的电子邮件,并在其前面添加

标记。因此,迭代审阅信息列表,并将审阅主题与电子邮件主题进行比较,看看审阅者是否已回复请求。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;
登录后复制

如上面的代码所示,您迭代了

列表,并根据电子邮件主题检查了评论信息主题,以查看评论者是否已回复。reviewer.json 文件中保留特定的审阅信息。因此,创建一个名为 Delete_Info 的 Python 方法,以从 reviewer.json 文件中删除特定评论信息。以下是 Delete_Info

现在,一旦审阅者响应了代码审阅请求,您就无需在

文件中保留特定的审阅信息。因此,创建一个名为

的 Python 方法,以从

文件中删除特定评论信息。以下是 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
登录后复制

如上面的代码所示,您已经迭代了评论信息列表并删除了与Id匹配的条目。从文件中删除信息后,返回列表。review_info

回复某条评论信息时,需要调用

方法。调用 Delete_Info 方法时,需要传递

的副本,以免更改原始信息列表。您将需要原始评论信息列表以供稍后比较。因此导入 copy Python 模块来创建原始评论信息列表的副本。

from copy import copy
登录后复制
followup_request创建

列表的副本。

review_info_copy = copy(review_info)
登录后复制
review_info 列表被迭代,您需要检查 reviewer.json 文件中是否有任何更改。如果任何现有评论信息已被删除,您需要相应更新 reviewer.json 文件。因此,检查 review_info_copyreview_info 是否相同,并更新 reviewer.json从原列表中删除已回复的评论信息时,将复制列表传递给

方法。

review_info_copy = Delete_Info(review_info_copy,review['id'])
登录后复制
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_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现在,一旦

列表被迭代,您需要检查

文件中是否有任何更改。如果任何现有评论信息已被删除,您需要相应更新 reviewer.json 文件。现在运行调度程序,以便将代码审查请求发送给随机开发人员。检查该信息是否已保存在 reviewer.json 文件。因此,检查 review_info_copy

是否相同,并更新

文件。 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 上获取。

以上是构建一个Python代码审查调度程序:审查跟进的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何使用Go语言进行代码审查实践 如何使用Go语言进行代码审查实践 Aug 02, 2023 pm 11:10 PM

如何使用Go语言进行代码审查实践引言:在软件开发过程中,代码审查(CodeReview)是一种重要的实践。通过互相检查和分析代码,团队成员可以发现潜在的问题、改进代码质量、增加团队合作和共享知识。本文将介绍如何使用Go语言进行代码审查实践,并附上代码示例。一、代码审查的重要性代码审查是一种促进代码质量的最佳实践。它可以发现和纠正代码中的潜在错误、提高代码可

Java开发中如何进行代码审查和性能优化 Java开发中如何进行代码审查和性能优化 Oct 10, 2023 pm 03:05 PM

Java开发中如何进行代码审查和性能优化,需要具体代码示例在日常的Java开发过程中,代码审查和性能优化是非常重要的环节。代码审查能够确保代码的质量和可维护性,而性能优化则能够提升系统的运行效率和响应速度。本文将介绍如何进行Java代码审查和性能优化,并且给出具体的代码示例。代码审查代码审查是在代码编写的过程中逐行检查代码,并修复潜在的问题和错误的过程。以下

Python开发经验分享:如何进行代码审查和质量保证 Python开发经验分享:如何进行代码审查和质量保证 Nov 22, 2023 am 08:18 AM

Python开发经验分享:如何进行代码审查和质量保证导言:在软件开发过程中,代码审查和质量保证是至关重要的环节。良好的代码审查可以提高代码质量、减少错误和缺陷,提高程序的可维护性和可扩展性。本文将从以下几个方面分享Python开发中如何进行代码审查和质量保证的经验。一、制定代码审查规范代码审查是一种系统性的活动,需要对代码进行全面的检查和评估。为了规范代码审

PHP 代码审查与持续集成 PHP 代码审查与持续集成 May 06, 2024 pm 03:00 PM

是的,将代码审查与持续集成相结合可以提高代码质量和交付效率。具体工具包括:PHP_CodeSniffer:检查编码风格和最佳实践。PHPStan:检测错误和未使用的变量。Psalm:提供类型检查和高级代码分析。

C#开发注意事项:代码审查与质量保障 C#开发注意事项:代码审查与质量保障 Nov 22, 2023 pm 05:00 PM

在C#开发过程中,代码的质量保障是至关重要的。代码质量的高低直接影响着软件的稳定性、可维护性和可扩展性。而代码审查作为一种重要的质量保障手段,在软件开发中发挥着不可忽视的作用。本文将重点介绍C#开发中的代码审查注意事项,以帮助开发者提升代码质量。一、审查的目的与意义代码审查是指通过仔细阅读和检查代码,发现和纠正其中存在的问题和错误的过程。它的主要目的是提高代

React代码审查指南:如何确保前端代码的质量和可维护性 React代码审查指南:如何确保前端代码的质量和可维护性 Sep 27, 2023 pm 02:45 PM

React代码审查指南:如何确保前端代码的质量和可维护性引言:在今天的软件开发中,前端代码越来越重要。而React作为一种流行的前端开发框架,被广泛应用于各种类型的应用程序中。然而,由于React的灵活性和强大的功能,编写高质量和可维护的代码可能会成为一个挑战。为了解决这个问题,本文将介绍一些React代码审查的最佳实践,并提供一些具体的代码示例。一、代码风

如何在GitLab中进行代码审查和合并请求 如何在GitLab中进行代码审查和合并请求 Oct 20, 2023 pm 04:03 PM

如何在GitLab中进行代码审查和合并请求代码审查是一个重要的开发实践,可以帮助团队发现潜在的问题并改善代码质量。在GitLab中,通过合并请求(MergeRequest)功能,我们可以方便地进行代码审查和合并工作。本文将介绍如何在GitLab中执行代码审查和合并请求,同时提供具体的代码示例。准备工作:请确保您已经创建了一个GitLab项目,并且已经拥有相

如何进行C++代码的代码审查? 如何进行C++代码的代码审查? Nov 02, 2023 am 09:12 AM

如何进行C++代码的代码审查?代码审查是软件开发过程中非常重要的一环,它能够帮助开发团队识别并纠正潜在的错误,提高代码质量,减少后续维护和调试的工作量。对于C++这样的强类型静态语言来说,代码审查尤为重要。下面将介绍一些关键步骤和注意事项,帮助你进行有效的C++代码审查。设定代码审查标准:在进行代码审查之前,团队应该共同制定一份代码审查标准,约定各类错误和违

See all articles