reposync/send_gitee_issue.py

133 lines
4.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import urllib
import requests
import mysql.connector
from datetime import datetime, timedelta
def send_gitee_issue(owner, repo, token, conn, cursor):
cursor.execute('SELECT subject, description, status_id ,priority_id, start_date, due_date , branch_name FROM gitlink_issue')
gitlink_result = cursor.fetchall()
cursor.execute('DROP TABLE IF EXISTS gitee_issue')
# 创建一个表
cursor.execute('''CREATE TABLE IF NOT EXISTS gitee_issue
(id INT AUTO_INCREMENT PRIMARY KEY, issue_id VARCHAR(10), issue_title VARCHAR(100), issue_body VARCHAR(1000), issue_state VARCHAR(15), issue_created_at VARCHAR(100), issue_priority INT,issue_start_date VARCHAR(100), issue_deadline VARCHAR(100), issue_branch VARCHAR(100))''')
for row in gitlink_result:
# Gitee创建issue的API URL
url = f"https://gitee.com/api/v5/repos/{owner}/issues"
# 构造请求头
headers = {'Authorization': f'token {token}'}
data = {
"access_token": token,
"owner": owner,
"repo": repo,
"title": row[0],
"body": row[1],
}
response = requests.post(url, headers=headers, json=data)
issue_info = response.json()
if row[2] == 1:
state = 'open'
elif row[2] == 2:
state = 'progressing'
else:
state = 'closed'
if row [3] == 1:
priority = 1
elif row [3] == 2:
priority = 2
elif row [3] == 3:
priority = 3
else:
priority = 4
start_date = row[4]
due_date = row[5]
branch = row[6]
cursor.execute(
"INSERT INTO gitee_issue (issue_id, issue_title, issue_body, issue_state, issue_priority, issue_start_date, issue_deadline, issue_branch) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)",
(issue_info['number'], row[0], row[1], state, priority, start_date, due_date, branch))
conn.commit()
# # 打印响应
# print(response.text)
# 检查响应状态码
if response.status_code == 201:
issue_info = response.json()
# print(f'Issue created with ID: {issue_info["number"]}')
else:
print(f"创建issue失败状态码{response.status_code},错误信息:{response.text}")
###########################更改已经创建好的issue###############################
cursor.execute('SELECT issue_id, issue_state, issue_priority, issue_start_date, issue_deadline, issue_branch FROM gitee_issue')
# Gitee更新issue的API URL
gitee_update_result = cursor.fetchall()
for row in gitee_update_result:
issue_number = row[0]
state = row[1]
url = f'https://gitee.com/api/v5/repos/{owner}/issues/{issue_number}'
# 构造请求头
headers = {'Authorization': f'token {token}'}
plan_started_at = row[3]
try:
date_obj = datetime.strptime(plan_started_at, "%Y-%m-%d")
formatted_date_str = date_obj.strftime("%Y-%m-%dT%H:%M:%S") + "+08:00"
plan_started_at = date_obj.strftime("%Y-%m-%dT%H:%M:%S") + "+08:00"
except:
plan_started_at = row[3]
deadline = row[4]
# original_date = datetime.strptime(deadline, "%Y-%m-%d")
# target_date = original_date + timedelta(days=2)
# target_time = target_date.replace(hour=23, minute=59, second=59)
# deadline = target_time.strftime("%Y-%m-%dT%H:%M:%S") + "+08:00"
# 发送POST请求
data = {
"access_token": token,
"owner": owner,
"repo": repo,
"number": issue_number,
"state": state,
"priority": row[2],
"plan_started_at": plan_started_at,
"deadline": deadline,
"branch": row[5]
}
# print(plan_started_at,deadline)
# 将字典转换为查询字符串
query_string = urllib.parse.urlencode(data)
# 完整的请求 URL包括查询字符串
full_url1 = f"{url}?{query_string}"
response = requests.patch(full_url1, headers=headers, json=data)
# 打印响应
# print(response.text)
# 检查响应状态码
if response.status_code == 200:
issue_info = response.json()
# print(f'Issue created with ID: {issue_info["number"]}')
else:
print(f"创建issue失败状态码{response.status_code},错误信息:{response.text}")
print("成功同步gitlink-issues到gitee_issues")
# # 连接到MySQL数据库
# conn = mysql.connector.connect(
# host="localhost",
# user="root",
# password="251226X",
# database="reposyncer"
# )
# cursor = conn.cursor()
#
# token = '62b7d0577a13b75ff066047426df30cb'
# owner = 'wyf0625'
# repo = 'ob-reposyncer-gitee'
# send_gitee_issue(owner, repo, token, conn, cursor)