プロジェクト

全般

プロフィール

気づき #902 » redmineorg_copy.py

奈良 裕記, 2021/03/21 16:20

 
# -*- coding: utf-8 -*-

# redmine本家のチケット内容を、指定したRedmine上にコピーする。

# カスタムフィールド、
# +1,コメント数をカウントし、カスタムフィールドとして設定する。
# コメントはまとめて一つのカスタムフィールドに設定する。

# Python-Redmine ライブラリを利用している。

from redminelib import Redmine
from redminelib.exceptions import ResourceNotFoundError
from redminelib.exceptions import ServerError

import datetime
import time

# 認証情報と共通定義は別ファイルから読み込む
import authinfo

redmine_org_url=authinfo.redmine_org_url
redmine_copy_url=authinfo.redmine_copy_url
# redmine_tokyo_url=authinfo.redmine_tokyo_url

redmine_org_id =authinfo.redmine_org_id
redmine_org_pass=authinfo.redmine_org_pass
redmine_copy_key=authinfo.redmine_copy_key
#redmine_tokyo_key=authinfo.redmine_tokyo_key

redmine_org_pjname=authinfo.redmine_org_pjname
redmine_copy_pjname=authinfo.redmine_copy_pjname

vote_tracker_id=authinfo.vote_tracker_id

# 関数を別ファイルに分けた
import redmineorg_copy_sub
# 一回で読込む最大チケット数
# コピー元サーバ負荷、処理中の削除/アクセス不可化も考慮し設定
limit_num=50

# 無限ループにならないようループ回数を設定した。
# 2018/12現在のredmineprgの件数からすれば十分(3万件、月200(即時削除多数))
max_loop_count=1000

offset_num=0

# 各redmineサーバに接続する

redmine_org = Redmine(redmine_org_url, username=redmine_org_id, password=redmine_org_pass)
redmine_copy = Redmine(redmine_copy_url , key=redmine_copy_key)
# redmine_tokyo = Redmine(authinfo.redmine_tokyo_url, key=redmine_tokyo_key)


# コピー先PJの現在のチケット数を確認し、offset=本PJのチケット数でコピー開始する。
# 再実行時は、この件数をオフセットとして処理を開始する。初回は0
#
# 厳密に行う場合は、チケット削除時を考慮し、最終チケット番号のチェック必要
# redmine本家では、今から古いチケットの削除は行わないから、この処理で十分と思う。

issues= redmine_copy.issue.filter(project_id=redmine_copy_pjname,status_id='*')
redmine_copy_issue_total=len(issues)
print (redmine_copy_issue_total)

offset_num=redmine_copy_issue_total

for i in range(max_loop_count):
issues= redmine_org.issue.filter(project_id=redmine_org_pjname,status_id='*',sort='id',offset=offset_num, limit=limit_num, include=['children', 'journals','watchers','relations'])
# 読み込んだチケットの件数が0なら、コピー終了とみなして終了する。
issues_len=len(issues)
if(issues_len==0):
break
for issue_org in issues:
print (issue_org.id)
redmineorg_copy_sub.issue_org_copy(issue_org,redmine_org,redmine_org_url,redmine_copy,redmine_copy_pjname,vote_tracker_id)
# time.sleep(1)
offset_num=offset_num+issues_len
# コピー元サーバの負荷考慮しsleep
time.sleep(10)


(13-13/15)