1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python文档处理脚本 github_使用 Python3 编写 Github 自动周报生成器

python文档处理脚本 github_使用 Python3 编写 Github 自动周报生成器

时间:2023-03-08 21:04:03

相关推荐

python文档处理脚本 github_使用 Python3 编写 Github 自动周报生成器

简介

都说好东西要分享出去,但这个项目例外!我们将教你使用 PyGithub 自动生成周报——千万不要让人知道你学了这个项目,否则你将承包全公司人的周报!

每个程序员都有一个痛,那就是周报

每次写周报的时候,都感觉身体被掏空……

“我这周TM都干了什么了?”

“我也不知道”

“我这周加了辣么多功能,修了辣么多BUG,语言岂能描述我工作量的万分之一?”

别担心,这个项目就将帮你解决这个痛!

借助 PyGithub ,自动生成周报!

让你明白学习是多么的重要!

一、课程介绍

1. 内容简介

很多项目是依托于 Github 平台进行需求发布、开发管理、多人协助的。如果你主管某个项目,并且想查看参与成员每一周的项目参与活跃度,我们可以通过查看他们提交的 commit 数量、issue 数量来大致评估。

手动查询是否耗费人力、精力。所以我们通过调用 Github 的开发 API 来制作一个自动周报统计脚本。

2. 课程知识点

Django 3.4.3

PyGithub

3. 实验环境

Xfce终端

Python 3.4.3

4. 效果截图

二、关于自动周报脚本的故事

在实验楼中,所有的开发以及课程管理流程都是基于 Github 的。

当我们的网站以及实验环境出现问题时,石头哥会将问题汇总发布到对应开发代码仓库的 issue 中,并指派开发人员进行修复。

当需要上线一个新的 feature 时,石头哥也会重复这个操作,发布 feature 的 issue,并指派开发人员进行研发。对于课程的管理亦是如此,当有些课程中的实验版本有误或者某些文档中的措辞不准确时,我的上司也会将其修改的任务发布成 issue ,并指派给我们。

为了查看大家一周的工作量,石头哥培养了我们写周报的好习惯。在这一周中,我们每个修复了多少个 issue ,进行了多少次代码提交 commit,都要我们在周报中体现出来。好比这样:

冬瓜 的 commit 周报

冬瓜 在本周共有 10 次 commits

Add movie model for network & add widget - Tue, 14 Mar 05:17:34 GMT

Update setting content about userinfo- Tue, 14 Mar 05:17:34 GMT

update some code to fix bug - Tue, 14 Mar 05:17:34 GMT

Update README.md- Tue, 14 Mar 05:17:34 GMT

Complete showing the date. fixed #4- Tue, 14 Mar 05:17:34 GMT

Update date and luner api and model - Tue, 14 Mar 05:17:34 GMT

Update setting page & add some cell - Tue, 14 Mar 05:17:34 GMT

Add TKSwitcherCollection by cocoapods and update README - Tue, 14 Mar 05:17:34 GMT

Update README.md to show process - Tue, 14 Mar 05:17:34 GMT

Complete weather and degree update by location - Tue, 14 Mar 05:17:34 GMT

每到周末写周报虽然不会浪费多少时间,但是多少会扰乱周末的好心情 😝。

众所周知,程序员都是十分懒的。写代码只为了去简化很多事情。一天,石头哥找到我:“每周写周报好麻烦,要不咱们利用 Github 的 API 自动统计每个人每周的贡献,自动生成周报。这样就能省去大家很多事情!”

其实冬瓜心里很早就想写一个这种东西,既然石头哥将此重任托付给我,那冬瓜说干就干!💪

三、浏览Github文档,确定功能

先订个小目标,我们需要获取的是指定仓库的 commit 和 issue 中 comment 记录。对于代码的提交,可以用 commit 来体现,这个不用多言。

而在实验楼中课程的审核,是由对应 issue 的 comment 来体现的。例如下图:

当我们审核完某个课程的时候,就会在 comment 处发布我们的审核结构。

所以利用 Github 的 API,我们需要根据特定的仓库,来获取其 commit 或者 issue 中的 comment 记录,从而生成周报。我们在官方的 API 中找到了 commit 和 comment 文档:

但是我们发现,在文档中的例子全部都是使用 curl 来响应接口的。当然我们用 Python 也可以做到这些事情,只不过对其进行数据封装一定会大大加重我们的工作量,所以我们引入一个 Github 的 API 封装库-PyGithub。

PyGithub 这个 Python 的封装库兼容 Python 2.7 和 Python 3.x。通过使用它可以达到调用函数接口以完成对于 Github 的 API 调用。并且传入的参数都是 Python 中常用的对象,而不是晦涩的字符串。

四、安装PyGithub包

我们在实验楼的环境中,先对 apt-get 的源进行更新

$ sudo apt-get update

