Compare commits

...

7 Commits

Author SHA1 Message Date
hzk007 975d55de9a commons内部修改
commons内部修改
2023-12-02 22:21:31 +08:00
hzk007 8aa7f376d5 Update apiUtil.py 2023-12-02 22:16:56 +08:00
lishijun a3c0efd376 为pullService.py添加注释 2023-12-01 17:11:39 +08:00
dong_nudt 8b69374d52 main.py 2023-12-01 16:59:53 +08:00
dong_nudt 4fb168bbe7 Update pullService.py 2023-12-01 16:53:33 +08:00
dong_nudt d2879d7e0c Merge pull request '添加注释和提出疑问' (#2) from dong_nudt/PRWelBot4SECourse:添加注释信息 into master 2023-12-01 16:46:45 +08:00
hzk007 d28ad625fa Update main.py 2023-12-01 14:31:27 +08:00
3 changed files with 88 additions and 95 deletions

View File

@ -1,31 +1,41 @@
#!/usr/bin/python
# 负责调用平台接口 完成各项操作
import sys
sys.path.append('..')
import requests
import json
import config.baseConfig as baseconfig
from commons.logUtil import logger
sys.path.append('..') # 将上级目录加入到系统路径中,以便导入那里的模块
import requests # 导入requests库用于发起HTTP请求
import json # 导入json库用于处理JSON数据
import config.baseConfig as baseconfig # 导入配置文件里面可能包含API的基本配置信息
from commons.logUtil import logger # 从commons目录导入日志工具
# 获取 pull状态新信息
def get_pull_infor(owner, repo, index):
# 构造请求的URL
url = baseconfig.apiUrl + "api/v1/{}/pulls/{}.json".format(repo, index)
# 发起GET请求获取Pull请求的信息
response = requests.get(url, headers=baseconfig.header, proxies = baseconfig.proxies)
logger.info("get_pull_infor调用"+str(response.json()))
# 记录日志
logger.info("get_pull_infor调用" + str(response.json()))
# 返回响应的JSON数据
return response.json()
# 获取 添加pull评论信息
def create_pull_comment(issue_id):
# 构造请求的URL
url = baseconfig.apiUrl + "api/issues/{}/journals.json".format(issue_id)
COMMENT = "注意!\n该合并请求已创建满两小时,长时间未处理可能会降低贡献的质量和贡献者积极性。\n请及时处理!"
# 准备请求的数据
data = json.dumps({'content': COMMENT})
# 发起POST请求添加评论
response = requests.post(url, data=data, headers=baseconfig.header, proxies = baseconfig.proxies)
logger.info("create_pull_comment调用"+str(response.json()))
# 记录日志
logger.info("create_pull_comment调用" + str(response.json()))
# 返回响应的JSON数据
return response.json()
if __name__ == '__main__':
# 测试函数使用特定的参数调用get_pull_infor函数
get_pull_infor("wuxiaojun", "wuxiaojun/botreascrch", "3")

View File

@ -26,6 +26,3 @@ def run():
if __name__ == '__main__':
run()

View File

@ -1,120 +1,106 @@
import sys
import sys # 导入sys模块。以便后一行代码导入指定路径'..'下的包
sys.path.append('..')
import config.baseConfig as baseConfig
import pymysql
import datetime
import commons.apiUtil as api
sys.path.append('..') # 将路径添加到系统路径中
import config.baseConfig as baseConfig # 导入config模块中的baseConfig,便于配置数据库
import pymysql # 导入用于MySQL交互的pymysql模块
import datetime # 导入日期和时间操作的datetime模块
import commons.apiUtil as api # 导入commons模块中的apiUtil用于平台获取合并方状态新信息以及对不活跃用户进行评论提醒
# 插入一条pull表记录
# 插入一条记录到'pull'(合并方统计表)
def insert_pull(values):
# 打开数据库连接
db = pymysql.connect(**baseConfig.db_config)
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 建立与数据库的连接
db = pymysql.connect(**baseConfig.db_config)# **用于将字典中的键值对作为参数传递给该函数
# 使用cursor()方法创建游标对象
cursor = db.cursor()# 创建的cursor对象可以操作数据库并保留结果
# 插入语句
# value = (1, 2, "b", "b", now_time, now_time, 0)
# SQL插入语句
ins_sql = """INSERT INTO pull(`pullid`, `index`, `owner`, `repo`, `created`, `checktime`, `status`)
VALUES (%s, %s, "%s", "%s","%s", "%s", %s)""" % values
print(ins_sql)
VALUES (%s, %s, "%s", "%s","%s", "%s", %s)""" % values # 构建带有提供值的SQL语句
print(ins_sql) # 打印构建的SQL语句
try:
cursor.execute(ins_sql)
db.commit()
cursor.execute(ins_sql) # 执行SQL语句
db.commit() # 提交更改到数据库
except Exception as e:
print("ERR0R!insert pull error:")
db.rollback()
print(e)
# 关闭数据库连接
db.close()
print("错误插入pull记录出错") # 打印插入失败的错误信息
db.rollback() # 在出错时回滚更改
print(e) # 打印具体的错误信息
db.close() # 关闭数据库连接
# 更新一条pull表记录
# 更新'pull'表中的记录
def update_pull(index, owner, repo):
# 打开数据库连接
db = pymysql.connect(**baseConfig.db_config)
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 更新语句
db = pymysql.connect(**baseConfig.db_config) # 建立与数据库的连接
cursor = db.cursor() # 创建游标对象
# SQL更新语句根据提供的索引、所有者和仓库名称 将'status'字段更新为1说明该记录更新过
sql_update = "UPDATE pull set `status` = 1 where `index` = '%d' AND `owner` = '%s' AND `repo` = '%s'" % (
index, owner, repo)
index, owner, repo)
try:
cursor.execute(sql_update)
db.commit()
cursor.execute(sql_update) # 执行SQL更新语句
db.commit() # 提交更改到数据库
except Exception as e:
print("ERR0R!update pull error:")
db.rollback()
print(e)
# 关闭数据库连接
db.close()
print("错误更新pull记录出错") # 打印更新失败的错误信息
db.rollback() # 在出错时回滚更改
print(e) # 打印具体的错误信息
db.close() # 关闭数据库连接
# 并更新
# 查并更新'pull'记录
def check_and_update_pull():
# 打开数据库连接
db = pymysql.connect(**baseConfig.db_config)
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
db = pymysql.connect(**baseConfig.db_config) # 建立数据库连接
cursor = db.cursor() # 创建游标对象
now_time = datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S')
now_time = datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S') # 获取当前时间
# SQL查询选择'status'为0且'checktime'小于当前时间的记录(获取当前状态未更新的SQL记录)
sql_query = "select * from pull where `status` = 0 and `checktime` < '%s'" % now_time
# print(sql_query)
try:
# 执行SQL语句
cursor.execute(sql_query)
# 获取所有记录列表
results = cursor.fetchall()
print(results)
cursor.execute(sql_query) # 执行SQL查询
results = cursor.fetchall() # 获取所有记录
print(results) # 打印获取的结果
for item in results:
# 调用接口查询pr状态
# (7, 1, 2, 'b', 'b', datetime.datetime(), None, datetime.datetime(2023, 3, 23, 11, 46, 13), 0)
# 提取 pr记录信息
pull_id = item[0]
pull_index = item[2]
owner = item[3]
repo = item[4]
pr_infor = api.get_pull_infor(owner, repo, pull_index)
print(pr_infor)
issue_id = pr_infor["issue"]["id"];
pull_id = item[0] # 从获取的记录中提取'pull_id',用于唯一标识每个记录
pull_index = item[2] # 从获取的记录中提取pull下标
owner = item[3] # 从获取的记录中提取所有者
repo = item[4] # 从获取的记录中提取仓库名称
# pr 状态标志位0表示未完成1表示已经完成
flag = check_pr(pr_infor)
# 调用API函数根据所有者、仓库和pull_index获取pull请求信息
pr_info = api.get_pull_infor(owner, repo, pull_index)
print(pr_info) # 打印获取的pull请求信息
issue_id = pr_info["issue"]["id"] # 从获取的信息中提取'issue_id'但是在代码文件中未找到issue关键字
# 检查pull请求状态并相应设置标志位
flag = check_pr(pr_info)
sql_update = "" # 初始化SQL更新语句变量
# 数据库 pr记录 更新语句
sql_update = ""
# 若新增评论或者状态为关闭 则修改数据库
if flag == 1:
# pr已完成更新语句
# 如果pull请求完成更新SQL数据库中pull_id对应的信息
sql_update = "UPDATE pull set status = 1 where id = '%d'" % pull_id
# 否则对不活跃的pr调用接口发表评论提醒处理
try:
cursor.execute(sql_update)
db.commit()
cursor.execute(sql_update) # 执行SQL更新语句
db.commit() # 提交更改到数据库
except Exception as e:
db.rollback()
print("ERR0R!update pull error:")
print(e)
db.rollback() # 在出错时回滚更改
print("错误更新pull记录出错") # 打印更新失败的错误信息
print(e) # 打印具体的错误信息
except Exception as e:
db.rollback()
print("ERR0R!deal pull error:")
print(e)
# 关闭数据库连接
db.close()
db.rollback() # 在出错时回滚更改
print("错误处理pull出错") # 打印处理pull请求出错的错误信息
print(e) # 打印具体的错误信息
db.close() # 关闭数据库连接
# 检查 pr状态已完成返回1未完成返回0
def check_pr(pr_infor):
# pr已经关闭
if pr_infor["status"] == "closed":
return 1
# pr有动态
if pr_infor["issue"]["journals_count"] != 0:
return 1
return 0
# 检查pull请求状态完成返回1未完成返回0
def check_pr(pr_info):
if pr_info["status"] == "closed": # 检查pull请求状态是否为closedstatus值只有0、1、2三种这里的closed不对
return 1 # 如果pull请求已关闭返回1
if pr_info["issue"]["journals_count"] != 0: # 检查pull请求是否有日志未找到issue和journals_count关键字
return 1 # 如果pull请求有日志返回1
return 0 # 如果pull请求未完成返回0
if __name__ == '__main__':
check_and_update_pull()
check_and_update_pull() # 调用函数检查和更新pull请求