$ sudo apt-get upgrade #时间有点久,耐心等待

然后我们来安装 Python3 的包管理工具 pip:

$ sudo apt-get install python3-pip

在安装 pip 之后,我们要用其安装我们开发周报生成器所需要的工具:PyGithub 以及 ipython。

我们先新建一个目录作为项目目录:

$ mkdir repobot && cd repobot

$ sudo pip3 install pygithub

$ sudo pip3 install ipython

PyGithub 是我们需要的库。

iPython 是一个交互式测试 Python 代码的工具,在之后测试 PyGithub 接口的时候,你会发现这个工具十分好用。

五、测试 PyGithub 接口,获取指定 repo 的 commite 记录

启动 iPython 导入 PyGithub 库,对其进行 Class 接口的测试。当然,测试的时候不是漫无目的的,可以根据 PyGithub 官方文档 来尝试。

$ ipython3

键入 ipython3 之后,进入 ipython 的交互式界面,之后我们输入的代码都会和 Python 代码一样交给解释器处理。

备注:和 IDLE 类似,我们可以使用 tab 补全。不同的是 iPython 的交互速度和补全提示功能做的更加完善。

In [1]: from github import Github

In [2]: gg = Github('', '').get_user()

In [3]: gg

Out[3]: AuthenticatedUser(login=None)

我们使用 PyGithub 官方给出的最简示例,使用我自己的账号进行创建 Github 对象,并使用之中的 get_user() 方法,看到反馈结果。我们可以继续对这个对象进行验证:

In [4]: gg.name

Out[4]: 'Desgard_Duan'

是的,冬瓜 Github 的 ID 确实是 Desgard_Duan 😅。这下可以放心的使用了。继续参照官方文档 我们来获取一下个人用户中的所有仓库信息:

In [5]: for repo in gg.get_repos():

...: print(repo.name)

...:

Calendouer-iOS

DGAdLaunchView

DGCuteHelper

DGDownloaderButton

...

这样就获取到了自己所有的代码仓库列表。这是我们重要的一步尝试。因为我们的目标就是通过指定的 repo 从而获取到期对应的 commite 记录。

查看 PyGithub 的 Repository 对应文档 ,在这之中,可以查询到对应代码仓库的 commites 的 Get 方法:

get_commits(sha=NotSet, path=NotSet, since=NotSet, until=NotSet, author=NotSet)

Parameters:

sha – string

path – string

since – datetime.datetime

until – datetime.datetime

author – string or github.NamedUser.NamedUser

or github.AuthenticatedUser.AuthenticatedUser

Return types:

github.PaginatedList.PaginatedList

of mit

这里面 sha 其实对应的是 commit 的 sha 识别号或者是 repo 的分支名。path 是路径,author 不用多说是提交者 id,而 since 和 until 是由 PyGithub 进行封装的,这里面我们只需要传入 datetime 对象即可。例如我们现在要查询 Calendour-iOS 这个仓库从现在开始至七天前的某个仓库的 commit 情况:

In [0]: import datetime

In [1]: repo = gg.get_repo("calendouer-ios")

In [2]: repo.name# 检测是否获取到对应仓库Out[2]: 'Calendouer-iOS'In [3]: commits = repo.get_commits(sha = 'master', since = datetime.datetime.now() - datetime.timedelta(days = 7), until = datetime.time.now())

In [4]: for cm in commits:

...: print(cm.sha)

...: print(mit.message)01589f0756b4423b0e5122d26a9d0a4222776c63

关于Setting页面的静态cell的优化

fb31aa63555871b7e5447ecb460f8c0af9d47205

关于我的页面静态cell的优化2d4e2c619d68204c8e49445a4699bdbbcacf4dad

改进静态cell的配置381ba051990ff11cb24224d3ee1a2fde44f129ae

Update userdefault setting fixed #5e6f82f839706903eb4e42b9450234638a585ae3b

Add the animation of show label

f349761cf3460a8c64f0497805dd0b93f0f07c57

Udpate random movie recommand.4d9166e8991df1a3cc4e9e742aeca5ef40df4ddb

Update files & change the weather icon by weather, now & add animation741391cc4e5525fefc08fc4fc6c93ad2b4e0c31c

Complete the movie model to translate data to card cell. fixed #2de9849daeb2b4e97681d51ddea3b2543249da7b6

Add movie model for network & add widget

我们可以看到,已经获取到了指定指定仓库指定时段提交的 commits 记录。至此我们的调试工作以及做完了一大部分。

篇幅有限,后续步骤及详细代码点击【使用 Python3 编写 Github 自动周报生成器】进行查看,直接来实验楼撸代码学习啊!

在线开发环境:

项目开发学习,自然少不了动手实践,实验楼给每个学习者都提供了在线的开发环境,可以跟着教程随时动手操作学习~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。